From 246c8eba6dd86cf524a575230c049c01ba49aae5 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Fri, 26 Jun 2026 23:50:36 +0800 Subject: [PATCH] fix(app): consolidate add project action --- .../components/prompt-project-selector.tsx | 96 +++++++++++++++---- 1 file changed, 77 insertions(+), 19 deletions(-) diff --git a/packages/app/src/components/prompt-project-selector.tsx b/packages/app/src/components/prompt-project-selector.tsx index 3c360ae8fd34..4573d0d552a8 100644 --- a/packages/app/src/components/prompt-project-selector.tsx +++ b/packages/app/src/components/prompt-project-selector.tsx @@ -69,12 +69,14 @@ export function createPromptProjectController(input: { if (servers().length <= 1) { return [...projects().map(projectKey), actionKey(servers()[0]?.key)] } - return servers().flatMap((server) => [ - ...projects() - .filter((project) => project.server?.key === server!.key) - .map(projectKey), - actionKey(server!.key), - ]) + return [ + ...servers().flatMap((server) => + projects() + .filter((project) => project.server?.key === server!.key) + .map(projectKey), + ), + actionKey(), + ] } const initialActive = () => { const selectedKey = selected() ? projectKey(selected()!) : undefined @@ -130,7 +132,10 @@ export function createPromptProjectController(input: { const first = input .controls() .available.find((project) => !search || displayName(project).toLowerCase().includes(search)) - setStore({ search: value, active: first ? projectKey(first) : actionKey(servers()[0]?.key) }) + setStore({ + search: value, + active: first ? projectKey(first) : actionKey(servers().length > 1 ? undefined : servers()[0]?.key), + }) }, clearSearch() { setStore({ search: "", active: initialActive() }) @@ -156,6 +161,9 @@ export function createPromptProjectController(input: { ? decodeURIComponent(store.active.slice(actionPrefix.length)) || undefined : undefined }, + activeAction() { + return store.active.startsWith(actionPrefix) + }, setSearchRef(el: HTMLInputElement) { searchRef = el }, @@ -204,6 +212,12 @@ export function PromptProjectSelector(props: { selectProject(project) return } + if (props.controller.activeAction() && props.controller.servers().length > 1) { + const item = activeItem() + item?.focus() + item?.dispatchEvent(new KeyboardEvent("keydown", { key: "ArrowRight", bubbles: true })) + return + } selectAction(props.controller.activeServer()) } const moveActive = (delta: number) => { @@ -320,7 +334,13 @@ export function PromptProjectSelector(props: { } > - + + props.controller.projects().some((project) => project.server?.key === server!.key), + )} + > {(server) => (
@@ -333,22 +353,49 @@ export function PromptProjectSelector(props: { )} -
)}
- -
-
- -
- +
+
+ 1} + fallback={ + + } + > + + props.controller.setActive(props.controller.actionKey())} + > + + + {props.controller.labels.add()} + + + + + + + {(server) => } + + + + + +
@@ -457,6 +504,9 @@ function ProjectItem(props: { ) } +const projectActionClass = + "h-7 gap-2 rounded-sm px-3 text-[13px] font-[440] leading-5 tracking-[-0.04px] text-v2-text-text-base [font-family:var(--v2-font-family-sans)] data-[highlighted]:!bg-v2-overlay-simple-overlay-hover" + function ProjectAction(props: { server?: string controller: PromptProjectController @@ -491,3 +541,11 @@ function ProjectAction(props: { ) } + +function ServerAction(props: { server: { key: string; name: string }; onSelect: (server: string) => void }) { + return ( + props.onSelect(props.server.key)}> + {props.server.name} + + ) +}