// Created on savesnippets.com ยท https://savesnippets.com/rYSaK2pvEvWgvP import { useEffect, useRef, RefObject } from 'react'; export function useClickOutside( onOutside: (e: MouseEvent | TouchEvent) => void ): RefObject { const ref = useRef(null); useEffect(() => { const handler = (e: MouseEvent | TouchEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) { onOutside(e); } }; document.addEventListener('mousedown', handler); document.addEventListener('touchstart', handler); return () => { document.removeEventListener('mousedown', handler); document.removeEventListener('touchstart', handler); }; }, [onOutside]); return ref; } function Dropdown() { const [open, setOpen] = useState(false); const ref = useClickOutside(() => setOpen(false)); return
{open && }
; }