"use client"; import { BadgeCheck, Bird, Bomb, ChevronsUpDown, FileTextIcon, LogOut, Users2 } from "lucide-react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useState } from "react"; 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 type { User } from "@/payload-types"; import { ImpersonationModal } from "@/components/frontend/impersonation/ImpersonationModal"; import { getImpersonationUsers } from "@/app/(frontend)/impersonate/actions"; export function NavUser({ user, showCallsign = false, canImpersonate = false, }: { user: { displayName: string; username: string; avatar: string; }; showCallsign?: boolean; canImpersonate?: boolean; }) { const { isMobile } = useSidebar(); const router = useRouter(); const [loggingOut, setLoggingOut] = useState(false); const [showImpersonationModal, setShowImpersonationModal] = useState(false); const [impersonationUsers, setImpersonationUsers] = useState([]); const [loadingImpersonationUsers, setLoadingImpersonationUsers] = useState(false); const primaryLine = showCallsign ? user.username : user.displayName; const secondaryLine = showCallsign ? user.displayName : user.username; const handleLogout = async () => { setLoggingOut(true); try { await fetch("/api/users/logout", { method: "POST" }); } catch { // ignore network errors; redirect anyway } finally { setLoggingOut(false); } router.push("/"); router.refresh(); }; const handleOpenImpersonationModal = async () => { setLoadingImpersonationUsers(true); try { const users = await getImpersonationUsers(); setImpersonationUsers(users); } catch (error) { console.error("Failed to load impersonation users:", error); } finally { setLoadingImpersonationUsers(false); } setShowImpersonationModal(true); }; const handleImpersonationStarted = async () => { router.push("/"); router.refresh(); }; return ( CN
{primaryLine} {secondaryLine}
{user.username.substring(0, 2).toUpperCase()}
{primaryLine} {secondaryLine}
Service Record Flight Simulator Minefield Clearance Account {canImpersonate && ( Impersonate )} handleLogout()}> {loggingOut ? "Logging out..." : "Log out"}
); }