@motor-js/cli
Version:
CLI tool for generating Qlik Sense Mashups
33 lines (30 loc) • 774 B
JavaScript
import { useCallback, useEffect, useRef } from "react";
const useClickOutside = (onClose) => {
const ref = useRef();
const escapeListener = useCallback(
(e) => {
if (e.key === "Escape") {
onClose();
}
},
[onClose]
);
const clickListener = useCallback(
(e) => {
if (!ref.current?.contains(e.target)) {
onClose?.();
}
},
[onClose]
);
useEffect(() => {
document.addEventListener("click", clickListener);
document.addEventListener("keyup", escapeListener);
return () => {
document.removeEventListener("click", clickListener);
document.removeEventListener("keyup", escapeListener);
};
}, [escapeListener, clickListener]);
return ref;
};
export default useClickOutside;