import { useState } from 'react'; import { Outlet, Link, useLocation } from 'react-router-dom'; import { useAuth } from '../../shared/auth/AuthContext'; import { useSystem } from '../../shared/context/SystemContext'; import { Settings, LogOut, Box, ChevronDown, ChevronRight, Layers, User as UserIcon, Video, Shield, Info, Home, UserCog } from 'lucide-react'; import type { IModuleDefinition } from '../../core/types'; import './MainLayout.css'; interface MainLayoutProps { modulesList: IModuleDefinition[]; } export function MainLayout({ modulesList }: MainLayoutProps) { const location = useLocation(); const { user, logout } = useAuth(); const { modules } = useSystem(); const [expandedModules, setExpandedModules] = useState(['asset-management']); const isAdmin = user ? (['admin', 'supervisor'] as string[]).includes(user.role) : false; const checkRole = (requiredRoles: string[]) => { if (!user) return false; // Supervisor possesses all rights if (user.role === 'supervisor') return true; return requiredRoles.includes(user.role); }; const toggleModule = (moduleId: string) => { setExpandedModules(prev => prev.includes(moduleId) ? prev.filter(id => id !== moduleId) : [...prev, moduleId] ); }; const isModuleActive = (code: string) => modules[code]?.active; return (
{/* Dynamic Tabs based on Active Module 'top' routes */} {(() => { // Find active module based on current path const activeModule = modulesList.find(m => location.pathname.startsWith(m.basePath)); if (!activeModule) return null; const topRoutes = location.pathname.includes('/settings') ? [] : activeModule.routes.filter(r => r.position === 'top'); return topRoutes.map(route => ( {route.label} )); })()} {/* Asset Settings Specific Tabs */} {location.pathname.startsWith('/asset/settings') && (
{[ { id: 'basic', label: '기본 설정' }, { id: 'category', label: '카테고리 관리' }, { id: 'location', label: '설치 위치' }, { id: 'status', label: '자산 상태' }, { id: 'maintenance', label: '정비 구분' } ].map(tab => ( {tab.label} ))}
)}
); }