From d21d8b2c4822f4ab5fa8fa3a0d548d07c7f4d211 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Thu, 2 Apr 2026 18:36:43 +0200 Subject: [PATCH] fix(#112): initialize sidebar accordion state from initial route Direct navigation to /admin/* now correctly opens Admin section and collapses operational sections on first render. Previously the accordion effect only triggered on route transitions. Co-Authored-By: Claude Opus 4.6 (1M context) --- ui/src/components/LayoutShell.tsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/ui/src/components/LayoutShell.tsx b/ui/src/components/LayoutShell.tsx index 97abd2d9..837e1e18 100644 --- a/ui/src/components/LayoutShell.tsx +++ b/ui/src/components/LayoutShell.tsx @@ -181,16 +181,15 @@ function LayoutContent() { const [filterQuery, setFilterQuery] = useState(''); // --- Section open states ------------------------------------------ - const [appsOpen, setAppsOpen] = useState(() => readCollapsed(SK_APPS, true)); - const [agentsOpen, setAgentsOpen] = useState(() => readCollapsed(SK_AGENTS, false)); - const [routesOpen, setRoutesOpen] = useState(() => readCollapsed(SK_ROUTES, false)); - const [adminOpen, setAdminOpen] = useState(() => readCollapsed(SK_ADMIN, false)); + const isAdminPage = location.pathname.startsWith('/admin'); + const [appsOpen, setAppsOpen] = useState(() => isAdminPage ? false : readCollapsed(SK_APPS, true)); + const [agentsOpen, setAgentsOpen] = useState(() => isAdminPage ? false : readCollapsed(SK_AGENTS, false)); + const [routesOpen, setRoutesOpen] = useState(() => isAdminPage ? false : readCollapsed(SK_ROUTES, false)); + const [adminOpen, setAdminOpen] = useState(() => isAdminPage ? true : readCollapsed(SK_ADMIN, false)); // Ref to remember operational section states when switching to admin const opsStateRef = useRef({ apps: appsOpen, agents: agentsOpen, routes: routesOpen }); - const isAdminPage = location.pathname.startsWith('/admin'); - // Accordion effect: when entering admin, collapse operational sections; when leaving, restore const prevAdminRef = useRef(isAdminPage); useEffect(() => {