@readr-media/react-election-widgets
Version:
34 lines (29 loc) • 772 B
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useClickOutside;
var _react = require("react");
/**
*
* @param {React.MutableRefObject<null | HTMLElement>} ref
* @param {Function} callback
* @returns {void}
*/
function useClickOutside(ref, callback) {
(0, _react.useEffect)(() => {
/** @type {EventListener}*/
const handleClickOutside = event => {
const targetNode =
/** @type {Node} */
event.target;
if (ref.current && !ref.current.contains(targetNode)) {
callback();
}
};
document.addEventListener('click', handleClickOutside, true);
return () => {
document.removeEventListener('click', handleClickOutside, true);
};
}, [ref, callback]);
}