diff --git a/src/features/git/hooks/useGitDiffs.ts b/src/features/git/hooks/useGitDiffs.ts index 517de8858..f5059b863 100644 --- a/src/features/git/hooks/useGitDiffs.ts +++ b/src/features/git/hooks/useGitDiffs.ts @@ -22,6 +22,7 @@ export function useGitDiffs( const [state, setState] = useState(emptyState); const requestIdRef = useRef(0); const workspaceIdRef = useRef(activeWorkspace?.id ?? null); + const cachedDiffsRef = useRef>(new Map()); const fileKey = useMemo( () => @@ -53,6 +54,7 @@ export function useGitDiffs( return; } setState({ diffs, isLoading: false, error: null }); + cachedDiffsRef.current.set(workspaceId, diffs); } catch (error) { console.error("Failed to load git diffs", error); if ( @@ -74,7 +76,16 @@ export function useGitDiffs( if (workspaceIdRef.current !== workspaceId) { workspaceIdRef.current = workspaceId; requestIdRef.current += 1; - setState(emptyState); + if (!workspaceId) { + setState(emptyState); + return; + } + const cached = cachedDiffsRef.current.get(workspaceId); + setState({ + diffs: cached ?? [], + isLoading: false, + error: null, + }); } }, [activeWorkspace?.id]); diff --git a/src/features/git/hooks/useGitStatus.ts b/src/features/git/hooks/useGitStatus.ts index 63cb6c964..2f3a1029c 100644 --- a/src/features/git/hooks/useGitStatus.ts +++ b/src/features/git/hooks/useGitStatus.ts @@ -24,6 +24,7 @@ export function useGitStatus(activeWorkspace: WorkspaceInfo | null) { const [status, setStatus] = useState(emptyStatus); const requestIdRef = useRef(0); const workspaceIdRef = useRef(activeWorkspace?.id ?? null); + const cachedStatusRef = useRef>(new Map()); const workspaceId = activeWorkspace?.id ?? null; const refresh = useCallback(() => { @@ -41,7 +42,9 @@ export function useGitStatus(activeWorkspace: WorkspaceInfo | null) { ) { return; } - setStatus({ ...data, error: null }); + const nextStatus = { ...data, error: null }; + setStatus(nextStatus); + cachedStatusRef.current.set(workspaceId, nextStatus); }) .catch((err) => { console.error("Failed to load git status", err); @@ -51,11 +54,13 @@ export function useGitStatus(activeWorkspace: WorkspaceInfo | null) { ) { return; } - setStatus({ + const nextStatus = { ...emptyStatus, branchName: "unknown", error: err instanceof Error ? err.message : String(err), - }); + }; + setStatus(nextStatus); + cachedStatusRef.current.set(workspaceId, nextStatus); }); }, [workspaceId]); @@ -63,7 +68,12 @@ export function useGitStatus(activeWorkspace: WorkspaceInfo | null) { if (workspaceIdRef.current !== workspaceId) { workspaceIdRef.current = workspaceId; requestIdRef.current += 1; - setStatus(emptyStatus); + if (!workspaceId) { + setStatus(emptyStatus); + return; + } + const cached = cachedStatusRef.current.get(workspaceId); + setStatus(cached ?? emptyStatus); } }, [workspaceId]);