// components/user-nav.tsx "use client"; import { useEffect, useState } from "react"; import { useAuth } from "@/hooks/use-auth"; import { getMe, User } from "@/lib/api"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Button } from "@/components/ui/button"; import { UserAvatar } from "./user-avatar"; import { Skeleton } from "./ui/skeleton"; import Link from "next/link"; import { LogOut, User as UserIcon } from "lucide-react"; import { useRouter } from "next/navigation"; export function UserNav() { const { token, setToken } = useAuth(); const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); const { replace } = useRouter(); useEffect(() => { if (token) { setLoading(true); getMe(token) .then(setUser) .catch(() => { // Invalid token, log the user out setToken(null); }) .finally(() => setLoading(false)); } else { setLoading(false); } }, [token, setToken]); const handleLogout = () => { setToken(null); replace("/login"); }; if (loading) { return ; } if (!token || !user) { // Render nothing if the user is not logged in return null; } return (

{user.displayName || user.username}

@{user.username}

Profile Log out
); }