'use client' import type { FC } from 'react' import type { TryAppInfo } from '@/service/try-app' import { Button } from '@langgenius/dify-ui/button' import { cn } from '@langgenius/dify-ui/cn' import * as React from 'react' import { useTranslation } from 'react-i18next' import { AppTypeIcon } from '@/app/components/app/type-selector' import AppIcon from '@/app/components/base/app-icon' import useGetRequirements from './use-get-requirements' type Props = Readonly<{ appId: string appDetail: TryAppInfo canCreate?: boolean categories?: string[] className?: string createButtonStepByStepTourTarget?: string onCreate: () => void }> const headerClassName = 'system-sm-semibold-uppercase text-text-secondary mb-3' const requirementIconSize = 20 type RequirementIconProps = { iconUrl: string } const RequirementIcon: FC = ({ iconUrl }) => { const [failedSource, setFailedSource] = React.useState(null) const hasLoadError = !iconUrl || failedSource === iconUrl if (hasLoadError) { return (
) } return ( setFailedSource(iconUrl)} /> ) } const AppInfo: FC = ({ appId, canCreate = true, className, categories, createButtonStepByStepTourTarget, appDetail, onCreate, }) => { const { t } = useTranslation() const mode = appDetail?.mode const visibleCategories = Array.from(new Set(categories?.filter(Boolean) ?? [])) const { requirements } = useGetRequirements({ appDetail, appId }) return (
{/* name and icon */}
{appDetail.name}
{mode === 'advanced-chat' && (
{t(($) => $['types.advanced'], { ns: 'app' }).toUpperCase()}
)} {mode === 'chat' && (
{t(($) => $['types.chatbot'], { ns: 'app' }).toUpperCase()}
)} {mode === 'agent-chat' && (
{t(($) => $['types.agent'], { ns: 'app' }).toUpperCase()}
)} {mode === 'workflow' && (
{t(($) => $['types.workflow'], { ns: 'app' }).toUpperCase()}
)} {mode === 'completion' && (
{t(($) => $['types.completion'], { ns: 'app' }).toUpperCase()}
)}
{appDetail.description && (
{appDetail.description}
)} {canCreate && ( )} {visibleCategories.length > 0 && (
{t(($) => $['tryApp.category'], { ns: 'explore' })}
{visibleCategories.map((category) => ( {category} ))}
)} {requirements.length > 0 && (
{t(($) => $['tryApp.requirements'], { ns: 'explore' })}
{requirements.map((item) => (
{item.name}
))}
)}
) } export default React.memo(AppInfo)