fix: sidebar opened by default on desktop

This commit is contained in:
2026-04-29 11:05:25 +02:00
parent 4e2a60b792
commit 07731e888c
+13 -14
View File
@@ -24,21 +24,21 @@ function useIsWide(): boolean {
/* -----------------------------
Shared sidebar logic
------------------------------*/
function useSidebarState() {
function useSidebarState(panels: SidebarPanel[], isWide: boolean) {
const [activeId, setActiveId] = useState<string | null>(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;