Skip to content

Commit 1cc94bb

Browse files
authored
fix(desktop): update Electron stack and panel layout (#31571)
1 parent bc42187 commit 1cc94bb

7 files changed

Lines changed: 315 additions & 49 deletions

File tree

bun.lock

Lines changed: 267 additions & 41 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/app/src/pages/session.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import { useServerSync } from "@/context/server-sync"
3838
import { useLanguage } from "@/context/language"
3939
import { useLayout } from "@/context/layout"
4040
import { usePrompt } from "@/context/prompt"
41+
import { usePlatform } from "@/context/platform"
4142
import { useSDK } from "@/context/sdk"
4243
import { useServerSDK } from "@/context/server-sdk"
4344
import { useSettings } from "@/context/settings"
@@ -51,6 +52,7 @@ import {
5152
createSizing,
5253
focusTerminalById,
5354
shouldFocusTerminalOnKeyDown,
55+
shouldShowFileTree,
5456
} from "@/pages/session/helpers"
5557
import { MessageTimeline } from "@/pages/session/message-timeline"
5658
import { type DiffStyle, SessionReviewTab, type SessionReviewTabProps } from "@/pages/session/review-tab"
@@ -194,6 +196,7 @@ export default function Page() {
194196
const sdk = useSDK()
195197
const serverSDK = useServerSDK()
196198
const settings = useSettings()
199+
const platform = usePlatform()
197200
const prompt = usePrompt()
198201
const comments = useComments()
199202
const terminal = useTerminal()
@@ -271,7 +274,16 @@ export default function Page() {
271274
const isV2NewSessionPage = () =>
272275
shouldUseV2NewSessionPage({ newLayoutDesigns: newSessionDesign(), sessionID: params.id })
273276
const desktopReviewOpen = createMemo(() => isDesktop() && view().reviewPanel.opened() && !isV2NewSessionPage())
274-
const desktopFileTreeOpen = createMemo(() => isDesktop() && layout.fileTree.opened() && !isV2NewSessionPage())
277+
const desktopFileTreeOpen = createMemo(
278+
() =>
279+
isDesktop() &&
280+
!isV2NewSessionPage() &&
281+
shouldShowFileTree({
282+
desktopV2: platform.platform === "desktop" && settings.general.newLayoutDesigns(),
283+
showFileTree: settings.general.showFileTree(),
284+
opened: layout.fileTree.opened(),
285+
}),
286+
)
275287
const desktopSidePanelOpen = createMemo(() => desktopReviewOpen() || desktopFileTreeOpen())
276288
const sessionPanelWidth = createMemo(() => {
277289
if (!desktopSidePanelOpen()) return "100%"

packages/app/src/pages/session/helpers.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,17 @@ import {
88
focusTerminalById,
99
getTabReorderIndex,
1010
shouldFocusTerminalOnKeyDown,
11+
shouldShowFileTree,
1112
} from "./helpers"
1213

14+
describe("shouldShowFileTree", () => {
15+
test("does not reserve space for a disabled v2 file tree", () => {
16+
expect(shouldShowFileTree({ desktopV2: true, showFileTree: false, opened: true })).toBe(false)
17+
expect(shouldShowFileTree({ desktopV2: false, showFileTree: false, opened: true })).toBe(true)
18+
expect(shouldShowFileTree({ desktopV2: true, showFileTree: true, opened: true })).toBe(true)
19+
})
20+
})
21+
1322
describe("createOpenReviewFile", () => {
1423
test("opens and loads selected review file", () => {
1524
const calls: string[] = []

packages/app/src/pages/session/helpers.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ type TabsInput = {
2020

2121
export const getSessionKey = (dir: string | undefined, id: string | undefined) => `${dir ?? ""}${id ? `/${id}` : ""}`
2222

23+
export function shouldShowFileTree(input: { desktopV2: boolean; showFileTree: boolean; opened: boolean }) {
24+
return input.opened && (!input.desktopV2 || input.showFileTree)
25+
}
26+
2327
export const createSessionTabs = (input: TabsInput) => {
2428
const review = input.review ?? (() => false)
2529
const hasReview = input.hasReview ?? (() => false)

packages/app/src/pages/session/session-side-panel.tsx

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,13 @@ import { useSettings } from "@/context/settings"
2424
import { useSync } from "@/context/sync"
2525
import { createFileTabListSync } from "@/pages/session/file-tab-scroll"
2626
import { FileTabContent } from "@/pages/session/file-tabs"
27-
import { createOpenSessionFileTab, createSessionTabs, getTabReorderIndex, type Sizing } from "@/pages/session/helpers"
27+
import {
28+
createOpenSessionFileTab,
29+
createSessionTabs,
30+
getTabReorderIndex,
31+
shouldShowFileTree,
32+
type Sizing,
33+
} from "@/pages/session/helpers"
2834
import { setSessionHandoff } from "@/pages/session/handoff"
2935
import { useSessionLayout } from "@/pages/session/session-layout"
3036

@@ -59,10 +65,18 @@ export function SessionSidePanel(props: {
5965

6066
const isDesktop = createMediaQuery("(min-width: 768px)")
6167
const desktopV2 = () => platform.platform === "desktop" && settings.general.newLayoutDesigns()
62-
const shown = createMemo(() => (desktopV2() ? settings.general.showFileTree() : true))
68+
const shown = createMemo(() => !desktopV2() || settings.general.showFileTree())
6369

6470
const reviewOpen = createMemo(() => isDesktop() && view().reviewPanel.opened())
65-
const fileOpen = createMemo(() => isDesktop() && shown() && layout.fileTree.opened())
71+
const fileOpen = createMemo(
72+
() =>
73+
isDesktop() &&
74+
shouldShowFileTree({
75+
desktopV2: desktopV2(),
76+
showFileTree: settings.general.showFileTree(),
77+
opened: layout.fileTree.opened(),
78+
}),
79+
)
6680
const open = createMemo(() => reviewOpen() || fileOpen())
6781
const reviewTab = createMemo(() => isDesktop())
6882
const panelWidth = createMemo(() => {

packages/desktop/electron-builder.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ const getBase = (): Configuration => ({
7474
linux: {
7575
icon: `resources/icons`,
7676
category: "Development",
77+
executableName: "opencode-desktop",
7778
target: ["AppImage", "deb", "rpm"],
7879
},
7980
})

packages/desktop/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
"effect": "catalog:",
2929
"electron-context-menu": "4.1.2",
3030
"electron-log": "^5",
31-
"electron-store": "^10",
32-
"electron-updater": "^6",
31+
"electron-store": "11.0.2",
32+
"electron-updater": "6.8.9",
3333
"electron-window-state": "^5.0.3",
3434
"marked": "^15"
3535
},
@@ -48,8 +48,8 @@
4848
"@types/node": "catalog:",
4949
"@typescript/native-preview": "catalog:",
5050
"@valibot/to-json-schema": "1.6.0",
51-
"electron": "41.2.1",
52-
"electron-builder": "^26",
51+
"electron": "42.3.3",
52+
"electron-builder": "26.15.0",
5353
"electron-vite": "^5",
5454
"solid-js": "catalog:",
5555
"sury": "11.0.0-alpha.4",

0 commit comments

Comments
 (0)