mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-05-28 00:58:20 +08:00

Support filter knowledge by metadata. Co-authored-by: Joel <iamjoel007@gmail.com> Co-authored-by: NFish <douxc512@gmail.com>
97 lines
3.3 KiB
TypeScript
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
|