summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/pages
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-04 20:32:34 -0600
committerAdam <[email protected]>2026-01-05 13:21:29 -0600
commitd1191675c68d8995333fc4300b11d09e87d711d2 (patch)
tree41041b9ff3f0a8a880f3ddd6e82f3b0ac2d88cbd /packages/app/src/pages
parent362a657b4f27619588b4f60026c9022e99a7c2d2 (diff)
downloadopencode-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.tsx30
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>