'use client' import type { FC } from 'react' import type { FullDocumentDetail } from '@/models/datasets' 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 Divider from '@/app/components/base/divider' import useMetadataDocument from '../hooks/use-metadata-document' import InfoGroup from './info-group' import NoData from './no-data' const i18nPrefix = 'metadata.documentMetadata' type Props = Readonly<{ datasetId: string documentId: string className?: string docDetail: FullDocumentDetail canEdit?: boolean }> const MetadataDocument: FC = ({ datasetId, documentId, className, docDetail, canEdit = false, }) => { const { t } = useTranslation() const { embeddingAvailable, isEdit, setIsEdit, list, tempList, setTempList, handleSelectMetaData, handleAddMetaData, hasData, builtList, builtInEnabled, startToEdit, handleSave, handleCancel, originInfo, technicalParameters, } = useMetadataDocument({ datasetId, documentId, docDetail }) return (
{hasData || isEdit ? (
$['metadata.metadata'], { ns: 'dataset' })} uppercaseTitle={false} titleTooltip={t(($) => $[`${i18nPrefix}.metadataToolTip`], { ns: 'dataset' })} list={isEdit ? tempList : list} dataSetId={datasetId} headerRight={ embeddingAvailable && canEdit && (isEdit ? (
) : ( )) } isEdit={isEdit} contentClassName="mt-5" onChange={(item) => { const newList = tempList.map((i) => (i.name === item.name ? item : i)) setTempList(newList) }} onDelete={(item) => { const newList = tempList.filter((i) => i.name !== item.name) setTempList(newList) }} onAdd={handleAddMetaData} onSelect={handleSelectMetaData} />
) : ( embeddingAvailable && canEdit && setIsEdit(true)} /> )} {builtInEnabled && (
)} {/* Old Metadata */} $[`${i18nPrefix}.documentInformation`], { ns: 'dataset' })} list={originInfo} dataSetId={datasetId} /> $[`${i18nPrefix}.technicalParameters`], { ns: 'dataset' })} list={technicalParameters} dataSetId={datasetId} />
) } export default React.memo(MetadataDocument)