From bf4cefe5aede545af241aadb159ef340fbb73be4 Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Mon, 31 Aug 2026 00:05:40 -0700 Subject: [PATCH] fix(status-bar): preserve Git refresh ordering after split --- .../use-workspace-space-manager-projection.ts | 19 ++++++++++++++++--- .../workspace-space-presentation.test.ts | 2 +- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/renderer/src/components/status-bar/use-workspace-space-manager-projection.ts b/src/renderer/src/components/status-bar/use-workspace-space-manager-projection.ts index 3226767a81d..4c3a9dfede2 100644 --- a/src/renderer/src/components/status-bar/use-workspace-space-manager-projection.ts +++ b/src/renderer/src/components/status-bar/use-workspace-space-manager-projection.ts @@ -2,13 +2,13 @@ import { useCallback, useEffect, useMemo } from 'react' import { filterWorkspaceSpaceRows, getLargestWorkspaceSpaceRowSize, - getWorkspaceSpaceGitStatusRefreshCandidates, isWorkspaceSpaceRowReadyToDelete, pruneWorkspaceSpaceSelectedIds, resolveWorkspaceSpaceInspectedWorktreeId, resolveWorkspaceSpaceTreemapZoomWorktreeId, sortWorkspaceSpaceRows } from './workspace-space-presentation' +import { getWorkspaceSpaceGitStatusRefreshCandidates } from './workspace-space-git-status-order' import { getSelectedDeletableWorkspaceRows, getVisibleDeletableWorkspaceIdentities, @@ -30,6 +30,8 @@ export function useWorkspaceSpaceManagerProjection(args: { refreshWorkspaceGitStatus: ReturnType }) { const { + activeWorktreeId, + activeWorkspaceExecutionHostId, analysis, inspectedWorktreeId, isScanning, @@ -117,7 +119,12 @@ export function useWorkspaceSpaceManagerProjection(args: { ]) useEffect(() => { - const candidates = getWorkspaceSpaceGitStatusRefreshCandidates(sourceRows) + const visibleWorktreeIdentities = new Set(rows.map(getWorkspaceSpaceWorktreeIdentity)) + const candidates = getWorkspaceSpaceGitStatusRefreshCandidates(sourceRows, { + activeWorktreeId, + activeExecutionHostId: activeWorkspaceExecutionHostId, + visibleWorktreeIdentities + }) if (candidates.length === 0) { return } @@ -140,7 +147,13 @@ export function useWorkspaceSpaceManagerProjection(args: { return () => { cancelled = true } - }, [refreshWorkspaceGitStatus, sourceRows]) + }, [ + activeWorktreeId, + activeWorkspaceExecutionHostId, + refreshWorkspaceGitStatus, + rows, + sourceRows + ]) const inspectedWorktree = rows.find((row) => getWorkspaceSpaceWorktreeIdentity(row) === nextInspectedWorktreeId) ?? diff --git a/src/renderer/src/components/status-bar/workspace-space-presentation.test.ts b/src/renderer/src/components/status-bar/workspace-space-presentation.test.ts index 50c8a5a6ff6..e0d3a868fa7 100644 --- a/src/renderer/src/components/status-bar/workspace-space-presentation.test.ts +++ b/src/renderer/src/components/status-bar/workspace-space-presentation.test.ts @@ -11,7 +11,6 @@ import { filterWorkspaceSpaceRows, getLargestWorkspaceSpaceItemSize, getLargestWorkspaceSpaceRowSize, - getWorkspaceSpaceGitStatusRefreshCandidates, isWorkspaceSpaceFilterQueryTooLarge, isWorkspaceSpaceRowReadyToDelete, pruneWorkspaceSpaceSelectedIds, @@ -19,6 +18,7 @@ import { resolveWorkspaceSpaceTreemapZoomWorktreeId, sortWorkspaceSpaceRows } from './workspace-space-presentation' +import { getWorkspaceSpaceGitStatusRefreshCandidates } from './workspace-space-git-status-order' import { getWorkspaceDecisionDetails } from './WorkspaceSpaceManagerPanel' import { getWorkspaceSpaceDeleteState,