@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
26 lines (25 loc) • 929 B
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const React = require("react");
const useClickOutside = (ref, handler) => {
React.useEffect(() => {
const listener = (event) => {
const el = ref?.current;
const isKeyUp = event.type === "keyup";
const isEscape = event.key === "Escape";
if (!el || el.contains(event?.target || null)) {
return {};
}
return isKeyUp ? isEscape ? handler(event) : null : handler(event);
};
document.addEventListener("click", listener);
document.addEventListener("touchstart", listener);
document.addEventListener("keyup", listener);
return () => {
document.removeEventListener("click", listener);
document.removeEventListener("touchstart", listener);
document.removeEventListener("keyup", listener);
};
}, [ref, handler]);
};
exports.useClickOutside = useClickOutside;