UNPKG

@sanity/form-builder

Version:
30 lines (29 loc) 1.19 kB
"use strict"; 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]); }