import { useEffect, useRef, useState } from 'react' import { createPortal } from 'react-dom' import { Link, useNavigate } from '@tanstack/react-router' import { ChevronDown, LogOut, Settings, UserRound, X } from 'lucide-react' import { cn } from '../../lib/utils' import { signOut } from '../../lib/auth-client' import { useAuth } from '../../context/AuthProvider' import { useIsMobile } from '../../hooks/useIsMobile' import { Avatar } from '../ui' const itemClass = 'flex w-full items-center gap-2.5 rounded-lg px-3 py-2 text-left text-sm font-medium text-primary transition-colors hover:bg-primary-soft' export function UserMenu() { const { user } = useAuth() const isMobile = useIsMobile() const [open, setOpen] = useState(false) const ref = useRef(null) const navigate = useNavigate() useEffect(() => { if (!open || isMobile) return const handlePointerDown = (event: PointerEvent) => { if (ref.current && !ref.current.contains(event.target as Node)) setOpen(false) } document.addEventListener('pointerdown', handlePointerDown) return () => document.removeEventListener('pointerdown', handlePointerDown) }, [open, isMobile]) useEffect(() => { if (isMobile && open) { document.body.style.overflow = 'hidden' return () => { document.body.style.overflow = '' } } }, [isMobile, open]) useEffect(() => { if (!open) return const handleKeyDown = (event: KeyboardEvent) => { if (event.key === 'Escape') setOpen(false) } document.addEventListener('keydown', handleKeyDown) return () => document.removeEventListener('keydown', handleKeyDown) }, [open]) const handleSignOut = async () => { setOpen(false) await signOut({ fetchOptions: { headers: { 'Cache-Control': 'no-cache' } } }) navigate({ to: '/login' }) } return (
{isMobile ? open ? createPortal(
, document.body, ) : null : open ? (

{user?.name ?? 'Usuario'}

{user?.email}

setOpen(false)} className={itemClass}> Mi perfil setOpen(false)} className={itemClass}> Ajustes
) : null}
) }