import { useEffect, useRef, useState } from 'react'; import { Wrapper } from './styles'; import { Text } from '..'; type MenuProps = { className?: string; items: Array<{ icon: React.SVGProps; avoid?: boolean; label: string; action?: () => void; }>; component: string; }; const Menu = ({ items, component, className }: MenuProps) => { const [open, setOpen] = useState(false); const ref = useRef(null); useEffect(() => { const wrapper = ref.current; const openMenu = () => setOpen(true); const closeMenu = () => setOpen(false); (document.querySelector(`#${component}`) as HTMLElement)?.addEventListener( 'mouseenter', openMenu ); ref.current?.addEventListener('mouseleave', closeMenu); return () => { (document.querySelector( `#${component}` ) as HTMLElement)?.removeEventListener('mouseenter', openMenu); wrapper?.addEventListener('mouseleave', closeMenu); }; // eslint-disable-next-line }, [ref.current]); return ( {open && (
    {items.map(({ icon, label, avoid, action }) => ( // eslint-disable-next-line
  • { if (action) { setOpen(false); action(); } }} key={label} > {icon} {label}
  • ))}
)}
); }; export default Menu;