diff options
| author | Adam <[email protected]> | 2026-01-04 20:32:34 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2026-01-05 13:21:29 -0600 |
| commit | d1191675c68d8995333fc4300b11d09e87d711d2 (patch) | |
| tree | 41041b9ff3f0a8a880f3ddd6e82f3b0ac2d88cbd /packages/app/src/pages | |
| parent | 362a657b4f27619588b4f60026c9022e99a7c2d2 (diff) | |
| download | opencode-d1191675c68d8995333fc4300b11d09e87d711d2.tar.gz opencode-d1191675c68d8995333fc4300b11d09e87d711d2.zip | |
fix(app): worktree selection should navigate to worktree
Diffstat (limited to 'packages/app/src/pages')
| -rw-r--r-- | packages/app/src/pages/session.tsx | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 113f4c432..be500afd3 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -1,4 +1,4 @@ -import { For, onCleanup, Show, Match, Switch, createMemo, createEffect, on, batch } from "solid-js" +import { For, onCleanup, Show, Match, Switch, createMemo, createEffect, on } from "solid-js" import { createMediaQuery } from "@solid-primitives/media" import { Dynamic } from "solid-js/web" import { useLocal } from "@/context/local" @@ -24,7 +24,7 @@ import { useSync } from "@/context/sync" import { useTerminal, type LocalPTY } from "@/context/terminal" import { useLayout } from "@/context/layout" import { Terminal } from "@/components/terminal" -import { checksum, base64Decode } from "@opencode-ai/util/encode" +import { checksum, base64Encode, base64Decode } from "@opencode-ai/util/encode" import { useDialog } from "@opencode-ai/ui/context/dialog" import { DialogSelectFile } from "@/components/dialog-select-file" import { DialogSelectModel } from "@/components/dialog-select-model" @@ -250,6 +250,13 @@ export default function Page() { newSessionWorktree: "main", }) + const newSessionWorktree = createMemo(() => { + if (store.newSessionWorktree === "create") return "create" + const project = sync.project + if (project && sync.data.path.directory !== project.worktree) return sync.data.path.directory + return "main" + }) + const activeMessage = createMemo(() => { if (!store.messageId) return lastUserMessage() const found = visibleUserMessages()?.find((m) => m.id === store.messageId) @@ -866,8 +873,21 @@ export default function Page() { </Match> <Match when={true}> <NewSessionView - worktree={store.newSessionWorktree} - onWorktreeChange={(value) => setStore("newSessionWorktree", value)} + worktree={newSessionWorktree()} + onWorktreeChange={(value) => { + if (value === "create") { + setStore("newSessionWorktree", value) + return + } + + setStore("newSessionWorktree", "main") + + const target = value === "main" ? sync.project?.worktree : value + if (!target) return + if (target === sync.data.path.directory) return + layout.projects.open(target) + navigate(`/${base64Encode(target)}/session`) + }} /> </Match> </Switch> @@ -885,7 +905,7 @@ export default function Page() { ref={(el) => { inputRef = el }} - newSessionWorktree={store.newSessionWorktree} + newSessionWorktree={newSessionWorktree()} onNewSessionWorktreeReset={() => setStore("newSessionWorktree", "main")} /> </div> |
