/** * Header Component * Main navigation header for authenticated users * Includes logo, navigation links, and user menu */ 'use client'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; import { useAuth } from '@/lib/auth/AuthContext'; import { useLogout } from '@/lib/api/hooks/useAuth'; 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'; /** * 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 { user } = useAuth(); const { mutate: logout, isPending: isLoggingOut } = useLogout(); const handleLogout = () => { logout(); }; return ( {/* Logo */} FastNext {/* Navigation Links */} Home {user?.is_superuser && Admin} {/* Right side - Theme toggle and user menu */} {getUserInitials(user?.first_name, user?.last_name)} {user?.first_name} {user?.last_name} {user?.email} Profile Settings {user?.is_superuser && ( Admin Panel )} {isLoggingOut ? 'Logging out...' : 'Log out'} ); }
{user?.first_name} {user?.last_name}
{user?.email}