import { Calendar, Shield, MapPin, Users, BarChart3, Bell, Settings, LogOut, UserCog, ClipboardList, Car, Briefcase, Navigation, } from "lucide-react"; import { Link, useLocation } from "wouter"; import { Sidebar, SidebarContent, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarHeader, SidebarFooter, } from "@/components/ui/sidebar"; import { useAuth } from "@/hooks/useAuth"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Button } from "@/components/ui/button"; import { ThemeToggle } from "@/components/theme-toggle"; const dashboardItems = [ { title: "Dashboard", url: "/", icon: Shield, roles: ["admin", "coordinator", "guard", "client"], }, ]; const creationItems = [ { title: "Turni Fissi", url: "/shifts", icon: Calendar, roles: ["admin", "coordinator"], }, { title: "Pattuglie Mobile", url: "/planning-mobile", icon: Navigation, roles: ["admin", "coordinator"], }, ]; const consultationItems = [ { title: "Planning Agente Fisso", url: "/planning-view-fixed-agent", icon: Users, roles: ["admin", "coordinator"], }, { title: "Planning Agente Mobile", url: "/planning-view-mobile-agent", icon: Navigation, roles: ["admin", "coordinator"], }, { title: "Planning Sito", url: "/site-planning-view", icon: MapPin, roles: ["admin", "coordinator"], }, ]; const personalItems = [ { title: "I Miei Turni Fissi", url: "/my-shifts-fixed", icon: Calendar, roles: ["guard"], }, { title: "Le Mie Pattuglie", url: "/my-shifts-mobile", icon: Navigation, roles: ["guard"], }, ]; const registryItems = [ { title: "Guardie", url: "/guards", icon: Users, roles: ["admin", "coordinator"], }, { title: "Siti", url: "/sites", icon: MapPin, roles: ["admin", "coordinator", "client"], }, { title: "Clienti", url: "/customers", icon: Briefcase, roles: ["admin", "coordinator"], }, { title: "Servizi", url: "/services", icon: Briefcase, roles: ["admin", "coordinator"], }, { title: "Parco Automezzi", url: "/vehicles", icon: Car, roles: ["admin", "coordinator"], }, ]; const reportingItems = [ { title: "Report", url: "/reports", icon: BarChart3, roles: ["admin", "coordinator", "client"], }, ]; const systemItems = [ { title: "Notifiche", url: "/notifications", icon: Bell, roles: ["admin", "coordinator", "guard"], }, { title: "Utenti", url: "/users", icon: UserCog, roles: ["admin"], }, { title: "Parametri", url: "/parameters", icon: Settings, roles: ["admin", "coordinator"], }, ]; export function AppSidebar() { const { user } = useAuth(); const [location] = useLocation(); const filterItems = (items: typeof dashboardItems) => items.filter((item) => user && item.roles.includes(user.role)); const renderMenuItems = (items: typeof dashboardItems) => ( {items.map((item) => ( {item.title} ))} ); return ( VigilanzaTurni Sistema Gestione {/* Dashboard */} {filterItems(dashboardItems).length > 0 && ( {renderMenuItems(filterItems(dashboardItems))} )} {/* Planning Operativo - Creazione */} {filterItems(creationItems).length > 0 && ( Planning - Creazione {renderMenuItems(filterItems(creationItems))} )} {/* Planning Operativo - Consultazione */} {filterItems(consultationItems).length > 0 && ( Planning - Consultazione {renderMenuItems(filterItems(consultationItems))} )} {/* Viste Personali (Guard) */} {filterItems(personalItems).length > 0 && ( I Miei Turni {renderMenuItems(filterItems(personalItems))} )} {/* Anagrafica */} {filterItems(registryItems).length > 0 && ( Anagrafica {renderMenuItems(filterItems(registryItems))} )} {/* Report */} {filterItems(reportingItems).length > 0 && ( Reporting {renderMenuItems(filterItems(reportingItems))} )} {/* Sistema */} {filterItems(systemItems).length > 0 && ( Sistema {renderMenuItems(filterItems(systemItems))} )} {user?.firstName?.[0]}{user?.lastName?.[0]} {user?.firstName} {user?.lastName} {user?.role} window.location.href = '/api/logout'} data-testid="button-logout" > Esci ); }
Sistema Gestione
{user?.firstName} {user?.lastName}
{user?.role}