@storm-stack/hooks
Version:
A collection of React hooks used by Storm Software in various client libraries and applications.
29 lines (28 loc) • 786 B
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useClickAway = useClickAway;
var _react = require("react");
function useClickAway(cb) {
const ref = (0, _react.useRef)(null);
const refCb = (0, _react.useRef)(cb);
(0, _react.useLayoutEffect)(() => {
refCb.current = cb;
});
(0, _react.useEffect)(() => {
const handler = e => {
const element = ref.current;
if (element && !element.contains(e.target)) {
refCb.current(e);
}
};
document.addEventListener("mousedown", handler);
document.addEventListener("touchstart", handler);
return () => {
document.removeEventListener("mousedown", handler);
document.removeEventListener("touchstart", handler);
};
}, []);
return ref;
}