fix(dataset): echo back selected datasets not in the first page (#17616)

This commit is contained in:
chanx
2026-07-31 14:41:54 +08:00
committed by GitHub
parent 51fe08712e
commit efeb4ab870
3 changed files with 56 additions and 3 deletions

View File

@@ -1,5 +1,8 @@
import { DocumentParserType } from '@/constants/knowledge';
import { useFetchKnowledgeList } from '@/hooks/use-knowledge-request';
import {
useFetchDatasetsByIds,
useFetchKnowledgeList,
} from '@/hooks/use-knowledge-request';
import { IDataset } from '@/interfaces/database/dataset';
import { useBuildQueryVariableOptions } from '@/pages/agent/hooks/use-get-begin-query';
import { useDebounce } from 'ahooks';
@@ -36,12 +39,31 @@ export function useDisableDifferenceEmbeddingDataset(name: string) {
} = useFetchKnowledgeList(false, debouncedSearchString);
const datasetCacheRef = useRef(new Map<string, IDataset>());
const selectedDatasetIds = useMemo(
() => (Array.isArray(datasetId) ? datasetId : []),
[datasetId],
);
// Selected dataset IDs that are neither in the currently loaded page nor
// already cached. These need to be fetched by ID so their names can be
// echoed back in the form field (the paginated list may not contain them).
const missingIds = useMemo(() => {
const loadedIds = new Set(datasetListOrigin.map((d) => d.id));
return selectedDatasetIds.filter(
(id) => !loadedIds.has(id) && !datasetCacheRef.current.has(id),
);
}, [datasetListOrigin, selectedDatasetIds]);
const { data: missingDatasets } = useFetchDatasetsByIds(missingIds);
const datasetList = useMemo(() => {
datasetListOrigin.forEach((dataset) => {
datasetCacheRef.current.set(dataset.id, dataset);
});
missingDatasets?.forEach((dataset) => {
datasetCacheRef.current.set(dataset.id, dataset);
});
const selectedDatasetIds = Array.isArray(datasetId) ? datasetId : [];
const selectedDatasets = selectedDatasetIds
.map((id) => datasetCacheRef.current.get(id))
.filter(Boolean) as IDataset[];
@@ -54,7 +76,7 @@ export function useDisableDifferenceEmbeddingDataset(name: string) {
]),
).values(),
);
}, [datasetId, datasetListOrigin]);
}, [datasetListOrigin, selectedDatasetIds, missingDatasets]);
const selectedEmbedId = useMemo(() => {
const data = datasetList?.find((item) => item.id === datasetId?.[0]);