"use client"; import { useEffect, useState } from "react"; import { Menu, User } from "lucide-react"; import { AdminSidebar } from "@/components/admin/AdminSidebar"; const SIDEBAR_STORAGE_KEY = "iamcavalli:sidebar"; /** * Client shell for every /admin/* page: collapsible sidebar + top header + *
. Collapse state is persisted to localStorage and read on mount * (starts expanded on server/first paint to avoid a hydration mismatch, * then reconciles client-side — mirrors the pattern used by useTheme). */ export function AdminShell({ children }: { children: React.ReactNode }) { const [collapsed, setCollapsed] = useState(false); useEffect(() => { const stored = window.localStorage.getItem(SIDEBAR_STORAGE_KEY); if (stored === "collapsed") setCollapsed(true); }, []); function toggleCollapsed() { setCollapsed((prev) => { const next = !prev; window.localStorage.setItem(SIDEBAR_STORAGE_KEY, next ? "collapsed" : "expanded"); return next; }); } return (
{/* Top header bar */}
Area di Lavoro
Admin {/* TODO: gestione utenti/collaboratori — placeholder avatar until real user accounts + uploaded profile images are wired up. */}
{children}
); }