2025-02-20 18:23:41 +08:00
'use client'
import type { FC } from 'react'
2025-02-28 11:50:46 +08:00
import React from 'react'
2025-02-20 18:23:41 +08:00
import InfoGroup from './info-group'
import NoData from './no-data'
import Button from '@/app/components/base/button'
import { RiEditLine } from '@remixicon/react'
import { useTranslation } from 'react-i18next'
import Divider from '@/app/components/base/divider'
2025-02-28 11:50:46 +08:00
import useMetadataDocument from '../hooks/use-metadata-document'
2025-02-28 14:32:53 +08:00
import type { FullDocumentDetail } from '@/models/datasets'
2025-02-27 18:01:53 +08:00
import cn from '@/utils/classnames'
2025-02-20 18:23:41 +08:00
const i18nPrefix = 'dataset.metadata.documentMetadata'
2025-02-27 18:01:53 +08:00
type Props = {
2025-02-28 11:50:46 +08:00
datasetId : string
documentId : string
2025-02-27 18:01:53 +08:00
className? : string
2025-02-28 14:32:53 +08:00
docDetail : FullDocumentDetail
2025-02-27 18:01:53 +08:00
}
const MetadataDocument : FC < Props > = ( {
2025-02-28 11:50:46 +08:00
datasetId ,
documentId ,
2025-02-27 18:01:53 +08:00
className ,
2025-02-28 14:32:53 +08:00
docDetail ,
2025-02-27 18:01:53 +08:00
} ) = > {
2025-02-20 18:23:41 +08:00
const { t } = useTranslation ( )
2025-02-28 11:50:46 +08:00
const {
isEdit ,
setIsEdit ,
list ,
tempList ,
setTempList ,
hasData ,
builtList ,
builtInEnabled ,
startToEdit ,
handleSave ,
handleCancel ,
2025-02-28 14:32:53 +08:00
originInfo ,
technicalParameters ,
} = useMetadataDocument ( { datasetId , documentId , docDetail } )
2025-02-27 18:01:53 +08:00
2025-02-20 18:23:41 +08:00
return (
2025-02-27 18:01:53 +08:00
< div className = { cn ( 'w-[388px] space-y-4' , className ) } >
{ ( hasData || isEdit ) ? (
2025-02-20 18:23:41 +08:00
< div className = 'pl-2' >
< InfoGroup
title = { t ( 'dataset.metadata.metadata' ) }
uppercaseTitle = { false }
titleTooltip = { t ( ` ${ i18nPrefix } .metadataToolTip ` ) }
list = { isEdit ? tempList : list }
2025-02-28 15:32:26 +08:00
dataSetId = { datasetId }
2025-02-20 18:23:41 +08:00
headerRight = { isEdit ? (
< div className = 'flex space-x-1' >
2025-02-28 11:50:46 +08:00
< Button variant = 'ghost' size = 'small' onClick = { handleCancel } >
2025-02-20 18:23:41 +08:00
< div > { t ( 'common.operation.cancel' ) } < / div >
< / Button >
2025-02-28 11:50:46 +08:00
< Button variant = 'primary' size = 'small' onClick = { handleSave } >
2025-02-20 18:23:41 +08:00
< div > { t ( 'common.operation.save' ) } < / div >
< / Button >
< / div >
) : (
2025-02-28 11:50:46 +08:00
< Button variant = 'ghost' size = 'small' onClick = { startToEdit } >
2025-02-20 18:23:41 +08:00
< RiEditLine className = 'mr-1 size-3.5 text-text-tertiary cursor-pointer' / >
< div > { t ( 'common.operation.edit' ) } < / div >
< / Button >
) }
isEdit = { isEdit }
contentClassName = 'mt-5'
onChange = { ( item ) = > {
const newList = tempList . map ( i = > ( i . name === item . name ? item : i ) )
2025-02-27 18:01:53 +08:00
setTempList ( newList )
2025-02-20 18:23:41 +08:00
} }
onDelete = { ( item ) = > {
const newList = tempList . filter ( i = > i . name !== item . name )
2025-02-27 18:01:53 +08:00
setTempList ( newList )
2025-02-20 18:23:41 +08:00
} }
2025-02-27 18:01:53 +08:00
onAdd = { ( payload ) = > {
const newList = [ . . . tempList , payload ]
setTempList ( newList )
2025-02-20 18:23:41 +08:00
} }
/ >
{ builtInEnabled && (
< >
< Divider className = 'my-3' bgStyle = 'gradient' / >
< InfoGroup
noHeader
titleTooltip = 'Built-in metadata is system-generated metadata that is automatically added to the document. You can enable or disable built-in metadata here.'
list = { builtList }
2025-02-28 15:32:26 +08:00
dataSetId = { datasetId }
2025-02-20 18:23:41 +08:00
/ >
< / >
) }
< / div >
) : (
2025-02-27 18:01:53 +08:00
< NoData onStart = { ( ) = > setIsEdit ( true ) } / >
2025-02-20 18:23:41 +08:00
) }
2025-02-28 14:10:05 +08:00
{ /* Old Metadata */ }
2025-02-20 18:23:41 +08:00
< InfoGroup
className = 'pl-2'
title = { t ( ` ${ i18nPrefix } .documentInformation ` ) }
2025-02-28 14:32:53 +08:00
list = { originInfo }
2025-02-28 15:32:26 +08:00
dataSetId = { datasetId }
2025-02-20 18:23:41 +08:00
/ >
< InfoGroup
className = 'pl-2'
title = { t ( ` ${ i18nPrefix } .technicalParameters ` ) }
2025-02-28 14:32:53 +08:00
list = { technicalParameters }
2025-02-28 15:32:26 +08:00
dataSetId = { datasetId }
2025-02-20 18:23:41 +08:00
/ >
< / div >
)
}
export default React . memo ( MetadataDocument )