From 07731e888c0d694b46a7fa3a192c123d773515d2 Mon Sep 17 00:00:00 2001 From: LucasDLTG Date: Wed, 29 Apr 2026 11:05:25 +0200 Subject: [PATCH] fix: sidebar opened by default on desktop --- src/components/Sidebar.tsx | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 9f40d57..5c7642f 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -24,21 +24,21 @@ function useIsWide(): boolean { /* ----------------------------- Shared sidebar logic ------------------------------*/ -function useSidebarState() { +function useSidebarState(panels: SidebarPanel[], isWide: boolean) { const [activeId, setActiveId] = useState(null); + // open first panel by default ONLY on first mount (desktop only) + const [initialized, setInitialized] = useState(false); + + if (!initialized && isWide) { + setActiveId(panels[0]?.id ?? null); + setInitialized(true); + } + const setClosed = () => setActiveId(null); - const toggle = (id: string, effectiveId: string | null) => { - setActiveId((prev) => - prev === id || (effectiveId === id && prev === null) ? null : id, - ); - }; - - const resolveEffectiveId = (isWide: boolean, panels: SidebarPanel[]) => { - return activeId === null - ? null - : (activeId ?? (isWide ? (panels[0]?.id ?? null) : null)); + const toggle = (id: string) => { + setActiveId((prev) => (prev === id ? null : id)); }; return { @@ -46,7 +46,6 @@ function useSidebarState() { setActiveId, setClosed, toggle, - resolveEffectiveId, }; } @@ -159,9 +158,9 @@ function IconRail({ export default function Sidebar({ panels }: { panels: SidebarPanel[] }) { const isWide = useIsWide(); - const { setClosed, toggle, resolveEffectiveId } = useSidebarState(); + const { activeId, setClosed, toggle } = useSidebarState(panels, isWide); - const effectiveId = resolveEffectiveId(isWide, panels); + const effectiveId = activeId; const activePanel = panels.find((p) => p.id === effectiveId); const isOpen = !!activePanel;