feat: metadata edit in document

This commit is contained in:
Joel 2025-02-27 18:01:53 +08:00
parent 7e594b4a56
commit 11abe0ec31
6 changed files with 52 additions and 15 deletions

View File

@ -9,7 +9,7 @@ import { OperationAction, StatusItem } from '../list'
import DocumentPicker from '../../common/document-picker'
import Completed from './completed'
import Embedding from './embedding'
import Metadata from './metadata'
import Metadata from '@/app/components/datasets/metadata/metadata-document'
import SegmentAdd, { ProcessStatus } from './segment-add'
import BatchModal from './batch-modal'
import style from './style.module.css'
@ -276,9 +276,10 @@ const DocumentDetail: FC<Props> = ({ datasetId, documentId }) => {
}
<FloatRightContainer showClose isOpen={showMetadata} onClose={() => setShowMetadata(false)} isMobile={isMobile} panelClassname='!justify-start' footer={null}>
<Metadata
docDetail={{ ...documentDetail, ...documentMetadata, doc_type: documentMetadata?.doc_type === 'others' ? '' : documentMetadata?.doc_type } as any}
loading={isMetadataLoading}
onUpdate={metadataMutate}
className='mr-2 mt-3'
// docDetail={{ ...documentDetail, ...documentMetadata, doc_type: documentMetadata?.doc_type === 'others' ? '' : documentMetadata?.doc_type } as any}
// loading={isMetadataLoading}
// onUpdate={metadataMutate}
/>
</FloatRightContainer>
</div>

View File

@ -0,0 +1,18 @@
import { useState } from 'react'
import type { MetadataItemWithValue } from '../types'
import { DataType } from '../types'
const testDocMetadataList: MetadataItemWithValue[] = [
{ id: 'str-same-value', name: 'name', type: DataType.string, value: 'Joel' },
{ id: 'num', name: 'age', type: DataType.number, value: 10 },
{ id: 'date', name: 'date', type: DataType.time, value: null },
{ id: 'str-with-different-value', name: 'hobby', type: DataType.string, value: 'bbb' },
]
const useMetadataDocument = () => {
const [list, setList] = useState<MetadataItemWithValue[]>(testDocMetadataList)
const [tempList, setTempList] = useState<MetadataItemWithValue[]>(list)
const builtInEnabled = true
}
export default useMetadataDocument

View File

@ -12,7 +12,7 @@ import { DataType } from '../types'
type Props = {
popupPlacement?: Placement
popupOffset?: { mainAxis: number, crossAxis: number }
onSave: (data: any) => void
onSave: (data: MetadataItem) => void
trigger: React.ReactNode
} & CreateContentProps

View File

@ -8,12 +8,18 @@ import Button from '@/app/components/base/button'
import { RiEditLine } from '@remixicon/react'
import { useTranslation } from 'react-i18next'
import Divider from '@/app/components/base/divider'
import cn from '@/utils/classnames'
const i18nPrefix = 'dataset.metadata.documentMetadata'
const MetadataDocument: FC = () => {
type Props = {
className?: string
}
const MetadataDocument: FC<Props> = ({
className,
}) => {
const { t } = useTranslation()
const [isEdit, setIsEdit] = useState(true)
const [isEdit, setIsEdit] = useState(false)
const [list, setList] = useState<MetadataItemWithValue[]>([
{
@ -49,9 +55,10 @@ const MetadataDocument: FC = () => {
const documentInfoList = builtList
const technicalParams = builtList
return (
<div className='w-[388px] space-y-4'>
{!hasData ? (
<div className={cn('w-[388px] space-y-4', className)}>
{(hasData || isEdit) ? (
<div className='pl-2'>
<InfoGroup
title={t('dataset.metadata.metadata')}
@ -86,13 +93,15 @@ const MetadataDocument: FC = () => {
contentClassName='mt-5'
onChange={(item) => {
const newList = tempList.map(i => (i.name === item.name ? item : i))
setList(newList)
setTempList(newList)
}}
onDelete={(item) => {
const newList = tempList.filter(i => i.name !== item.name)
setList(newList)
setTempList(newList)
}}
onAdd={() => {
onAdd={(payload) => {
const newList = [...tempList, payload]
setTempList(newList)
}}
/>
{builtInEnabled && (
@ -107,7 +116,7 @@ const MetadataDocument: FC = () => {
)}
</div>
) : (
<NoData onStart={() => { }} />
<NoData onStart={() => setIsEdit(true)} />
)}
<InfoGroup

View File

@ -65,7 +65,7 @@ const InfoGroup: FC<Props> = ({
trigger={
<AddMetadataButton />
}
onSave={() => { }}
onSave={data => onAdd?.(data)}
/>
<Divider className='my-3 ' bgStyle='gradient' />
</div>
@ -81,7 +81,7 @@ const InfoGroup: FC<Props> = ({
onChange={value => onChange?.({ ...item, value })}
/>
<div className='shrink-0 p-1 rounded-md text-text-tertiary hover:text-text-destructive hover:bg-state-destructive-hover cursor-pointer'>
<RiDeleteBinLine className='size-4' />
<RiDeleteBinLine className='size-4' onClick={() => onDelete?.(item)} />
</div>
</div>
) : (<div className='py-1 system-xs-regular text-text-secondary'>{item.value}</div>)}

View File

@ -100,6 +100,15 @@ export const useBuiltInMetaData = () => {
})
}
export const useBatchUpdateDocMetadata = (datasetId: string) => {
return useMutation({
mutationFn: (enabled: boolean) => {
console.log(datasetId, enabled)
return Promise.resolve(true)
},
})
}
export const useUpdateBuiltInStatus = (datasetId: string) => {
return useMutation({
mutationFn: (enabled: boolean) => {