import { useState } from "react"; import { useLocation } from "wouter"; import { useTranslation } from "react-i18next"; import { useAuth } from "@/hooks/use-auth"; import { Avatar, AvatarFallback } from "@/components/ui/avatar"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Skeleton } from "@/components/ui/skeleton"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Bookmark, LogIn, LogOut, Trash2 } from "lucide-react"; import { cn } from "@/lib/utils"; function initials(name?: string | null): string { if (!name) return "?"; const parts = name.trim().split(/\s+/).filter(Boolean); if (parts.length === 0) return "?"; return parts .slice(0, 2) .map((p) => p[0]?.toUpperCase() ?? "") .join(""); } export function UserMenu() { const [location, navigate] = useLocation(); const { t } = useTranslation(); const { user, isLoading, isAuthenticated, isAdmin, tier, hasFeature, login, logout } = useAuth(); const [open, setOpen] = useState(false); const showWatchlist = hasFeature("watchlist"); const showTrash = hasFeature("trash"); const displayName = user?.name || user?.preferredUsername || "User"; if (isLoading) { return (
); } if (!isAuthenticated || !user) { return ( ); } function go(path: string) { setOpen(false); navigate(path); } return ( {displayName} {user.email && {user.email}} {isAdmin ? "admin" : tier} {(showWatchlist || showTrash) && ( <> {showWatchlist && ( go("/watchlist")}> {t("nav.watchlist")} )} {showTrash && ( go("/trash")}> {t("nav.trash")} )} )} {t("auth.signOut")} ); }