import type { KnowledgeSpace } from '@dify/contracts/knowledge-fs/types.gen' import { useTranslation } from 'react-i18next' import { useFormatTimeFromNow } from '@/hooks/use-format-time-from-now' import Link from '@/next/link' function getBuiltinIconName(iconRef: string | undefined) { if (!iconRef?.startsWith('builtin:')) return undefined return iconRef.slice('builtin:'.length).replaceAll('-', ' ') } export function KnowledgeSpaceCard({ knowledgeSpace }: { knowledgeSpace: KnowledgeSpace }) { const { t } = useTranslation('dataset') const { formatTimeFromNow } = useFormatTimeFromNow() const unavailable = t(($) => $['cornerLabel.unavailable']) const iconName = getBuiltinIconName(knowledgeSpace.iconRef) const updatedAt = Date.parse(knowledgeSpace.updatedAt) const formattedUpdatedAt = Number.isNaN(updatedAt) ? knowledgeSpace.updatedAt : formatTimeFromNow(updatedAt) return (
  • {iconName ? ( {iconName.charAt(0).toUpperCase()} ) : ( )}

    {knowledgeSpace.name}

    {t(($) => $['newKnowledge.cardType'])}

    {knowledgeSpace.description || t(($) => $['newKnowledge.noDescription'])}

    {t(($) => $['newKnowledge.tags'])} {unavailable}
    {t(($) => $['newKnowledge.documentsUnavailable'])} {t(($) => $['newKnowledge.appsUnavailable'])} / {t(($) => $['newKnowledge.updated'], { date: formattedUpdatedAt, })}
  • ) }