mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +00:00 
			
		
		
		
	 20376ca951
			
		
	
	
		20376ca951
		
			
		
	
	
	
	
		
			
			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
 |