mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 19:03:09 +00:00 
			
		
		
		
	
		
			
	
	
		
			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 |