From 25d0c50a5b6431d66e9583e9487af412941c2f4b Mon Sep 17 00:00:00 2001 From: cosmiclasagnadev Date: Thu, 5 Feb 2026 09:16:55 +0800 Subject: [PATCH] resubscribe on project worktree changes to fix sessions state switching --- packages/app/src/pages/layout.tsx | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 4ee54d306504..b182fa33d7be 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -2488,17 +2488,18 @@ export default function Layout(props: ParentProps) { } const LocalWorkspace = (props: { project: LocalProject; mobile?: boolean }): JSX.Element => { - const [workspaceStore, setWorkspaceStore] = globalSync.child(props.project.worktree) + const store = createMemo(() => globalSync.child(props.project.worktree)) + const storeData = createMemo(() => store()[0]) const slug = createMemo(() => base64Encode(props.project.worktree)) const sessions = createMemo(() => - workspaceStore.session - .filter((session) => session.directory === workspaceStore.path.directory) + storeData() + .session.filter((session) => session.directory === props.project.worktree) .filter((session) => !session.parentID && !session.time?.archived) .toSorted(sortSessions(Date.now())), ) const children = createMemo(() => { const map = new Map() - for (const session of workspaceStore.session) { + for (const session of storeData().session) { if (!session.parentID) continue const existing = map.get(session.parentID) if (existing) { @@ -2509,14 +2510,20 @@ export default function Layout(props: ParentProps) { } return map }) - const booted = createMemo((prev) => prev || workspaceStore.status === "complete", false) + const booted = createMemo((prev) => prev || storeData().status === "complete", false) const loading = createMemo(() => !booted() && sessions().length === 0) - const hasMore = createMemo(() => workspaceStore.sessionTotal > sessions().length) + const hasMore = createMemo(() => storeData().sessionTotal > sessions().length) const loadMore = async () => { - setWorkspaceStore("limit", (limit) => limit + 5) + store()[1]("limit", (limit) => limit + 5) await globalSync.project.loadSessions(props.project.worktree) } + createEffect(() => { + const project = currentProject() + if (!project || project.worktree !== props.project.worktree) return + globalSync.child(props.project.worktree, { bootstrap: true }) + }) + return (
{