import { useEffect, useRef, useState } from 'react'; import { WechatAccountButton } from './WechatAccountButton'; const HEADER_POPOVER_OPEN_EVENT = 'tkmind:header-popover-open'; const HEADER_POPOVER_ID = 'header-more-menu'; type MenuItem = { id: string; label: string; onClick: () => void; disabled?: boolean; danger?: boolean; }; export function ChatHeaderMoreMenu({ items, returnTo, showWechat = false, }: { items: MenuItem[]; returnTo?: string; showWechat?: boolean; }) { const [open, setOpen] = useState(false); const wrapRef = useRef(null); useEffect(() => { if (!open) return; const handleClick = (event: MouseEvent) => { if (wrapRef.current && !wrapRef.current.contains(event.target as Node)) { setOpen(false); } }; const handleKey = (event: KeyboardEvent) => { if (event.key === 'Escape') setOpen(false); }; document.addEventListener('click', handleClick); document.addEventListener('keydown', handleKey); return () => { document.removeEventListener('click', handleClick); document.removeEventListener('keydown', handleKey); }; }, [open]); useEffect(() => { const handleOtherPopoverOpen = (event: Event) => { const detail = (event as CustomEvent<{ id?: string }>).detail; if (detail?.id && detail.id !== HEADER_POPOVER_ID) { setOpen(false); } }; window.addEventListener(HEADER_POPOVER_OPEN_EVENT, handleOtherPopoverOpen); return () => window.removeEventListener(HEADER_POPOVER_OPEN_EVENT, handleOtherPopoverOpen); }, []); return (
{open && (
{items.map((item) => ( ))} {showWechat && ( <>
setOpen(false)} />
)}
)}
); }