import React from "react"; | |
/** | |
* Hook to call a callback function when an element is clicked outside | |
* @param callback The callback function to call when the element is clicked outside | |
*/ | |
export const useClickOutsideElement = <T extends HTMLElement>( | |
callback: () => void, | |
) => { | |
const ref = React.useRef<T>(null); | |
React.useEffect(() => { | |
const handleClickOutside = (event: MouseEvent) => { | |
if (ref.current && !ref.current.contains(event.target as Node)) { | |
callback(); | |
} | |
}; | |
document.addEventListener("click", handleClickOutside); | |
return () => document.removeEventListener("click", handleClickOutside); | |
}, []); | |
return ref; | |
}; | |