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()
- },
- })
- }
|