import React from 'react'; import { LayoutDashboard, FileText, HardHat, DollarSign, AlertTriangle, FolderOpen, Menu, X, ChevronLeft, UserCircle, LogOut, Bell, CheckCircle2, Users, Calendar, BarChart3, ShoppingCart, ShieldCheck, Camera, FileBarChart, Truck, UserCheck, Box, Globe } from 'lucide-react'; import { UserRole, User } from '../types'; import { NotificationCenter } from './Collaboration'; interface LayoutProps { children: React.ReactNode; activeTab: string; setActiveTab: (tab: string) => void; onSwitchProject: () => void; projectName: string; user: User; onLogout: () => void; } const Layout: React.FC = ({ children, activeTab, setActiveTab, onSwitchProject, projectName, user, onLogout }) => { const [isMobileMenuOpen, setIsMobileMenuOpen] = React.useState(false); const navItems = [ { id: 'dashboard', label: 'Dashboard', icon: LayoutDashboard }, { id: 'master', label: 'Master Control', icon: FileText }, { id: 'site', label: 'Site Execution', icon: HardHat }, { id: 'finance', label: 'Financial Control', icon: DollarSign }, { id: 'analytics', label: 'Financial Analytics', icon: BarChart3 }, { id: 'procurement', label: 'Procurement', icon: ShoppingCart }, { id: 'equipment', label: 'Equipment', icon: Truck }, { id: 'labor', label: 'Labor & Attendance', icon: UserCheck }, { id: 'subcontractors', label: 'Sub-contractors', icon: Users }, { id: 'qc-safety', label: 'QC & Safety', icon: ShieldCheck }, { id: 'tasks', label: 'Tasks', icon: CheckCircle2 }, { id: 'gantt', label: 'Timeline', icon: Calendar }, { id: 'bim', label: 'BIM Viewer', icon: Box }, { id: 'photos', label: 'Photo Logs', icon: Camera }, { id: 'reports', label: 'Reports', icon: FileBarChart }, { id: 'client', label: 'Client Portal', icon: Globe }, { id: 'team', label: 'Team', icon: Users }, { id: 'documents', label: 'Documents', icon: FolderOpen }, ]; const getRoleLabel = (role: string) => { switch(role) { case 'DIRECTOR': return 'Project Director'; case 'MANAGER': return 'Project Manager'; case 'ENGINEER': return 'Site Engineer'; case 'ACCOUNTANT': return 'Accountant'; default: return role; } }; const renderNav = () => ( ); return (
{/* Mobile Header */}
Project Management AI {projectName}
{user.avatar && User}
{/* Sidebar Desktop */} {/* Sidebar Mobile */} {isMobileMenuOpen && ( )} {/* Main Content */}
{children}
); }; export default Layout;