// frontend/src/components/Layout/Navigation.tsx - ELEGANT WHITE DESIGN import React, { useState, useEffect } from 'react'; import { useAuth } from '../../contexts/AuthContext'; import PillNav from '../PillNav/PillNav'; const Navigation: React.FC = () => { const { user, logout, hasRole } = useAuth(); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const [activePath, setActivePath] = useState('/'); const [isScrolled, setIsScrolled] = useState(false); useEffect(() => { setActivePath(window.location.pathname); const handleScroll = () => { setIsScrolled(window.scrollY > 10); }; window.addEventListener('scroll', handleScroll); return () => window.removeEventListener('scroll', handleScroll); }, []); const handleLogout = () => { logout(); setIsMobileMenuOpen(false); }; const toggleMobileMenu = () => { setIsMobileMenuOpen(!isMobileMenuOpen); }; const navigationItems = [ { path: '/', label: 'Dashboard', roles: ['admin', 'maintenance', 'user'] }, { path: '/shift-plans', label: 'Schichtpläne', roles: ['admin', 'maintenance', 'user'] }, { path: '/employees', label: 'Mitarbeiter', roles: ['admin', 'maintenance'] }, { path: '/help', label: 'Hilfe', roles: ['admin', 'maintenance', 'user'] }, { path: '/settings', label: 'Einstellungen', roles: ['admin', 'maintenance', 'user'] }, ]; const filteredNavigation = navigationItems.filter(item => hasRole(item.roles) ); const handlePillChange = (path: string) => { setActivePath(path); window.location.href = path; }; const pillNavItems = filteredNavigation.map(item => ({ id: item.path, label: item.label })); const styles = { header: { background: isScrolled ? 'rgba(251, 250, 246, 0.95)' : '#FBFAF6', backdropFilter: isScrolled ? 'blur(10px)' : 'none', borderBottom: isScrolled ? '1px solid rgba(22, 23, 24, 0.08)' : '1px solid transparent', color: '#161718', position: 'fixed' as const, top: 0, left: 0, right: 0, zIndex: 1000, transition: 'all 0.3s ease-in-out', boxShadow: isScrolled ? '0 2px 20px rgba(22, 23, 24, 0.06)' : 'none', }, headerContent: { maxWidth: '1200px', margin: '0 auto', padding: '0 2rem', display: 'flex', alignItems: 'center', justifyContent: 'space-between', height: '70px', transition: 'all 0.3s ease', }, logo: { flex: 1, display: 'flex', justifyContent: 'flex-start', }, logoH1: { margin: 0, fontSize: '1.5rem', fontWeight: 700, color: '#161718', letterSpacing: '-0.02em', }, pillNavWrapper: { display: 'flex', justifyContent: 'center', alignItems: 'center', flex: 2, minWidth: 0, }, pillNavContainer: { display: 'flex', justifyContent: 'center', maxWidth: '600px', width: '100%', margin: '0 auto', }, userMenu: { flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'flex-end', gap: '1.5rem', }, userInfo: { fontWeight: 500, color: '#666', fontSize: '0.9rem', textAlign: 'right' as const, }, logoutBtn: { background: 'transparent', color: '#161718', border: '1.5px solid #51258f', padding: '0.5rem 1.25rem', borderRadius: '8px', cursor: 'pointer', transition: 'all 0.2s ease-in-out', fontWeight: 500, fontSize: '0.9rem', whiteSpace: 'nowrap' as const, }, mobileMenuBtn: { display: 'none', background: 'none', border: 'none', color: '#161718', fontSize: '1.5rem', cursor: 'pointer', padding: '0.5rem', borderRadius: '4px', transition: 'background-color 0.2s ease', }, mobileNav: { display: isMobileMenuOpen ? 'flex' : 'none', flexDirection: 'column' as const, background: '#FBFAF6', padding: '1rem 0', borderTop: '1px solid rgba(22, 23, 24, 0.1)', boxShadow: '0 4px 20px rgba(22, 23, 24, 0.08)', }, mobileNavLink: { color: '#161718', textDecoration: 'none', padding: '1rem 2rem', borderBottom: '1px solid rgba(22, 23, 24, 0.05)', transition: 'all 0.2s ease', fontWeight: 500, }, mobileUserInfo: { padding: '1.5rem 2rem', borderTop: '1px solid rgba(22, 23, 24, 0.1)', marginTop: '0.5rem', color: '#666', }, mobileLogoutBtn: { background: '#51258f', color: 'white', border: 'none', padding: '0.75rem 1.5rem', borderRadius: '8px', cursor: 'pointer', marginTop: '1rem', width: '100%', fontWeight: 500, transition: 'all 0.2s ease', }, }; return (
{/* Logo - Links */}

Schichtenplaner

{/* PillNav - Zentriert */}
{/* User Menu - Rechts */}
{user?.firstname} {user?.lastname} ({user?.roles})
{/* Mobile Menu Button */}
{/* Mobile Navigation */} {isMobileMenuOpen && ( )}
); }; export default Navigation;