import { useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { useAuthStore } from '@/stores/auth'; import { useUIStore } from '@/stores/ui'; import { useTranslation } from '@/hooks/useTranslation'; import { EmailVerificationBadge } from '@/features/auth/components/EmailVerificationBadge'; import { NotificationMenu } from '@/components/notifications/NotificationMenu'; import { GlobalSearchBar } from '@/components/search/GlobalSearchBar'; import { Button } from '@/components/ui/button'; import { FocusTrap } from '@/components/ui/focus-trap'; import { Menu, X, User, Settings, LogOut, Moon, Sun, Monitor, Search, } from 'lucide-react'; export function Header() { const [isUserMenuOpen, setIsUserMenuOpen] = useState(false); const [isMobileSearchOpen, setIsMobileSearchOpen] = useState(false); const { user, logout } = useAuthStore(); const { theme, setTheme, sidebarOpen, setSidebarOpen } = useUIStore(); const { t } = useTranslation(); const navigate = useNavigate(); const handleLogout = async () => { await logout(); navigate('/login'); }; const toggleTheme = () => { const newTheme = theme === 'light' ? 'dark' : theme === 'dark' ? 'system' : 'light'; setTheme(newTheme); }; const getThemeIcon = () => { switch (theme) { case 'light': return ; case 'dark': return ; default: return ; } }; return (
{/* Main header row */}
{/* Logo et menu mobile */}
Veza
{/* Barre de recherche (desktop) */}
{/* Mobile search button */} {/* Actions utilisateur */}
{/* Notifications */} {/* Thème */} {/* Menu utilisateur */}
{isUserMenuOpen && ( setIsUserMenuOpen(false)} >
{user?.username}
{/* T0190: Afficher badge si email non vérifié */} {user && !user.is_verified && ( )}
setIsUserMenuOpen(false)} role="menuitem" >
)}
{/* Mobile search bar */} {isMobileSearchOpen && (
setIsMobileSearchOpen(false)} />
)}
); }