/** * 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 { useAuthStore } from '@/stores/authStore'; 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'; /** * 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 } = useAuthStore(); const { mutate: logout, isPending: isLoggingOut } = useLogout(); const handleLogout = () => { logout(); }; return (
{/* Logo */}
FastNext {/* Navigation Links */}
{/* Right side - User menu */}

{user?.first_name} {user?.last_name}

{user?.email}

Profile Settings {user?.is_superuser && ( Admin Panel )} {isLoggingOut ? 'Logging out...' : 'Log out'}
); }