"use client"; import { useEffect, useRef, useState } from "react"; import { useAuth } from "@/app/providers/auth-provider"; import { createAuthHandoff } from "@/lib/meshkee/api"; import { displayName } from "@/lib/meshkee/format"; import { businessDashboardUrl, customerLoginUrl, customerProfileUrl, } from "@/lib/meshkee/urls"; export function UserMenu() { const { user, isAuthenticated, isWebsiteAdmin, logout, getAccessToken } = useAuth(); const [open, setOpen] = useState(false); const [handingOff, setHandingOff] = useState(false); const rootRef = useRef(null); useEffect(() => { const onClick = (event: MouseEvent) => { if (!rootRef.current?.contains(event.target as Node)) setOpen(false); }; document.addEventListener("mousedown", onClick); return () => document.removeEventListener("mousedown", onClick); }, []); if (!isAuthenticated || !user) { return ( ); } const name = displayName(user); async function openBusinessAdmin(event: React.MouseEvent) { if ( event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0 ) { return; } event.preventDefault(); const target = businessDashboardUrl(); const popup = window.open("about:blank", "_blank"); setHandingOff(true); try { const token = getAccessToken(); const { ticket } = await createAuthHandoff(token || ""); const url = new URL(target); if (ticket) url.searchParams.set("handoff", 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(target); else window.open(target, "_blank", "noopener,noreferrer"); } finally { setHandingOff(false); setOpen(false); } } return (
{open ? (

{name} عزیز

setOpen(false)}> پروفایل من {isWebsiteAdmin ? ( void openBusinessAdmin(event)} > {handingOff ? "در حال انتقال…" : "مدیریت وبسایت"} ) : null}
) : null}
); } function UserIcon() { return ( ); }