import { useEffect, useRef, useState } from "react"; import { Link } from "react-router"; import { Avatar } from "./Avatar.tsx"; import type { User } from "../model.ts"; export function UserMenu({ user }: { user: User }) { const [open, setOpen] = useState(false); const ref = useRef(null); useEffect(() => { if (!open) return; function onMouseDown(e: MouseEvent) { if (ref.current && !ref.current.contains(e.target as Node)) { setOpen(false); } } function onKeyDown(e: KeyboardEvent) { if (e.key === "Escape") setOpen(false); } document.addEventListener("mousedown", onMouseDown); document.addEventListener("keydown", onKeyDown); return () => { document.removeEventListener("mousedown", onMouseDown); document.removeEventListener("keydown", onKeyDown); }; }, [open]); return (
{open && (
setOpen(false)} > @{user.username} setOpen(false)} > Playlists
)}
); }