import { useEffect, useState } from "react"; import { Link, useLocation } from "wouter"; import { ChevronsLeft, ChevronsRight, LogOut, Plus } from "lucide-react"; import { Logo, LogoMark } from "@/components/brand/logo"; import { ThemeToggle } from "@/components/theme-provider"; import { Avatar, AvatarFallback } from "@/components/ui/avatar"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { isActivePath, visibleGroups, type NavItem } from "@/components/layout/nav-config"; import { useLogout, useSession } from "@/hooks/use-session"; import { cn } from "@/lib/utils"; function readCollapsed(): boolean { try { return localStorage.getItem("sidebar-collapsed") === "true"; } catch { return false; } } function NavLink({ item, active, collapsed }: { item: NavItem; active: boolean; collapsed: boolean }) { const Icon = item.icon; const link = ( {active && } {!collapsed && {item.label}} ); if (!collapsed) return link; return ( {link} {item.label} ); } /** Barre latérale desktop (≥ lg). Sur mobile, la navigation passe par MobileNav. */ export default function Sidebar() { const [location] = useLocation(); const { session, isAdmin } = useSession(); const logout = useLogout(); const [collapsed, setCollapsed] = useState(readCollapsed); useEffect(() => { try { localStorage.setItem("sidebar-collapsed", String(collapsed)); } catch { /* stockage indisponible : on ignore */ } }, [collapsed]); const groups = visibleGroups(isAdmin); const initials = session?.username.substring(0, 2).toUpperCase() ?? "?"; return ( ); }