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} + + ); }