import { RefObject, useEffect, useRef } from "react"; export function useOnClickOutside( node: RefObject, handler: undefined | (() => void) ) { const handlerRef = useRef void)>(handler); useEffect(() => { handlerRef.current = handler; }, [handler]); useEffect(() => { const handleClickOutside = (e: MouseEvent) => { if (node.current?.contains(e.target as Node) ?? false) { return; } if (handlerRef.current) handlerRef.current(); }; document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("mousedown", handleClickOutside); }; }, [node]); }