wwf
2025-05-20 938c3e5a587ce950a94964ea509b9e7f8834dfae
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
'use client'
import type { FC } from 'react'
import React from 'react'
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'
import useMetadataDocument from '../hooks/use-metadata-document'
import type { FullDocumentDetail } from '@/models/datasets'
import cn from '@/utils/classnames'
 
const i18nPrefix = 'dataset.metadata.documentMetadata'
 
type Props = {
  datasetId: string
  documentId: string
  className?: string
  docDetail: FullDocumentDetail
}
const MetadataDocument: FC<Props> = ({
  datasetId,
  documentId,
  className,
  docDetail,
}) => {
  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 (
    <div className={cn('w-[388px] space-y-4', className)}>
      {(hasData || isEdit) ? (
        <div className='pl-2'>
          <InfoGroup
            title={t('dataset.metadata.metadata')}
            uppercaseTitle={false}
            titleTooltip={t(`${i18nPrefix}.metadataToolTip`)}
            list={isEdit ? tempList : list}
            dataSetId={datasetId}
            headerRight={embeddingAvailable && (isEdit ? (
              <div className='flex space-x-1'>
                <Button variant='ghost' size='small' onClick={handleCancel}>
                  <div>{t('common.operation.cancel')}</div>
                </Button>
                <Button variant='primary' size='small' onClick={handleSave}>
                  <div>{t('common.operation.save')}</div>
                </Button>
              </div>
            ) : (
              <Button variant='ghost' size='small' onClick={startToEdit}>
                <RiEditLine className='mr-1 size-3.5 cursor-pointer text-text-tertiary' />
                <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))
              setTempList(newList)
            }}
            onDelete={(item) => {
              const newList = tempList.filter(i => i.name !== item.name)
              setTempList(newList)
            }}
            onAdd={handleAddMetaData}
            onSelect={handleSelectMetaData}
          />
        </div>
      ) : (
        embeddingAvailable && <NoData onStart={() => setIsEdit(true)} />
      )}
      {builtInEnabled && (
        <div className='pl-2'>
          <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}
            dataSetId={datasetId}
          />
        </div>
      )}
 
      {/* Old Metadata */}
      <InfoGroup
        className='pl-2'
        title={t(`${i18nPrefix}.documentInformation`)}
        list={originInfo}
        dataSetId={datasetId}
      />
      <InfoGroup
        className='pl-2'
        title={t(`${i18nPrefix}.technicalParameters`)}
        list={technicalParameters}
        dataSetId={datasetId}
      />
    </div>
  )
}
 
export default React.memo(MetadataDocument)