import { useState, useEffect } from "react"; import { NavLink, useLocation } from "react-router-dom"; import { useQuery } from "@tanstack/react-query"; import { Home, Grid2X2, Settings, ShieldCheck, ChevronRight, ChevronLeft, ChevronDown, LogOut, UserCircle, FileText, Folder, Users, UsersRound, Palette, } from "lucide-react"; import { Button } from "@/components/ui/button"; import ThemeToggle from "@/components/ThemeToggle"; import { useAuth } from "@/hooks/useAuth"; import { getMe, listCategories } from "@/api/client"; import { cn } from "@/lib/utils"; export default function Sidebar() { const [sidebarExpanded, setSidebarExpanded] = useState(true); const { logout } = useAuth(); const location = useLocation(); const { data: user } = useQuery({ queryKey: ["me"], queryFn: getMe }); const isAppsRoute = location.pathname.startsWith("/apps"); const isDocsRoute = location.pathname.startsWith("/apps/documents"); const isAdminRoute = location.pathname.startsWith("/admin"); const [appsOpen, setAppsOpen] = useState(isAppsRoute); const [docsOpen, setDocsOpen] = useState(isDocsRoute); const [adminOpen, setAdminOpen] = useState(isAdminRoute); // Auto-open sections when navigating to their routes useEffect(() => { if (isAppsRoute) setAppsOpen(true); }, [isAppsRoute]); useEffect(() => { if (isDocsRoute) setDocsOpen(true); }, [isDocsRoute]); useEffect(() => { if (isAdminRoute) setAdminOpen(true); }, [isAdminRoute]); const { data: categories = [] } = useQuery({ queryKey: ["categories"], queryFn: listCategories, enabled: appsOpen && docsOpen && !!user, }); const navItemClass = (isActive: boolean) => cn( "flex items-center rounded-lg transition-colors", sidebarExpanded ? "px-3 py-2 gap-3" : "justify-center py-3", isActive ? "bg-primary/10 text-primary" : "text-muted hover:bg-muted/20 hover:text-foreground" ); const subItemClass = (isActive: boolean) => cn( "flex items-center rounded-lg transition-colors text-sm", "pl-8 pr-3 py-1.5 gap-2", isActive ? "bg-primary/10 text-primary" : "text-muted hover:bg-muted/20 hover:text-foreground" ); const subSubItemClass = (isActive: boolean) => cn( "flex items-center rounded-lg transition-colors text-sm", "pl-12 pr-3 py-1 gap-2", isActive ? "bg-primary/10 text-primary" : "text-muted hover:bg-muted/20 hover:text-foreground" ); return ( ); }