'use client'; import { useState, useEffect, useRef } from 'react'; interface UserInfo { username?: string; did?: string; } export function UserMenu() { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); const [open, setOpen] = useState(false); const ref = useRef(null); useEffect(() => { fetch('/api/me') .then((r) => r.json()) .then((data) => { if (data.authenticated && data.user) { setUser(data.user); } }) .catch(() => {}) .finally(() => setLoading(false)); }, []); useEffect(() => { function handleClick(e: MouseEvent) { if (ref.current && !ref.current.contains(e.target as Node)) { setOpen(false); } } document.addEventListener('click', handleClick); return () => document.removeEventListener('click', handleClick); }, []); if (loading) { return (
); } if (!user) { return ( Sign In ); } const displayName = user.username || (user.did ? `${user.did.slice(0, 12)}...` : 'User'); return (
{open && (
{displayName}
{user.did && (
{user.did}
)}
)}
); }