@sanity/form-builder
Version:
Sanity form builder
30 lines (29 loc) • 1.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useOnClickOutside = useOnClickOutside;
var _react = require("react");
// This is a modified version of https://usehooks.com/useOnClickOutside that can take multiple element refs
// There is currently a bug in the `useClickOutside` hook from @sanity/ui that requires the refs to be passed as
// actual HTML elements instead of mutable refs. This requires the consumer to store elements in component state
// which adds quite a bit of cruft and isn't always feasible
function useOnClickOutside(refs, handler) {
(0, _react.useEffect)(() => {
var listener = event => {
if (refs.some(ref => {
var _ref$current;
return (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.contains(event.target);
})) {
return;
}
handler(event);
};
document.addEventListener('mousedown', listener);
document.addEventListener('touchstart', listener);
return () => {
document.removeEventListener('mousedown', listener);
document.removeEventListener('touchstart', listener);
};
}, [refs, handler]);
}