From 67035d1a8e4cbdd9dbd96b0938e7ede7964b0051 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Thu, 16 Apr 2026 22:58:39 -0400 Subject: [PATCH] fix(useDataLoader): cancel in-flight section fetches when company changes (P2-45) Add currentCompanyId to effect deps so switching company aborts the previous company's pending inbox/metrics/standup fetches before stale results can overwrite new state. --- src/renderer/hooks/useDataLoader.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/renderer/hooks/useDataLoader.ts b/src/renderer/hooks/useDataLoader.ts index a9fac459..b847c2ed 100644 --- a/src/renderer/hooks/useDataLoader.ts +++ b/src/renderer/hooks/useDataLoader.ts @@ -36,10 +36,12 @@ export function useDataLoader( } }, [selectedConnectorId, selectedRunId]); - // Section-based data loading + // Section-based data loading; resets when section OR company changes so + // in-flight requests for the previous company cannot overwrite new state. + const currentCompanyId = snapshot?.currentCompanyId ?? null; useEffect(() => { - if (!snapshot?.currentCompanyId) return; - const companyId = snapshot.currentCompanyId; + if (!currentCompanyId) return; + const companyId = currentCompanyId; let cancelled = false; const store = useAppStore.getState(); @@ -62,13 +64,13 @@ export function useDataLoader( } if (section === "social") { - store.setSocialAccounts(snapshot.socialAccounts?.filter((a) => a.companyId === companyId) ?? []); + store.setSocialAccounts(snapshot?.socialAccounts?.filter((a) => a.companyId === companyId) ?? []); } return () => { cancelled = true; }; - }, [section, snapshot]); + }, [section, currentCompanyId, snapshot]); return { refresh }; }