import React, { useState } from 'react'; import { Outlet, Link, useLocation, useNavigate } from 'react-router-dom'; import { Home, TrendingUp, Package, Settings, Menu, X, LogOut, User, Bell, ChevronDown, BarChart3, Building } from 'lucide-react'; import { useSelector, useDispatch } from 'react-redux'; import { RootState } from '../../store'; import { logout } from '../../store/slices/authSlice'; import { TenantSelector } from '../navigation/TenantSelector'; import { usePermissions } from '../../hooks/usePermissions'; interface LayoutProps { // No props needed - using React Router } interface NavigationItem { id: string; label: string; icon: React.ComponentType<{ className?: string }>; href: string; requiresRole?: string[]; } const Layout: React.FC = () => { const location = useLocation(); const navigate = useNavigate(); const dispatch = useDispatch(); const { user } = useSelector((state: RootState) => state.auth); const { hasRole } = usePermissions(); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const [isUserMenuOpen, setIsUserMenuOpen] = useState(false); const navigation: NavigationItem[] = [ { id: 'dashboard', label: 'Dashboard', icon: Home, href: '/app/dashboard' }, { id: 'operations', label: 'Operaciones', icon: Package, href: '/app/operations' }, { id: 'analytics', label: 'Analytics', icon: BarChart3, href: '/app/analytics', requiresRole: ['admin', 'manager'] }, { id: 'settings', label: 'Configuración', icon: Settings, href: '/app/settings' }, ]; // Filter navigation based on user role const filteredNavigation = navigation.filter(item => { if (!item.requiresRole) return true; return item.requiresRole.some(role => hasRole(role)); }); const handleLogout = () => { if (window.confirm('¿Estás seguro de que quieres cerrar sesión?')) { dispatch(logout()); localStorage.removeItem('auth_token'); localStorage.removeItem('user_data'); localStorage.removeItem('selectedTenantId'); navigate('/'); } }; const isActiveRoute = (href: string): boolean => { if (href === '/app/dashboard') { return location.pathname === '/app/dashboard' || location.pathname === '/app'; } return location.pathname.startsWith(href); }; return (
{/* Top Navigation Bar */} {/* Main Content */}
{/* Click outside handler for dropdowns */} {(isUserMenuOpen || isMobileMenuOpen) && (
{ setIsUserMenuOpen(false); setIsMobileMenuOpen(false); }} /> )}
); }; export default Layout;