fix: meta value sync to three pages

This commit is contained in:
Joel 2025-03-06 18:02:32 +08:00
parent 14df59a9c9
commit f2210f46bc
2 changed files with 37 additions and 11 deletions

View File

@ -12,7 +12,7 @@ const useEditDatasetMetadata = ({
// dataset, // dataset,
}: { }: {
datasetId: string, datasetId: string,
dataset?: DataSet dataset?: DataSet,
}) => { }) => {
const { t } = useTranslation() const { t } = useTranslation()
const [isShowEditModal, { const [isShowEditModal, {
@ -57,7 +57,7 @@ const useEditDatasetMetadata = ({
await doRenameMetaData(payload) await doRenameMetaData(payload)
}, [checkName, doRenameMetaData]) }, [checkName, doRenameMetaData])
const { mutate: doDeleteMetaData } = useDeleteMetaData(datasetId) const { mutateAsync: doDeleteMetaData } = useDeleteMetaData(datasetId)
const handleDeleteMetaData = useCallback((metaDataId: string) => { const handleDeleteMetaData = useCallback((metaDataId: string) => {
doDeleteMetaData(metaDataId) doDeleteMetaData(metaDataId)
}, [doDeleteMetaData]) }, [doDeleteMetaData])

View File

@ -1,6 +1,6 @@
import type { BuiltInMetadataItem, MetadataBatchEditToServer, MetadataItemWithValueLength } from '@/app/components/datasets/metadata/types' import type { BuiltInMetadataItem, MetadataBatchEditToServer, MetadataItemWithValueLength } from '@/app/components/datasets/metadata/types'
import { del, get, patch, post } from '../base' import { del, get, patch, post } from '../base'
import { mutate } from 'swr'
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import { useInvalid } from '../use-base' import { useInvalid } from '../use-base'
import type { DocumentDetailResponse } from '@/models/datasets' import type { DocumentDetailResponse } from '@/models/datasets'
@ -32,9 +32,33 @@ export const useCreateMetaData = (datasetId: string) => {
}, },
}) })
} }
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 invalidateAllDocumentMetaData = useInvalidAllDocumentMetaData(datasetId)
return async () => {
// meta data in dataset
await invalidDatasetMetaData()
// meta data in document list
mutate(
(key: any) => typeof key === 'object' && key.action === 'fetchDocuments' && key.datasetId === datasetId,
)
// meta data in single document
await invalidateAllDocumentMetaData() // meta data in document
}
}
export const useRenameMeta = (datasetId: string) => { export const useRenameMeta = (datasetId: string) => {
const invalidDatasetMetaData = useInvalidDatasetMetaData(datasetId) const invalidateAllMetaData = useInvalidAllMetaData(datasetId)
return useMutation({ return useMutation({
mutationFn: async (payload: MetadataItemWithValueLength) => { mutationFn: async (payload: MetadataItemWithValueLength) => {
await patch(`/datasets/${datasetId}/metadata/${payload.id}`, { await patch(`/datasets/${datasetId}/metadata/${payload.id}`, {
@ -42,20 +66,18 @@ export const useRenameMeta = (datasetId: string) => {
name: payload.name, name: payload.name,
}, },
}) })
await invalidDatasetMetaData() await invalidateAllMetaData()
return Promise.resolve(true)
}, },
}) })
} }
export const useDeleteMetaData = (datasetId: string) => { export const useDeleteMetaData = (datasetId: string) => {
const invalidDatasetMetaData = useInvalidDatasetMetaData(datasetId) const invalidateAllMetaData = useInvalidAllMetaData(datasetId)
return useMutation({ return useMutation({
mutationFn: async (metaDataId: string) => { mutationFn: async (metaDataId: string) => {
// datasetMetaData = datasetMetaData.filter(item => item.id !== metaDataId) // datasetMetaData = datasetMetaData.filter(item => item.id !== metaDataId)
await del(`/datasets/${datasetId}/metadata/${metaDataId}`) await del(`/datasets/${datasetId}/metadata/${metaDataId}`)
await invalidDatasetMetaData() await invalidateAllMetaData()
return Promise.resolve(true)
}, },
}) })
} }
@ -80,7 +102,6 @@ export const useDocumentMetaData = ({ datasetId, documentId }: { datasetId: stri
export const useBatchUpdateDocMetadata = () => { export const useBatchUpdateDocMetadata = () => {
const queryClient = useQueryClient() const queryClient = useQueryClient()
return useMutation({ return useMutation({
mutationFn: async (payload: { mutationFn: async (payload: {
dataset_id: string dataset_id: string
@ -92,10 +113,15 @@ export const useBatchUpdateDocMetadata = () => {
operation_data: payload.metadata_list, operation_data: payload.metadata_list,
}, },
}) })
// meta data in dataset
await queryClient.invalidateQueries({ await queryClient.invalidateQueries({
queryKey: [NAME_SPACE, 'dataset', payload.dataset_id], queryKey: [NAME_SPACE, 'dataset', payload.dataset_id],
}) })
// invalidate document metadata // meta data in document list
mutate(
(key: any) => typeof key === 'object' && key.action === 'fetchDocuments' && key.datasetId === payload.dataset_id,
)
// meta data in single document
await Promise.all(documentIds.map(documentId => queryClient.invalidateQueries( await Promise.all(documentIds.map(documentId => queryClient.invalidateQueries(
{ {
queryKey: [NAME_SPACE, 'document', payload.dataset_id, documentId], queryKey: [NAME_SPACE, 'document', payload.dataset_id, documentId],