import { Link } from "@tanstack/react-router"; import { useEffect, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import { useAuth, useLogout } from "../hooks/useAuth"; import { usePublicProfile } from "../hooks/useProfile"; import { LucideIcon } from "../lib/iconData"; export function UserMenu() { const { t } = useTranslation(); const [open, setOpen] = useState(false); const menuRef = useRef(null); const { logout } = useLogout(); const { data: auth } = useAuth(); const userId = auth?.user?.id ? Number(auth.user.id) : null; const { data: profile } = usePublicProfile(userId); const avatarUrl = profile?.avatarImageUrl; useEffect(() => { if (!open) return; function handleClick(e: MouseEvent) { if (menuRef.current && !menuRef.current.contains(e.target as Node)) { setOpen(false); } } document.addEventListener("mousedown", handleClick); return () => document.removeEventListener("mousedown", handleClick); }, [open]); return (
{open && (
{/* Admin link — only visible to admin users */} {auth?.user?.isAdmin && ( <> setOpen(false)} className="flex items-center gap-2 px-3 py-2 text-sm text-gray-700 hover:bg-gray-50 transition-colors" > Admin
)} setOpen(false)} className="flex items-center gap-2 px-3 py-2 text-sm text-gray-700 hover:bg-gray-50 transition-colors" > {t("nav.profile")} setOpen(false)} className="flex items-center gap-2 px-3 py-2 text-sm text-gray-700 hover:bg-gray-50 transition-colors" > {t("nav.settings")}
)}
); }