diff options
| author | Filip <[email protected]> | 2026-02-11 16:18:44 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-11 09:18:44 -0600 |
| commit | eef3ae3e1f73eca103892a758d44e24d3c725d81 (patch) | |
| tree | b076ba087302927daf732bb766ae545790aad4c6 /packages/app/src/components/session | |
| parent | fc88dde63f1c4a7f547bbe0634c68c5ce9fc787c (diff) | |
| download | opencode-eef3ae3e1f73eca103892a758d44e24d3c725d81.tar.gz opencode-eef3ae3e1f73eca103892a758d44e24d3c725d81.zip | |
Fix/reverception (#13166)
Co-authored-by: Adam <[email protected]>
Diffstat (limited to 'packages/app/src/components/session')
| -rw-r--r-- | packages/app/src/components/session/session-header.tsx | 59 |
1 files changed, 17 insertions, 42 deletions
diff --git a/packages/app/src/components/session/session-header.tsx b/packages/app/src/components/session/session-header.tsx index 383490f99..54e24a6fb 100644 --- a/packages/app/src/components/session/session-header.tsx +++ b/packages/app/src/components/session/session-header.tsx @@ -1,4 +1,4 @@ -import { createEffect, createMemo, createResource, onCleanup, Show } from "solid-js" +import { createEffect, createMemo, onCleanup, Show } from "solid-js" import { createStore } from "solid-js/store" import { Portal } from "solid-js/web" import { useParams } from "@solidjs/router" @@ -18,7 +18,6 @@ import { IconButton } from "@opencode-ai/ui/icon-button" import { Button } from "@opencode-ai/ui/button" import { AppIcon } from "@opencode-ai/ui/app-icon" import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu" -import { Spinner } from "@opencode-ai/ui/spinner" import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip" import { Popover } from "@opencode-ai/ui/popover" import { TextField } from "@opencode-ai/ui/text-field" @@ -168,7 +167,6 @@ export function SessionHeader() { const [prefs, setPrefs] = persisted(Persist.global("open.app"), createStore({ app: "finder" as OpenApp })) const [menu, setMenu] = createStore({ open: false }) - const [openRequest, setOpenRequest] = createStore({ app: undefined as OpenApp | undefined, version: 0 }) const canOpen = createMemo(() => platform.platform === "desktop" && !!platform.openPath && server.isLocal()) const current = createMemo(() => options().find((o) => o.id === prefs.app) ?? options()[0]) @@ -181,32 +179,20 @@ export function SessionHeader() { setPrefs("app", options()[0]?.id ?? "finder") }) - const [openTask] = createResource( - () => openRequest.app && openRequest.version, - async () => { - const app = openRequest.app - const directory = projectDirectory() - if (!app || !directory || !canOpen()) return - - const item = options().find((o) => o.id === app) - const openWith = item && "openWith" in item ? item.openWith : undefined - await platform.openPath?.(directory, openWith) - }, - ) - - createEffect(() => { - const err = openTask.error - if (!err) return - showToast({ - variant: "error", - title: language.t("common.requestFailed"), - description: err instanceof Error ? err.message : String(err), - }) - }) - const openDir = (app: OpenApp) => { - if (openTask.loading) return - setOpenRequest({ app, version: openRequest.version + 1 }) + const directory = projectDirectory() + if (!directory) return + if (!canOpen()) return + + const item = options().find((o) => o.id === app) + const openWith = item && "openWith" in item ? item.openWith : undefined + Promise.resolve(platform.openPath?.(directory, openWith)).catch((err: unknown) => { + showToast({ + variant: "error", + title: language.t("common.requestFailed"), + description: err instanceof Error ? err.message : String(err), + }) + }) } const copyPath = () => { @@ -362,18 +348,12 @@ export function SessionHeader() { <div class="flex h-[24px] box-border items-center rounded-md border border-border-base bg-surface-panel overflow-hidden"> <Button variant="ghost" - class="rounded-none h-full py-0 pr-3 pl-2 gap-1.5 border-none shadow-none disabled:!cursor-default" - classList={{ - "bg-surface-raised-base-active": openTask.loading, - }} + class="rounded-none h-full py-0 pr-3 pl-2 gap-1.5 border-none shadow-none" onClick={() => openDir(current().id)} - disabled={openTask.loading} aria-label={language.t("session.header.open.ariaLabel", { app: current().label })} > <div class="flex size-5 shrink-0 items-center justify-center"> - <Show when={openTask.loading} fallback={<AppIcon id={current().icon} class="size-4" />}> - <Spinner class="size-3.5 text-icon-base" /> - </Show> + <AppIcon id={current().icon} class="size-4" /> </div> <span class="text-12-regular text-text-strong">Open</span> </Button> @@ -388,11 +368,7 @@ export function SessionHeader() { as={IconButton} icon="chevron-down" variant="ghost" - disabled={openTask.loading} - class="rounded-none h-full w-[24px] p-0 border-none shadow-none data-[expanded]:bg-surface-raised-base-active disabled:!cursor-default" - classList={{ - "bg-surface-raised-base-active": openTask.loading, - }} + class="rounded-none h-full w-[24px] p-0 border-none shadow-none data-[expanded]:bg-surface-raised-base-active" aria-label={language.t("session.header.open.menu")} /> <DropdownMenu.Portal> @@ -409,7 +385,6 @@ export function SessionHeader() { {options().map((o) => ( <DropdownMenu.RadioItem value={o.id} - disabled={openTask.loading} onSelect={() => { setMenu("open", false) openDir(o.id) |
