import { useEffect, useRef, useState } from 'react'; import Avatar from './Avatar.jsx'; import { api } from '../utils/api.js'; import { useAuth } from '../contexts/AuthContext.jsx'; export default function UserProfilePopup({ user: profileUser, anchorEl, onClose, onDirectMessage }) { const { user: currentUser } = useAuth(); const popupRef = useRef(null); const [starting, setStarting] = useState(false); const isSelf = currentUser?.id === profileUser?.id; useEffect(() => { const handler = (e) => { if (popupRef.current && !popupRef.current.contains(e.target) && anchorEl && !anchorEl.contains(e.target)) { onClose(); } }; document.addEventListener('mousedown', handler); return () => document.removeEventListener('mousedown', handler); }, [anchorEl, onClose]); useEffect(() => { if (!popupRef.current || !anchorEl) return; const anchor = anchorEl.getBoundingClientRect(); const popup = popupRef.current; const viewportH = window.innerHeight; const viewportW = window.innerWidth; let top = anchor.bottom + 8; let left = anchor.left; if (top + 260 > viewportH) top = anchor.top - 268; if (left + 220 > viewportW) left = viewportW - 228; popup.style.top = `${top}px`; popup.style.left = `${left}px`; }, [anchorEl]); const handleDM = async () => { if (!onDirectMessage) return; setStarting(true); try { const { group } = await api.createGroup({ type: 'private', memberIds: [profileUser.id], isDirect: true, }); onClose(); onDirectMessage(group); } catch (e) { console.error('DM error', e); } finally { setStarting(false); } }; if (!profileUser) return null; return (
{profileUser.about_me}
)} {!isSelf && onDirectMessage && ( profileUser.allow_dm === 0 ? (DMs disabled by user
) : ( ) )}