summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-15 20:05:51 -0600
committerAdam <[email protected]>2026-01-16 05:20:43 -0600
commitc551a4b6e31619005f65d40ff32163fd9d97482c (patch)
treed63927a7b068aab7831cc5f461532f93ba887288
parent524ea95a00efd0dff367c4ef9d285f291d54cbf0 (diff)
downloadopencode-c551a4b6e31619005f65d40ff32163fd9d97482c.tar.gz
opencode-c551a4b6e31619005f65d40ff32163fd9d97482c.zip
fix(app): persist workspace order and collapsed state
-rw-r--r--packages/app/src/pages/layout.tsx19
1 files changed, 17 insertions, 2 deletions
diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx
index f2a777fd3..2175f44c5 100644
--- a/packages/app/src/pages/layout.tsx
+++ b/packages/app/src/pages/layout.tsx
@@ -64,7 +64,7 @@ import { useServer } from "@/context/server"
export default function Layout(props: ParentProps) {
const [store, setStore, , ready] = persisted(
- Persist.global("layout", ["layout.v6"]),
+ Persist.global("layout.page", ["layout.page.v1"]),
createStore({
lastSession: {} as { [directory: string]: string },
activeProject: undefined as string | undefined,
@@ -74,6 +74,9 @@ export default function Layout(props: ParentProps) {
}),
)
+ const pageReady = createMemo(() => ready())
+ const layoutReady = createMemo(() => layout.ready())
+
let scrollContainerRef: HTMLDivElement | undefined
const xlQuery = window.matchMedia("(min-width: 1280px)")
const [isLargeViewport, setIsLargeViewport] = createSignal(xlQuery.matches)
@@ -293,7 +296,8 @@ export default function Layout(props: ParentProps) {
})
createEffect(() => {
- if (!ready()) return
+ if (!pageReady()) return
+ if (!layoutReady()) return
const project = currentProject()
if (!project) return
@@ -318,6 +322,16 @@ export default function Layout(props: ParentProps) {
}
})
+ createEffect(() => {
+ if (!pageReady()) return
+ if (!layoutReady()) return
+ for (const [directory, expanded] of Object.entries(store.workspaceExpanded)) {
+ if (layout.sidebar.workspaces(directory)()) continue
+ if (!expanded) continue
+ setStore("workspaceExpanded", directory, false)
+ }
+ })
+
const currentSessions = createMemo(() => {
const project = currentProject()
if (!project) return [] as Session[]
@@ -708,6 +722,7 @@ export default function Layout(props: ParentProps) {
}
createEffect(() => {
+ if (!pageReady()) return
if (!params.dir || !params.id) return
const directory = base64Decode(params.dir)
const id = params.id