"use client"; import { useEffect, useRef, useState, type MouseEvent } from "react"; import { businessDashboardUrl, customerDashboardUrl } from "@/lib/customer"; import { useSession } from "@/lib/session"; import { IconChevron, IconUser } from "./Icons"; const itemClass = "block w-full px-3 py-2.5 text-right text-sm text-ink transition-colors hover:bg-brand-soft hover:text-brand"; export function AccountMenu({ displayName, isWebsiteAdmin, onLogout, compact = false, }: { displayName: string; isWebsiteAdmin: boolean; onLogout: () => void; compact?: boolean; }) { const [open, setOpen] = useState(false); const [handoffBusy, setHandoffBusy] = useState(false); const menuRef = useRef(null); const { getAccessToken } = useSession(); useEffect(() => { if (!open) return; const onClickOutside = (event: Event) => { if (menuRef.current && event.target instanceof Node && !menuRef.current.contains(event.target)) { setOpen(false); } }; const onKeyDown = (event: KeyboardEvent) => { if (event.key === "Escape") setOpen(false); }; document.addEventListener("mousedown", onClickOutside); document.addEventListener("keydown", onKeyDown); return () => { document.removeEventListener("mousedown", onClickOutside); document.removeEventListener("keydown", onKeyDown); }; }, [open]); async function openBusinessDashboard(event: MouseEvent) { if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0) { return; } event.preventDefault(); if (handoffBusy) return; const baseUrl = businessDashboardUrl(); const popup = window.open("about:blank", "_blank"); setHandoffBusy(true); try { const token = getAccessToken(); const res = await fetch("/api/auth/handoff", { method: "POST", headers: token ? { Authorization: `Bearer ${token}` } : undefined, }); if (!res.ok) throw new Error("handoff failed"); const data = (await res.json()) as { ticket?: string }; const url = new URL(baseUrl); if (data.ticket) url.searchParams.set("handoff", data.ticket); if (popup) { popup.opener = null; popup.location.replace(url.toString()); } else { window.open(url.toString(), "_blank", "noopener,noreferrer"); } } catch { if (popup) popup.location.replace(baseUrl); else window.open(baseUrl, "_blank", "noopener,noreferrer"); } finally { setHandoffBusy(false); setOpen(false); } } return (
{open && (
setOpen(false)}> پروفایل من setOpen(false)}> سفارشات من {isWebsiteAdmin && ( {handoffBusy ? "در حال انتقال…" : "مدیریت وبسایت"} )}
)}
); }