Midday / apps /website /src /components /motion-primitives /useClickOutside.tsx
Jules
Final deployment with all fixes and verified content
c09f67c
import { type RefObject, useEffect } from "react";
function useClickOutside<T extends HTMLElement>(
ref: RefObject<T>,
handler: (event: MouseEvent | TouchEvent) => void,
): void {
useEffect(() => {
const handleClickOutside = (event: MouseEvent | TouchEvent) => {
if (!ref || !ref.current || ref.current.contains(event.target as Node)) {
return;
}
handler(event);
};
document.addEventListener("mousedown", handleClickOutside);
document.addEventListener("touchstart", handleClickOutside);
return () => {
document.removeEventListener("mousedown", handleClickOutside);
document.removeEventListener("touchstart", handleClickOutside);
};
}, [ref, handler]);
}
export default useClickOutside;