From f3e44c53d7c070d15b0112ab8f23fbbeb112d423 Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Mon, 3 Nov 2025 05:54:29 -0800 Subject: [PATCH] Show full paths in command palette switcher https://feedback.yaak.app/p/command-palette-search-should-include-parent-folder-names --- src-web/components/CommandPaletteDialog.tsx | 23 ++++++++++++++------- src-web/components/Overlay.tsx | 8 ++++++- src-web/components/core/PlainInput.tsx | 8 ++++--- src-web/lib/resolvedModelName.ts | 12 +++++++---- 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src-web/components/CommandPaletteDialog.tsx b/src-web/components/CommandPaletteDialog.tsx index 806d278d..b3a2f37b 100644 --- a/src-web/components/CommandPaletteDialog.tsx +++ b/src-web/components/CommandPaletteDialog.tsx @@ -30,7 +30,10 @@ import { deleteModelWithConfirm } from '../lib/deleteModelWithConfirm'; import { showDialog } from '../lib/dialog'; import { editEnvironment } from '../lib/editEnvironment'; import { renameModelWithPrompt } from '../lib/renameModelWithPrompt'; -import { resolvedModelNameWithFolders } from '../lib/resolvedModelName'; +import { + resolvedModelNameWithFolders, + resolvedModelNameWithFoldersArray, +} from '../lib/resolvedModelName'; import { router } from '../lib/router'; import { setWorkspaceSearchParams } from '../lib/setWorkspaceSearchParams'; import { CookieDialog } from './CookieDialog'; @@ -40,7 +43,6 @@ import { HotKey } from './core/HotKey'; import { HttpMethodTag } from './core/HttpMethodTag'; import { Icon } from './core/Icon'; import { PlainInput } from './core/PlainInput'; -import { HStack } from './core/Stacks'; interface CommandPaletteGroup { key: string; @@ -275,10 +277,17 @@ export function CommandPaletteDialog({ onClose }: { onClose: () => void }) { key: `switch-request-${r.id}`, searchText: resolvedModelNameWithFolders(r), label: ( - - -
{resolvedModelNameWithFolders(r)}
-
+
+ + {resolvedModelNameWithFoldersArray(r).map((name, i, all) => ( + <> + {i !== 0 && ( + + )} +
{name}
+ + ))} +
), onSelect: async () => { await router.navigate({ @@ -400,7 +409,7 @@ export function CommandPaletteDialog({ onClose }: { onClose: () => void }) { ); return ( -
+
{ + // Not sure why delayInitialFocus: true doesn't help, but having this no-op promise + // seems to be required to make things work. + }, }} > void }, PlainInputProps>(fun } }, [regenerateFocusedUpdateKey, defaultValue]); - const id = `input-${name}`; + const id = useRef(`input-${generateId()}`); const commonClassName = classNames( className, '!bg-transparent min-w-0 w-full focus:outline-none placeholder:text-placeholder', @@ -134,7 +135,7 @@ export const PlainInput = forwardRef<{ focus: () => void }, PlainInputProps>(fun )} >