native macOS codings agent orchestrator
6
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #94 from supabitapp/fix/cmd-n-focus-new-worktree

Fix Cmd+N to focus only the newly created worktree

authored by

khoi and committed by
GitHub
2edbb3c8 e3f0c7f9

+22 -13
+19 -13
supacode/Features/Repositories/Reducer/RepositoriesFeature.swift
··· 540 540 return .none 541 541 542 542 case .selectWorktree(let worktreeID, let focusTerminal): 543 - state.selection = worktreeID.map(SidebarSelection.worktree) 544 - if let worktreeID { 545 - state.sidebarSelectedWorktreeIDs = [worktreeID] 546 - } else { 547 - state.sidebarSelectedWorktreeIDs = [] 548 - } 543 + setSingleWorktreeSelection(worktreeID, state: &state) 549 544 if focusTerminal, let worktreeID { 550 545 state.pendingTerminalFocusWorktreeIDs.insert(worktreeID) 551 546 } ··· 815 810 progress: WorktreeCreationProgress(stage: .loadingLocalBranches) 816 811 ) 817 812 ) 818 - state.selection = .worktree(pendingID) 813 + setSingleWorktreeSelection(pendingID, state: &state) 819 814 let existingNames = Set(repository.worktrees.map { $0.name.lowercased() }) 820 815 let createWorktreeStream = gitClient.createWorktreeStream 821 816 let isValidBranchName = gitClient.isValidBranchName ··· 1060 1055 state.pendingTerminalFocusWorktreeIDs.insert(worktree.id) 1061 1056 removePendingWorktree(pendingID, state: &state) 1062 1057 if state.selection == .worktree(pendingID) { 1063 - state.selection = .worktree(worktree.id) 1058 + setSingleWorktreeSelection(worktree.id, state: &state) 1064 1059 } 1065 1060 insertWorktree(worktree, repositoryID: repositoryID, state: &state) 1066 1061 return .merge( ··· 3240 3235 state: inout RepositoriesFeature.State 3241 3236 ) { 3242 3237 guard state.selection == .worktree(pendingID) else { return } 3243 - if isSelectionValid(id, state: state) { 3244 - state.selection = id.map(SidebarSelection.worktree) 3245 - } else { 3246 - state.selection = nil 3247 - } 3238 + setSingleWorktreeSelection( 3239 + isSelectionValid(id, state: state) ? id : nil, 3240 + state: &state 3241 + ) 3248 3242 } 3249 3243 3250 3244 private func isSelectionValid( ··· 3252 3246 state: RepositoriesFeature.State 3253 3247 ) -> Bool { 3254 3248 state.selectedRow(for: id) != nil 3249 + } 3250 + 3251 + private func setSingleWorktreeSelection( 3252 + _ worktreeID: Worktree.ID?, 3253 + state: inout RepositoriesFeature.State 3254 + ) { 3255 + state.selection = worktreeID.map(SidebarSelection.worktree) 3256 + if let worktreeID { 3257 + state.sidebarSelectedWorktreeIDs = [worktreeID] 3258 + } else { 3259 + state.sidebarSelectedWorktreeIDs = [] 3260 + } 3255 3261 } 3256 3262 3257 3263 private func repositoryForWorktreeCreation(
+3
supacodeTests/RepositoriesFeatureTests.swift
··· 460 460 461 461 #expect(store.state.pendingWorktrees.isEmpty) 462 462 #expect(store.state.selection == .worktree(createdWorktree.id)) 463 + #expect(store.state.sidebarSelectedWorktreeIDs == [createdWorktree.id]) 463 464 #expect(store.state.pendingSetupScriptWorktreeIDs.contains(createdWorktree.id)) 464 465 #expect(store.state.pendingTerminalFocusWorktreeIDs.contains(createdWorktree.id)) 465 466 #expect(store.state.repositories[id: repository.id]?.worktrees[id: createdWorktree.id] != nil) ··· 1290 1291 ), 1291 1292 ] 1292 1293 initialState.selection = .worktree(pendingID) 1294 + initialState.sidebarSelectedWorktreeIDs = [existingWorktree.id, pendingID] 1293 1295 let store = TestStore(initialState: initialState) { 1294 1296 RepositoriesFeature() 1295 1297 } withDependencies: { ··· 1307 1309 $0.pendingTerminalFocusWorktreeIDs.insert(newWorktree.id) 1308 1310 $0.pendingWorktrees = [] 1309 1311 $0.selection = .worktree(newWorktree.id) 1312 + $0.sidebarSelectedWorktreeIDs = [newWorktree.id] 1310 1313 $0.repositories = [updatedRepository] 1311 1314 } 1312 1315