dify/web/app/components/datasets/metadata/hooks/use-edit-dataset-metadata.ts
zxhlyh 20376ca951
feat: upgrade knowledge metadata (#16063)
Support filter knowledge by metadata.

Co-authored-by: Joel <iamjoel007@gmail.com>
Co-authored-by: NFish <douxc512@gmail.com>
2025-03-18 11:01:06 +08:00

97 lines
3.3 KiB
TypeScript

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