From 370341e85e3eebab1f89ce8c85d6c8eacbbcdca0 Mon Sep 17 00:00:00 2001 From: Jinjing <6427696+AmethystLiang@users.noreply.github.com> Date: Sat, 5 Sep 2026 21:34:12 -0700 Subject: [PATCH] refactor: pass app state to palette filter builder Let the builder function extract the sidebar scope it needs instead of requiring callers to destructure and pass individual properties. This reduces coupling and simplifies the data flow through the palette initialization lifecycle. --- .../src/components/cmd-j/palette-filter.ts | 11 +++-------- ...rktree-jump-palette-selection-lifecycle.ts | 19 ++++--------------- .../use-worktree-jump-palette-store-state.ts | 6 ------ 3 files changed, 7 insertions(+), 29 deletions(-) diff --git a/src/renderer/src/components/cmd-j/palette-filter.ts b/src/renderer/src/components/cmd-j/palette-filter.ts index 18e583d3d17..51e1952c5e6 100644 --- a/src/renderer/src/components/cmd-j/palette-filter.ts +++ b/src/renderer/src/components/cmd-j/palette-filter.ts @@ -1,6 +1,6 @@ import type { ExecutionHostId } from '../../../../shared/execution-host' -import { getVisibleWorkspaceHostIdSet } from '../sidebar/visible-worktree-host-scope' import type { Worktree } from '../../../../shared/worktree/types' +import { getVisibleWorkspaceHostIdSet } from '../sidebar/visible-worktree-host-scope' import { resolveRepoFilterHostId, resolveWorktreeFilterHostId, @@ -120,16 +120,11 @@ export function reconcilePaletteFilter( return { hostIds, projectKeys } } -export type SidebarScopeForPaletteFilter = Parameters[0] & { +type SidebarScopeForPaletteFilter = Parameters[0] & { filterRepoIds: readonly string[] } -/** - * Seeds the palette's host/project selection from the sidebar's "Show" scope so - * Cmd+J opens on the same slice the user is looking at. One-way: the user can - * clear or change it per open, and the sidebar never reads it back. A field - * that would select every option is left empty — that is not a filter, just chips. - */ +/** Omits fields that select every available option because they do not narrow results. */ export function buildPaletteFilterFromSidebarScope( scope: SidebarScopeForPaletteFilter, model: PaletteFilterModel diff --git a/src/renderer/src/components/use-worktree-jump-palette-selection-lifecycle.ts b/src/renderer/src/components/use-worktree-jump-palette-selection-lifecycle.ts index f13a4ce423e..6cb1a33463c 100644 --- a/src/renderer/src/components/use-worktree-jump-palette-selection-lifecycle.ts +++ b/src/renderer/src/components/use-worktree-jump-palette-selection-lifecycle.ts @@ -24,7 +24,7 @@ import type { WorktreeJumpPaletteWorktrees } from './use-worktree-jump-palette-w type WorktreeJumpPaletteSelectionLifecycleInput = WorktreeJumpPaletteStoreState & WorktreeJumpPaletteLocalState & - WorktreeJumpPaletteFilter & + Pick & WorktreeJumpPaletteOpenTabs & WorktreeJumpPaletteProjectTargets & WorktreeJumpPaletteQuickActions & @@ -60,9 +60,6 @@ export function useWorktreeJumpPaletteSelectionLifecycle({ setSelectedItemId, setRawFilter, filterModel, - workspaceHostScope, - visibleWorkspaceHostIds, - filterRepoIds, selectionMovedByUserRef, taskSourceUrl, listRef, @@ -87,10 +84,8 @@ export function useWorktreeJumpPaletteSelectionLifecycle({ if (visible && !wasVisibleRef.current) { recordFeatureInteraction('cmd-j') createLookupGuard.invalidate() - activeGroupSnapshotRef.current = captureCmdJActiveGroupSnapshot( - useAppStore.getState(), - activeWorktreeId - ) + const appState = useAppStore.getState() + activeGroupSnapshotRef.current = captureCmdJActiveGroupSnapshot(appState, activeWorktreeId) previousWorktreeIdRef.current = activeWorktreeId previousActiveTabTypeRef.current = activeTabType previousBrowserPageIdRef.current = @@ -114,13 +109,7 @@ export function useWorktreeJumpPaletteSelectionLifecycle({ setQuery('') setSelectedItemId('') selectionMovedByUserRef.current = false - // Each open starts from the sidebar's current Show scope, not the last palette selection. - setRawFilter( - buildPaletteFilterFromSidebarScope( - { workspaceHostScope, visibleWorkspaceHostIds, filterRepoIds }, - filterModel - ) - ) + setRawFilter(buildPaletteFilterFromSidebarScope(appState, filterModel)) listRef.current?.scrollTo(0, 0) } if (!visible && wasVisibleRef.current) { diff --git a/src/renderer/src/components/use-worktree-jump-palette-store-state.ts b/src/renderer/src/components/use-worktree-jump-palette-store-state.ts index c0d6280bdf5..c10778abaa4 100644 --- a/src/renderer/src/components/use-worktree-jump-palette-store-state.ts +++ b/src/renderer/src/components/use-worktree-jump-palette-store-state.ts @@ -97,9 +97,6 @@ export function useWorktreeJumpPaletteStoreState({ (state) => state.hideWorkspacesFromOtherDevices ) const showSleepingWorkspaces = useAppStore((state) => state.showSleepingWorkspaces) - const workspaceHostScope = useAppStore((state) => state.workspaceHostScope) - const visibleWorkspaceHostIds = useAppStore((state) => state.visibleWorkspaceHostIds) - const filterRepoIds = useAppStore((state) => state.filterRepoIds) const alwaysShowDefaultBranchWorkspace = useAppStore( (state) => state.alwaysShowDefaultBranchWorkspace ) @@ -177,9 +174,6 @@ export function useWorktreeJumpPaletteStoreState({ hideDetachedHeadWorkspaces, hideWorkspacesFromOtherDevices, showSleepingWorkspaces, - workspaceHostScope, - visibleWorkspaceHostIds, - filterRepoIds, alwaysShowDefaultBranchWorkspace, lastVisitedAtByWorktreeId, workspacePortScan,