summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context/layout.tsx
diff options
context:
space:
mode:
authoradamelmore <[email protected]>2026-01-09 08:19:39 -0600
committeradamelmore <[email protected]>2026-01-09 08:20:00 -0600
commit0433d4d064e38430980797a1be179397aec0febd (patch)
tree46127e011bcd36cdc8a4676c6dd571462ff3330a /packages/app/src/context/layout.tsx
parentd34fdac85450c26ae422b00bd151eab797ea7e2e (diff)
downloadopencode-0433d4d064e38430980797a1be179397aec0febd.tar.gz
opencode-0433d4d064e38430980797a1be179397aec0febd.zip
fix(app): store terminal and review pane visibility per session
Diffstat (limited to 'packages/app/src/context/layout.tsx')
-rw-r--r--packages/app/src/context/layout.tsx86
1 files changed, 61 insertions, 25 deletions
diff --git a/packages/app/src/context/layout.tsx b/packages/app/src/context/layout.tsx
index 2d92409f0..385f564fa 100644
--- a/packages/app/src/context/layout.tsx
+++ b/packages/app/src/context/layout.tsx
@@ -33,6 +33,8 @@ type SessionTabs = {
type SessionView = {
scroll: Record<string, SessionScroll>
reviewOpen?: string[]
+ terminalOpened?: boolean
+ reviewPanelOpened?: boolean
}
export type LocalProject = Partial<Project> & { worktree: string; expanded: boolean }
@@ -53,11 +55,9 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
width: 280,
},
terminal: {
- opened: false,
height: 280,
},
review: {
- opened: true,
diffStyle: "split" as ReviewDiffStyle,
},
session: {
@@ -150,7 +150,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
const current = store.sessionView[sessionKey]
const keep = meta.active ?? sessionKey
if (!current) {
- setStore("sessionView", sessionKey, { scroll: next })
+ setStore("sessionView", sessionKey, { scroll: next, terminalOpened: false, reviewPanelOpened: true })
prune(keep)
return
}
@@ -306,40 +306,20 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
},
},
terminal: {
- opened: createMemo(() => store.terminal.opened),
- open() {
- setStore("terminal", "opened", true)
- },
- close() {
- setStore("terminal", "opened", false)
- },
- toggle() {
- setStore("terminal", "opened", (x) => !x)
- },
height: createMemo(() => store.terminal.height),
resize(height: number) {
setStore("terminal", "height", height)
},
},
review: {
- opened: createMemo(() => store.review?.opened ?? true),
diffStyle: createMemo(() => store.review?.diffStyle ?? "split"),
setDiffStyle(diffStyle: ReviewDiffStyle) {
if (!store.review) {
- setStore("review", { opened: true, diffStyle })
+ setStore("review", { diffStyle })
return
}
setStore("review", "diffStyle", diffStyle)
},
- open() {
- setStore("review", "opened", true)
- },
- close() {
- setStore("review", "opened", false)
- },
- toggle() {
- setStore("review", "opened", (x) => !x)
- },
},
session: {
width: createMemo(() => store.session?.width ?? 600),
@@ -367,6 +347,33 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
touch(sessionKey)
scroll.seed(sessionKey)
const s = createMemo(() => store.sessionView[sessionKey] ?? { scroll: {} })
+ const terminalOpened = createMemo(() => s().terminalOpened ?? false)
+ const reviewPanelOpened = createMemo(() => s().reviewPanelOpened ?? true)
+
+ function setTerminalOpened(next: boolean) {
+ const current = store.sessionView[sessionKey]
+ if (!current) {
+ setStore("sessionView", sessionKey, { scroll: {}, terminalOpened: next, reviewPanelOpened: true })
+ return
+ }
+
+ const value = current.terminalOpened ?? false
+ if (value === next) return
+ setStore("sessionView", sessionKey, "terminalOpened", next)
+ }
+
+ function setReviewPanelOpened(next: boolean) {
+ const current = store.sessionView[sessionKey]
+ if (!current) {
+ setStore("sessionView", sessionKey, { scroll: {}, terminalOpened: false, reviewPanelOpened: next })
+ return
+ }
+
+ const value = current.reviewPanelOpened ?? true
+ if (value === next) return
+ setStore("sessionView", sessionKey, "reviewPanelOpened", next)
+ }
+
return {
scroll(tab: string) {
return scroll.scroll(sessionKey, tab)
@@ -374,12 +381,41 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
setScroll(tab: string, pos: SessionScroll) {
scroll.setScroll(sessionKey, tab, pos)
},
+ terminal: {
+ opened: terminalOpened,
+ open() {
+ setTerminalOpened(true)
+ },
+ close() {
+ setTerminalOpened(false)
+ },
+ toggle() {
+ setTerminalOpened(!terminalOpened())
+ },
+ },
+ reviewPanel: {
+ opened: reviewPanelOpened,
+ open() {
+ setReviewPanelOpened(true)
+ },
+ close() {
+ setReviewPanelOpened(false)
+ },
+ toggle() {
+ setReviewPanelOpened(!reviewPanelOpened())
+ },
+ },
review: {
open: createMemo(() => s().reviewOpen),
setOpen(open: string[]) {
const current = store.sessionView[sessionKey]
if (!current) {
- setStore("sessionView", sessionKey, { scroll: {}, reviewOpen: open })
+ setStore("sessionView", sessionKey, {
+ scroll: {},
+ terminalOpened: false,
+ reviewPanelOpened: true,
+ reviewOpen: open,
+ })
return
}