diff --git a/frontend/src/app/kosmos/KosmosSidebar.tsx b/frontend/src/app/kosmos/KosmosSidebar.tsx index 24ce8f0..c71a2fe 100644 --- a/frontend/src/app/kosmos/KosmosSidebar.tsx +++ b/frontend/src/app/kosmos/KosmosSidebar.tsx @@ -98,7 +98,7 @@ export function KosmosSidebar() { ) : ( - + -
- Pages - -
- Logos +
+ Logos + +
{pages.length === 0 ? ( diff --git a/frontend/src/app/recollections/layout/RecollectionSidebarContext.tsx b/frontend/src/app/recollections/layout/RecollectionSidebarContext.tsx index c52c3eb..07d63f5 100644 --- a/frontend/src/app/recollections/layout/RecollectionSidebarContext.tsx +++ b/frontend/src/app/recollections/layout/RecollectionSidebarContext.tsx @@ -63,7 +63,8 @@ export function RecollectionSidebarProvider({ children }: { children: React.Reac [recollectionId] ) - // Load page tree and run migration when empty (treat existing single doc as "Main" page). + // Load page tree from storage only when recollection changes (not on every searchParams change). + // Otherwise adding a new page would trigger searchParams change and this would overwrite tree before persist. useEffect(() => { if (!recollectionId) return let t = getLogosPageTree(recollectionId) @@ -75,15 +76,20 @@ export function RecollectionSidebarProvider({ children }: { children: React.Reac t = [main] } setTree(t) + }, [recollectionId]) + + // Sync activePageId from URL when searchParams or tree changes (e.g. after adding a page). + useEffect(() => { + if (!recollectionId) return const pageFromUrl = searchParams.get('page') - const validIdFromUrl = pageFromUrl && t.some((p) => p.id === pageFromUrl) ? pageFromUrl : null setActivePageId((prev) => { + const validIdFromUrl = pageFromUrl && tree.some((p) => p.id === pageFromUrl) ? pageFromUrl : null if (validIdFromUrl) return validIdFromUrl - const firstId = t[0]?.id ?? null - if (prev != null && t.some((p) => p.id === prev)) return prev + const firstId = tree[0]?.id ?? null + if (prev != null && tree.some((p) => p.id === prev)) return prev return firstId }) - }, [recollectionId, searchParams]) + }, [recollectionId, searchParams, tree]) // Persist tree when sidebar changes it. useEffect(() => {