From 455d34074e2659ebad538761722b505221e104cb Mon Sep 17 00:00:00 2001 From: balibabu Date: Tue, 18 Aug 2026 19:27:22 +0800 Subject: [PATCH] Fix: Initiate a request to check for file changes two seconds after compilation completes. (#18440) --- .../dataset/compilation/dataset-structure-view.tsx | 5 +++++ .../dataset/compilation/hooks/use-run-end-effect.ts | 12 ++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/web/src/pages/dataset/compilation/dataset-structure-view.tsx b/web/src/pages/dataset/compilation/dataset-structure-view.tsx index 7c016accc1..f9a67d3985 100644 --- a/web/src/pages/dataset/compilation/dataset-structure-view.tsx +++ b/web/src/pages/dataset/compilation/dataset-structure-view.tsx @@ -14,6 +14,7 @@ import { useTraceRunData, } from '@/hooks/use-dataset-generate'; import { + ArtifactAlterationKeys, DatasetStructureKeys, useDeleteDatasetStructure, useFetchArtifactAlteration, @@ -71,7 +72,11 @@ export function DatasetStructureView({ kind }: DatasetStructureViewProps) { queryClient.invalidateQueries({ queryKey: DatasetStructureKeys.kind(knowledgeBaseId, kind), }); + queryClient.invalidateQueries({ + queryKey: ArtifactAlterationKeys.detail(knowledgeBaseId, kind), + }); }, [queryClient, knowledgeBaseId, kind]); + useRunEndEffect(structureStatus, handleRunEnd); const entityOptions = useMemo( diff --git a/web/src/pages/dataset/compilation/hooks/use-run-end-effect.ts b/web/src/pages/dataset/compilation/hooks/use-run-end-effect.ts index 4daefb94f0..3d80e0f5f8 100644 --- a/web/src/pages/dataset/compilation/hooks/use-run-end-effect.ts +++ b/web/src/pages/dataset/compilation/hooks/use-run-end-effect.ts @@ -1,15 +1,15 @@ import { GenerateStatus } from '@/constants/knowledge'; +import { useDebounceFn } from 'ahooks'; import { useEffect, useRef } from 'react'; // Fires once when a compilation run leaves the Running state, no matter how it // ended: finished at 100% (Running -> Completed), paused (the task is unbound, // so the trace resets and Running -> Start), or failed. Views refresh their // data through this single path so pausing behaves exactly like completion. -export function useRunEndEffect( - status: GenerateStatus, - onRunEnd: () => void, -) { +// Debounced to fire 1s after the run settles, so the refetch reads final state. +export function useRunEndEffect(status: GenerateStatus, onRunEnd: () => void) { const prevStatusRef = useRef(status); + const { run: scheduleRunEnd } = useDebounceFn(onRunEnd, { wait: 2000 }); useEffect(() => { const prevStatus = prevStatusRef.current; @@ -18,7 +18,7 @@ export function useRunEndEffect( prevStatus === GenerateStatus.Running && status !== GenerateStatus.Running ) { - onRunEnd(); + scheduleRunEnd(); } - }, [status, onRunEnd]); + }, [status, scheduleRunEnd]); }