| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | import { useBoolean } from 'ahooks'import { useBuiltInMetaDataFields, useCreateMetaData, useDatasetMetaData, useDeleteMetaData, useRenameMeta, useUpdateBuiltInStatus } from '@/service/knowledge/use-metadata'import type { DataSet } from '@/models/datasets'import { useCallback, useEffect, useState } from 'react'import { type BuiltInMetadataItem, type MetadataItemWithValueLength, isShowManageMetadataLocalStorageKey } from '../types'import useCheckMetadataName from './use-check-metadata-name'import Toast from '@/app/components/base/toast'import { useTranslation } from 'react-i18next'const useEditDatasetMetadata = ({  datasetId,  // dataset,  onUpdateDocList,}: {  datasetId: string,  dataset?: DataSet,  onUpdateDocList: () => void}) => {  const { t } = useTranslation()  const [isShowEditModal, {    setTrue: showEditModal,    setFalse: hideEditModal,  }] = useBoolean(false)  useEffect(() => {    const isShowManageMetadata = localStorage.getItem(isShowManageMetadataLocalStorageKey)    if (isShowManageMetadata) {      showEditModal()      localStorage.removeItem(isShowManageMetadataLocalStorageKey)    }    // eslint-disable-next-line react-hooks/exhaustive-deps  }, [])  const { data: datasetMetaData } = useDatasetMetaData(datasetId)  const { mutate: doAddMetaData } = useCreateMetaData(datasetId)  const { checkName } = useCheckMetadataName()  const handleAddMetaData = useCallback(async (payload: BuiltInMetadataItem) => {    const errorMsg = checkName(payload.name).errorMsg    if (errorMsg) {      Toast.notify({        message: errorMsg,        type: 'error',      })      return Promise.reject(new Error(errorMsg))    }    await doAddMetaData(payload)  }, [checkName, doAddMetaData])  const { mutate: doRenameMetaData } = useRenameMeta(datasetId)  const handleRename = useCallback(async (payload: MetadataItemWithValueLength) => {    const errorMsg = checkName(payload.name).errorMsg    if (errorMsg) {      Toast.notify({        message: errorMsg,        type: 'error',      })      return Promise.reject(new Error(errorMsg))    }    await doRenameMetaData(payload)    onUpdateDocList()  }, [checkName, doRenameMetaData, onUpdateDocList])  const { mutateAsync: doDeleteMetaData } = useDeleteMetaData(datasetId)  const handleDeleteMetaData = useCallback(async (metaDataId: string) => {    await doDeleteMetaData(metaDataId)    onUpdateDocList()  }, [doDeleteMetaData, onUpdateDocList])  const [builtInEnabled, setBuiltInEnabled] = useState(datasetMetaData?.built_in_field_enabled)  useEffect(() => { // wait for api response to set the right value    setBuiltInEnabled(datasetMetaData?.built_in_field_enabled)  }, [datasetMetaData])  const { mutateAsync: toggleBuiltInStatus } = useUpdateBuiltInStatus(datasetId)  const { data: builtInMetaData } = useBuiltInMetaDataFields()  return {    isShowEditModal,    showEditModal,    hideEditModal,    datasetMetaData: datasetMetaData?.doc_metadata,    handleAddMetaData,    handleRename,    handleDeleteMetaData,    builtInMetaData: builtInMetaData?.fields,    builtInEnabled,    setBuiltInEnabled: async (enable: boolean) => {      await toggleBuiltInStatus(enable)      setBuiltInEnabled(enable)      Toast.notify({        message: t('common.actionMsg.modifiedSuccessfully'),        type: 'success',      })    },  }}export default useEditDatasetMetadata
 |