/** * Header Component * Main navigation header for authenticated users * Includes logo, navigation links, and user menu */ 'use client'; import Image from 'next/image'; import { Link } from '@/lib/i18n/routing'; import { usePathname } from '@/lib/i18n/routing'; import { useAuth } from '@/lib/auth/AuthContext'; import { useLogout } from '@/lib/api/hooks/useAuth'; import { useTranslations } from 'next-intl'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { Button } from '@/components/ui/button'; import { Avatar, AvatarFallback } from '@/components/ui/avatar'; import { Settings, LogOut, User, Shield } from 'lucide-react'; import { cn } from '@/lib/utils'; import { ThemeToggle } from '@/components/theme'; import { LocaleSwitcher } from '@/components/i18n'; /** * Get user initials for avatar */ function getUserInitials(firstName?: string | null, lastName?: string | null): string { if (!firstName) return 'U'; const first = firstName.charAt(0).toUpperCase(); const last = lastName?.charAt(0).toUpperCase() || ''; return `${first}${last}`; } /** * Navigation link component */ function NavLink({ href, children, exact = false, }: { href: string; children: React.ReactNode; exact?: boolean; }) { const pathname = usePathname(); const isActive = exact ? pathname === href : pathname.startsWith(href); return ( {children} ); } export function Header() { const t = useTranslations('navigation'); const { user } = useAuth(); const { mutate: logout, isPending: isLoggingOut } = useLogout(); const handleLogout = () => { logout(); }; return ( {/* Logo */} Syndarix {/* Navigation Links */} {t('home')} {user?.is_superuser && {t('admin')}} {/* Right side - Theme toggle, locale switcher, and user menu */} {getUserInitials(user?.first_name, user?.last_name)} {user?.first_name} {user?.last_name} {user?.email} {t('profile')} {t('settings')} {user?.is_superuser && ( {t('adminPanel')} )} {isLoggingOut ? t('loggingOut') : t('logout')} ); }
{user?.first_name} {user?.last_name}
{user?.email}