diff --git a/src/components/AddWorker/ToolSelect.tsx b/src/components/AddWorker/ToolSelect.tsx index 3ed4883d..f4f410e6 100644 --- a/src/components/AddWorker/ToolSelect.tsx +++ b/src/components/AddWorker/ToolSelect.tsx @@ -292,7 +292,9 @@ const ToolSelect = forwardRef< (keyword?: string, opts?: { force?: boolean }) => { const u = email ?? null; const snap = toolSelectCatalogSnapshot; - if (!opts?.force && snap && snap.email === u && snap.configInfo) { + const hydratedFromCache = + !opts?.force && snap && snap.email === u && snap.configInfo; + if (hydratedFromCache) { setIntegrations( buildIntegrationsFromConfigInfo( snap.configInfo, @@ -301,7 +303,6 @@ const ToolSelect = forwardRef< addOption ) ); - return; } proxyFetchGet('/api/v1/config/info') @@ -326,7 +327,7 @@ const ToolSelect = forwardRef< }) .catch((error) => { console.error('Error fetching integrations:', error); - setIntegrations([]); + if (!hydratedFromCache) setIntegrations([]); }); }, [addOption, email, t] @@ -336,9 +337,10 @@ const ToolSelect = forwardRef< (opts?: { force?: boolean }) => { const u = email ?? null; const snap = toolSelectCatalogSnapshot; - if (!opts?.force && snap && snap.email === u && snap.hasUserMcps) { + const hydratedFromCache = + !opts?.force && snap && snap.email === u && snap.hasUserMcps; + if (hydratedFromCache) { setUserMcpList(snap.userMcps); - return; } proxyFetchGet('/api/v1/mcp/users') @@ -361,7 +363,7 @@ const ToolSelect = forwardRef< }) .catch((error) => { console.error('Error fetching installed MCPs:', error); - setUserMcpList([]); + if (!hydratedFromCache) setUserMcpList([]); }); }, [email] diff --git a/src/components/Dashboard/GroupedHistoryView/index.tsx b/src/components/Dashboard/GroupedHistoryView/index.tsx index 6d3f8c58..5027b2d0 100644 --- a/src/components/Dashboard/GroupedHistoryView/index.tsx +++ b/src/components/Dashboard/GroupedHistoryView/index.tsx @@ -126,33 +126,38 @@ export default function GroupedHistoryView({ } }, [projects, email, triggerKey]); - const loadProjects = useCallback(async () => { - setLoading(true); - const u = email ?? null; - try { - const snapshotSetter: Dispatch> = ( - action - ) => { - setProjects((prev) => { - const next = - typeof action === 'function' - ? (action as (p: ProjectGroupType[]) => ProjectGroupType[])(prev) - : action; - groupedHistorySnapshot = { - email: u, - projects: next, - triggerKey, - }; - return next; - }); - }; - await fetchGroupedHistoryTasks(snapshotSetter); - } catch (error) { - console.error('Failed to load grouped projects:', error); - } finally { - setLoading(false); - } - }, [email, triggerKey]); + const loadProjects = useCallback( + async (opts?: { silent?: boolean }) => { + if (!opts?.silent) setLoading(true); + const u = email ?? null; + try { + const snapshotSetter: Dispatch> = ( + action + ) => { + setProjects((prev) => { + const next = + typeof action === 'function' + ? (action as (p: ProjectGroupType[]) => ProjectGroupType[])( + prev + ) + : action; + groupedHistorySnapshot = { + email: u, + projects: next, + triggerKey, + }; + return next; + }); + }; + await fetchGroupedHistoryTasks(snapshotSetter); + } catch (error) { + console.error('Failed to load grouped projects:', error); + } finally { + if (!opts?.silent) setLoading(false); + } + }, + [email, triggerKey] + ); const onDelete = (historyId: string) => { try { @@ -315,6 +320,7 @@ export default function GroupedHistoryView({ if (snap && snap.email === u && snap.triggerKey === triggerKey) { setProjects(snap.projects); setLoading(false); + void loadProjects({ silent: true }); return; } void loadProjects();