'use client'; import { BadgeCheck, Bell, ChevronsUpDown, CreditCard, LogOut, Sparkles, } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { useQueryClient } from '@tanstack/react-query'; import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar, } from '@/components/ui/sidebar'; import { authService } from '@/services/api/auth.service'; import { useAppStore } from '@/store/app.store'; import { useAuthStore } from '@/store/auth.store'; import { ROUTES } from '@/utils/routes'; import { useState } from 'react'; export function NavUser({ user, }: { user: { name: string; email: string; avatar: string; }; }) { const { isMobile } = useSidebar(); const router = useRouter(); const queryClient = useQueryClient(); const clearAuth = useAuthStore((state) => state.logout); const clearApp = useAppStore((state) => state.clear); const [isLoggingOut, setIsLoggingOut] = useState(false); const handleLogout = async () => { if (isLoggingOut) return; setIsLoggingOut(true); try { await authService.logout(); } catch { // Local logout should still complete if the server session is already invalid. } finally { queryClient.clear(); clearAuth(); clearApp(); router.replace(ROUTES.LOGIN); setIsLoggingOut(false); } }; return ( CN
{user.name} {user.email}
CN
{user.name} {user.email}
Upgrade to Pro Account Billing Notifications { event.preventDefault(); handleLogout(); }} disabled={isLoggingOut} > {isLoggingOut ? 'Logging out' : 'Log out'}
); }