From 58bb5780939f07a8148c44953e4653a83e044895 Mon Sep 17 00:00:00 2001 From: Nicholas Haley Date: Wed, 12 Aug 2026 16:06:10 -0400 Subject: [PATCH] fix: Fix sidebar rename from the ellipsis menu Unmounted the dropdown when rename started, so focus churn cancelled inline edit before it appeared. Keep the menu mounted and defer blur until focus settles on the input. Closes #35 --- .../project-sidebar/file-tree-node.tsx | 78 ++++++++++--------- 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/apps/dashboard/src/renderer/src/components/project-sidebar/file-tree-node.tsx b/apps/dashboard/src/renderer/src/components/project-sidebar/file-tree-node.tsx index f525636..a0c48ca 100644 --- a/apps/dashboard/src/renderer/src/components/project-sidebar/file-tree-node.tsx +++ b/apps/dashboard/src/renderer/src/components/project-sidebar/file-tree-node.tsx @@ -153,6 +153,15 @@ export function FileTreeNode({ setRenameError(null); } + /** Dropdown close returns focus through the trigger; defer so rename isn't cancelled first. */ + function handleRenameBlur() { + window.setTimeout(() => { + if (document.activeElement !== inputRef.current) { + cancelRename(); + } + }, 0); + } + function handleRenameKeyDown(e: React.KeyboardEvent) { if (e.key === "Enter") { e.preventDefault(); @@ -174,7 +183,7 @@ export function FileTreeNode({ setRenameError(null); }} onKeyDown={handleRenameKeyDown} - onBlur={cancelRename} + onBlur={handleRenameBlur} onClick={(e) => e.stopPropagation()} className={cn( "w-full h-5 min-h-5 box-border rounded p-0 text-sm leading-5", @@ -392,26 +401,25 @@ export function FileTreeNode({ {folderMenuItems} - {!isRenaming && ( - - - - More actions - - } - /> - - {dropdownFolderMenuItems} - - - )} + + + + More actions + + } + /> + + {dropdownFolderMenuItems} + + {open && node.children && node.children.length > 0 && ( @@ -491,21 +499,19 @@ export function FileTreeNode({ {menuItems} - {!isRenaming && ( - - - - More actions - - } - /> - - {dropdownMenuItems} - - - )} + + + + More actions + + } + /> + + {dropdownMenuItems} + + ); }