From c551a4b6e31619005f65d40ff32163fd9d97482c Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Thu, 15 Jan 2026 20:05:51 -0600 Subject: [PATCH] fix(app): persist workspace order and collapsed state --- packages/app/src/pages/layout.tsx | 19 +++++++++++++++++-- 1 file 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