| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 | import type { BuiltInMetadataItem, MetadataBatchEditToServer, MetadataItemWithValueLength } from '@/app/components/datasets/metadata/types'import { del, get, patch, post } from '../base'import { useDocumentListKey, useInvalidDocumentList } from './use-document'import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'import { useInvalid } from '../use-base'import type { DocumentDetailResponse } from '@/models/datasets'const NAME_SPACE = 'dataset-metadata'export const useDatasetMetaData = (datasetId: string) => {  return useQuery<{ doc_metadata: MetadataItemWithValueLength[], built_in_field_enabled: boolean }>({    queryKey: [NAME_SPACE, 'dataset', datasetId],    queryFn: () => {      return get<{ doc_metadata: MetadataItemWithValueLength[], built_in_field_enabled: boolean }>(`/datasets/${datasetId}/metadata`)    },  })}export const useInvalidDatasetMetaData = (datasetId: string) => {  return useInvalid([NAME_SPACE, 'dataset', datasetId])}export const useCreateMetaData = (datasetId: string) => {  const invalidDatasetMetaData = useInvalidDatasetMetaData(datasetId)  return useMutation({    mutationFn: async (payload: BuiltInMetadataItem) => {      await post(`/datasets/${datasetId}/metadata`, {        body: payload,      })      await invalidDatasetMetaData()      return Promise.resolve(true)    },  })}export const useInvalidAllDocumentMetaData = (datasetId: string) => {  const queryClient = useQueryClient()  return () => {    queryClient.invalidateQueries({      queryKey: [NAME_SPACE, 'document', datasetId],      exact: false, // invalidate all document metadata: [NAME_SPACE, 'document', datasetId, documentId]    })  }}const useInvalidAllMetaData = (datasetId: string) => {  const invalidDatasetMetaData = useInvalidDatasetMetaData(datasetId)  const invalidDocumentList = useInvalidDocumentList(datasetId)  const invalidateAllDocumentMetaData = useInvalidAllDocumentMetaData(datasetId)  return async () => {    // meta data in dataset    await invalidDatasetMetaData()    // meta data in document list    invalidDocumentList()    // meta data in single document    await invalidateAllDocumentMetaData() // meta data in document  }}export const useRenameMeta = (datasetId: string) => {  const invalidateAllMetaData = useInvalidAllMetaData(datasetId)  return useMutation({    mutationFn: async (payload: MetadataItemWithValueLength) => {      await patch(`/datasets/${datasetId}/metadata/${payload.id}`, {        body: {          name: payload.name,        },      })      await invalidateAllMetaData()    },  })}export const useDeleteMetaData = (datasetId: string) => {  const invalidateAllMetaData = useInvalidAllMetaData(datasetId)  return useMutation({    mutationFn: async (metaDataId: string) => {      // datasetMetaData = datasetMetaData.filter(item => item.id !== metaDataId)      await del(`/datasets/${datasetId}/metadata/${metaDataId}`)      await invalidateAllMetaData()    },  })}export const useBuiltInMetaDataFields = () => {  return useQuery<{ fields: BuiltInMetadataItem[] }>({    queryKey: [NAME_SPACE, 'built-in'],    queryFn: () => {      return get('/datasets/metadata/built-in')    },  })}export const useDocumentMetaData = ({ datasetId, documentId }: { datasetId: string, documentId: string }) => {  return useQuery<DocumentDetailResponse>({    queryKey: [NAME_SPACE, 'document', datasetId, documentId],    queryFn: () => {      return get<DocumentDetailResponse>(`/datasets/${datasetId}/documents/${documentId}`, { params: { metadata: 'only' } })    },  })}export const useBatchUpdateDocMetadata = () => {  const queryClient = useQueryClient()  return useMutation({    mutationFn: async (payload: {      dataset_id: string      metadata_list: MetadataBatchEditToServer    }) => {      const documentIds = payload.metadata_list.map(item => item.document_id)      await post(`/datasets/${payload.dataset_id}/documents/metadata`, {        body: {          operation_data: payload.metadata_list,        },      })      // meta data in dataset      await queryClient.invalidateQueries({        queryKey: [NAME_SPACE, 'dataset', payload.dataset_id],      })      // meta data in document list      await queryClient.invalidateQueries({        queryKey: [NAME_SPACE, 'dataset', payload.dataset_id],      })      await queryClient.invalidateQueries({        queryKey: [...useDocumentListKey, payload.dataset_id],      })      // meta data in single document      await Promise.all(documentIds.map(documentId => queryClient.invalidateQueries(        {          queryKey: [NAME_SPACE, 'document', payload.dataset_id, documentId],        },      )))    },  })}export const useUpdateBuiltInStatus = (datasetId: string) => {  const invalidDatasetMetaData = useInvalidDatasetMetaData(datasetId)  return useMutation({    mutationFn: async (enabled: boolean) => {      await post(`/datasets/${datasetId}/metadata/built-in/${enabled ? 'enable' : 'disable'}`)      invalidDatasetMetaData()    },  })}
 |