@hitachivantara/uikit-react-core
Version:
UI Kit Core React components.
24 lines (23 loc) • 816 B
JavaScript
import { useEffect } from "react";
//#region src/hooks/useClickOutside.ts
var useClickOutside = (ref, handler) => {
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]);
};
//#endregion
export { useClickOutside };