diff --git a/src/components/UserMenu.tsx b/src/components/UserMenu.tsx index 3a31e75..e891244 100644 --- a/src/components/UserMenu.tsx +++ b/src/components/UserMenu.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useState, useEffect } from 'react'; +import { useState, useEffect, useRef } from 'react'; interface UserInfo { username?: string; @@ -10,6 +10,8 @@ interface UserInfo { 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') @@ -23,6 +25,16 @@ export function UserMenu() { .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 (
@@ -43,23 +55,39 @@ export function UserMenu() { const displayName = user.username || (user.did ? `${user.did.slice(0, 12)}...` : 'User'); return ( -
-
-
+
+
- + + {open && ( +
+
+
{displayName}
+ {user.did && ( +
{user.did}
+ )} +
+ +
+ )}
); }