import React, { useState } from 'react'; import { NavLink } from 'react-router-dom'; import { useSessionStore } from '../../core/session/sessionStore'; import { useMetadata } from '../../services/hooks/useMetadata'; import { SYSTEM_MODULES } from '../../core/modules/registry'; import { SYSTEM_ROLES } from '../../core/permissions/types'; import { LayoutDashboard, Workflow, Users, ShoppingBag, Boxes, BadgeDollarSign, UserCheck, MessageSquareText, Headset, CheckSquare, Globe, Megaphone, BarChart3, Cpu, Sparkles, Grid, Settings, Truck, ChevronLeft, ChevronRight, } from 'lucide-react'; const ICON_MAP: Record = { LayoutDashboard: , Workflow: , Users: , ShoppingBag: , Boxes: , Truck: , BadgeDollarSign: , UserCheck: , MessageSquareText: , Headset: , CheckSquare: , Globe: , Megaphone: , BarChart3: , Cpu: , Sparkles: , Grid: , Settings: , }; export interface SidebarProps { isTabletCompact?: boolean; } export const Sidebar: React.FC = ({ isTabletCompact = false }) => { const [userCollapsed, setUserCollapsed] = useState(null); const collapsed = userCollapsed !== null ? userCollapsed : isTabletCompact; const { currentRoleId, hasModulePermission } = useSessionStore(); const { entities } = useMetadata(); const customEntities = entities.filter((e) => !e.isSystem); const role = SYSTEM_ROLES[currentRoleId]; // Filter modules by role permissions (strict deny-by-default via sessionStore) const visibleModules = SYSTEM_MODULES.filter((m) => hasModulePermission(m.id)); return ( ); };