"use client"; import Link from "next/link"; import { useMemo, useCallback } from "react"; import { useQueryClient } from "@tanstack/react-query"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { buildLoginUrl, buildLogoutUrl } from "@/lib/auth/stytch-client"; import { useStytchConfig } from "@/lib/contexts/stytch-config-context"; import { usePermissions } from "@/lib/hooks/use-permissions"; import { useAuthContext } from "@/lib/contexts/auth-context"; import { resetCachedToken } from "@/lib/api/api/client/api-client"; function getInitials(name?: string) { if (!name) return "?"; const parts = name.trim().split(/\s+/); const first = parts[0]?.[0] || ""; const last = parts.length > 1 ? parts[parts.length - 1][0] : ""; return (first + last).toUpperCase(); } export function UserMenu() { const { profile, isInitialized } = usePermissions(); const authContext = useAuthContext(); const queryClient = useQueryClient(); const stytchConfig = useStytchConfig(); const loginHref = useMemo(() => { return buildLoginUrl(stytchConfig); }, [stytchConfig]); const logoutHref = useMemo(() => { return buildLogoutUrl(stytchConfig); }, [stytchConfig]); const handleLogout = useCallback(() => { // Clear all client-side state authContext?.clearAuthState(); queryClient.clear(); resetCachedToken(); // Navigate to logout endpoint window.location.href = logoutHref; }, [authContext, queryClient, logoutHref]); if (!isInitialized) { return (
); } if (!profile) { return ( ); } const display = profile.name || profile.email || "Account"; const initials = getInitials(profile.name || profile.email); return ( Dashboard Log out ); }