diff options
| author | Adam <[email protected]> | 2026-02-05 13:51:08 -0600 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-05 13:51:08 -0600 |
| commit | 83646e0366c47a3bccb5135d40628176a6776f33 (patch) | |
| tree | cd8525d1a684a659e31a4413301577fac3f8fb63 /packages/app/src/context | |
| parent | c40ce47e92befbe4cb27735e4d870f540e75b646 (diff) | |
| download | opencode-83646e0366c47a3bccb5135d40628176a6776f33.tar.gz opencode-83646e0366c47a3bccb5135d40628176a6776f33.zip | |
fix(app): allow toggling file tree closed independently (#12293)
Diffstat (limited to 'packages/app/src/context')
| -rw-r--r-- | packages/app/src/context/layout.tsx | 62 |
1 files changed, 57 insertions, 5 deletions
diff --git a/packages/app/src/context/layout.tsx b/packages/app/src/context/layout.tsx index e2fd0a7f4..95a2006ea 100644 --- a/packages/app/src/context/layout.tsx +++ b/packages/app/src/context/layout.tsx @@ -71,6 +71,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( } })() + const review = value.review const fileTree = value.fileTree const migratedFileTree = (() => { if (!isRecord(fileTree)) return fileTree @@ -85,10 +86,22 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( } })() - if (migratedSidebar === sidebar && migratedFileTree === fileTree) return value + const migratedReview = (() => { + if (!isRecord(review)) return review + if (typeof review.panelOpened === "boolean") return review + + const opened = isRecord(fileTree) && typeof fileTree.opened === "boolean" ? fileTree.opened : true + return { + ...review, + panelOpened: opened, + } + })() + + if (migratedSidebar === sidebar && migratedReview === review && migratedFileTree === fileTree) return value return { ...value, sidebar: migratedSidebar, + review: migratedReview, fileTree: migratedFileTree, } } @@ -109,6 +122,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( }, review: { diffStyle: "split" as ReviewDiffStyle, + panelOpened: true, }, fileTree: { opened: true, @@ -490,7 +504,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( diffStyle: createMemo(() => store.review?.diffStyle ?? "split"), setDiffStyle(diffStyle: ReviewDiffStyle) { if (!store.review) { - setStore("review", { diffStyle }) + setStore("review", { diffStyle, panelOpened: true }) return } setStore("review", "diffStyle", diffStyle) @@ -620,6 +634,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( const s = createMemo(() => store.sessionView[key()] ?? { scroll: {} }) const terminalOpened = createMemo(() => store.terminal?.opened ?? false) + const reviewPanelOpened = createMemo(() => store.review?.panelOpened ?? true) function setTerminalOpened(next: boolean) { const current = store.terminal @@ -633,6 +648,18 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( setStore("terminal", "opened", next) } + function setReviewPanelOpened(next: boolean) { + const current = store.review + if (!current) { + setStore("review", { diffStyle: "split" as ReviewDiffStyle, panelOpened: next }) + return + } + + const value = current.panelOpened ?? true + if (value === next) return + setStore("review", "panelOpened", next) + } + return { scroll(tab: string) { return scroll.scroll(key(), tab) @@ -652,6 +679,18 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( setTerminalOpened(!terminalOpened()) }, }, + reviewPanel: { + opened: reviewPanelOpened, + open() { + setReviewPanelOpened(true) + }, + close() { + setReviewPanelOpened(false) + }, + toggle() { + setReviewPanelOpened(!reviewPanelOpened()) + }, + }, review: { open: createMemo(() => s().reviewOpen), setOpen(open: string[]) { @@ -689,11 +728,10 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( const tabs = createMemo(() => store.sessionTabs[key()] ?? { all: [] }) return { tabs, - active: createMemo(() => (tabs().active === "review" ? undefined : tabs().active)), + active: createMemo(() => tabs().active), all: createMemo(() => tabs().all.filter((tab) => tab !== "review")), setActive(tab: string | undefined) { const session = key() - if (tab === "review") return if (!store.sessionTabs[session]) { setStore("sessionTabs", session, { all: [], active: tab }) } else { @@ -710,10 +748,18 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( } }, async open(tab: string) { - if (tab === "review") return const session = key() const current = store.sessionTabs[session] ?? { all: [] } + if (tab === "review") { + if (!store.sessionTabs[session]) { + setStore("sessionTabs", session, { all: current.all.filter((x) => x !== "review"), active: tab }) + return + } + setStore("sessionTabs", session, "active", tab) + return + } + if (tab === "context") { const all = [tab, ...current.all.filter((x) => x !== tab)] if (!store.sessionTabs[session]) { @@ -746,6 +792,12 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( const current = store.sessionTabs[session] if (!current) return + if (tab === "review") { + if (current.active !== tab) return + setStore("sessionTabs", session, "active", current.all[0]) + return + } + const all = current.all.filter((x) => x !== tab) if (current.active !== tab) { setStore("sessionTabs", session, "all", all) |
