'use client'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import Link from 'next/link'; import { Settings, AlertTriangle, Building2, CreditCard, User, LogOut, ChevronDown, } from 'lucide-react'; import { useAuth } from '@/lib/hooks/useAuth'; import { authApi } from '@/lib/api/auth'; import type { SubscriptionAlertData } from '@/types/subscription'; function warningTooltip(data: SubscriptionAlertData | null): string { if (!data?.showWarning) return ''; if (data.noActiveSubscription) return 'No active subscription — review Subscriptions'; if (data.trialExpired) return 'Trial ended — review Subscriptions'; if (data.trialEndingSoon) return 'Trial ending soon — review Subscriptions'; if (data.seatsLow) return 'Seats running low — review Subscriptions'; return 'Review Subscriptions'; } export function DashboardAccountMenu() { const { user, currentOrganization, logout } = useAuth(); const [open, setOpen] = useState(false); const menuRef = useRef(null); const [alert, setAlert] = useState(null); const isOwner = currentOrganization?.isOwner ?? false; useEffect(() => { const onDocClick = (e: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(e.target as Node)) { setOpen(false); } }; document.addEventListener('mousedown', onDocClick); return () => document.removeEventListener('mousedown', onDocClick); }, []); useEffect(() => { if (!isOwner || !currentOrganization) { setAlert(null); return; } let cancelled = false; void (async () => { try { const res = await authApi.getSubscriptionAlert(); if (!cancelled && res.success) setAlert(res.data); } catch { if (!cancelled) setAlert(null); } })(); return () => { cancelled = true; }; }, [isOwner, currentOrganization?.id]); const showWarning = Boolean(isOwner && alert?.showWarning); const tooltip = useMemo(() => warningTooltip(alert), [alert]); const handleLogout = useCallback(() => { setOpen(false); void logout(); }, [logout]); return (
{open && (

Signed in

{user?.email}

{currentOrganization?.name}

setOpen(false)} > Switch organization {isOwner && ( setOpen(false)} > Subscriptions )} setOpen(false)} > Account
)}
); }