From 5c1333a139b24b98fa605e344a813ddf5d238762 Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Sun, 17 May 2026 23:48:05 +0300 Subject: [PATCH] fix: restore typing in branch dropdown search fields Prevent menu typeahead from intercepting search input keystrokes Fix branch search in worktree and Git sidebar dropdowns Cover related directory tree and integrate branch inputs --- packages/ui/src/components/session/DirectoryTree.tsx | 6 ++---- packages/ui/src/components/session/NewWorktreeDialog.tsx | 6 ++++++ packages/ui/src/components/views/git/BranchSelector.tsx | 1 + .../ui/src/components/views/git/IntegrateCommitsSection.tsx | 6 +++++- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/ui/src/components/session/DirectoryTree.tsx b/packages/ui/src/components/session/DirectoryTree.tsx index 5c78b43e..44488c7f 100644 --- a/packages/ui/src/components/session/DirectoryTree.tsx +++ b/packages/ui/src/components/session/DirectoryTree.tsx @@ -815,13 +815,12 @@ export const DirectoryTree: React.FC = ({ value={newDirName} onChange={(e) => setNewDirName(e.target.value)} onKeyDown={(e) => { + e.stopPropagation(); if (e.key === 'Enter') { e.preventDefault(); - e.stopPropagation(); createDirectory(); } else if (e.key === 'Escape') { e.preventDefault(); - e.stopPropagation(); cancelCreatingDirectory(); } }} @@ -904,13 +903,12 @@ export const DirectoryTree: React.FC = ({ value={newDirName} onChange={(e) => setNewDirName(e.target.value)} onKeyDown={(e) => { + e.stopPropagation(); if (e.key === 'Enter') { e.preventDefault(); - e.stopPropagation(); createDirectory(); } else if (e.key === 'Escape') { e.preventDefault(); - e.stopPropagation(); cancelCreatingDirectory(); } }} diff --git a/packages/ui/src/components/session/NewWorktreeDialog.tsx b/packages/ui/src/components/session/NewWorktreeDialog.tsx index 7c4a0b88..f7f68b45 100644 --- a/packages/ui/src/components/session/NewWorktreeDialog.tsx +++ b/packages/ui/src/components/session/NewWorktreeDialog.tsx @@ -299,6 +299,10 @@ export function NewWorktreeDialog({ const existingBranchMobileListWrapperRef = React.useRef(null); const sourceBranchMobileListWrapperRef = React.useRef(null); + const stopDropdownTypeahead = React.useCallback((event: React.KeyboardEvent) => { + event.stopPropagation(); + }, []); + const findScrollableContainer = React.useCallback((startNode: HTMLElement | null): HTMLElement | null => { let node: HTMLElement | null = startNode; while (node && node !== document.body) { @@ -1600,6 +1604,7 @@ export function NewWorktreeDialog({ placeholder={t('session.newWorktree.searchBranches')} value={existingBranchQuery} onValueChange={setExistingBranchQuery} + onKeyDown={stopDropdownTypeahead} /> {isLoadingBranches ? ( @@ -1840,6 +1845,7 @@ export function NewWorktreeDialog({ placeholder={t('session.newWorktree.searchBranches')} value={sourceBranchQuery} onValueChange={setSourceBranchQuery} + onKeyDown={stopDropdownTypeahead} /> {isLoadingBranches ? ( diff --git a/packages/ui/src/components/views/git/BranchSelector.tsx b/packages/ui/src/components/views/git/BranchSelector.tsx index fa5e3b64..036bc112 100644 --- a/packages/ui/src/components/views/git/BranchSelector.tsx +++ b/packages/ui/src/components/views/git/BranchSelector.tsx @@ -189,6 +189,7 @@ export const BranchSelector: React.FC = ({ placeholder={t('gitView.branch.searchPlaceholder')} value={search} onValueChange={setSearch} + onKeyDown={stopDropdownTypeahead} /> - + event.stopPropagation()} + />