UNPKG

@ntragas/pouncejstest

Version:

A collection of UI components from Panther labs

46 lines (37 loc) 1.26 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _react = _interopRequireDefault(require("react")); var useOutsideClick = function useOutsideClick(_ref) { var refs = _ref.refs, callback = _ref.callback, _ref$disabled = _ref.disabled, disabled = _ref$disabled === void 0 ? false : _ref$disabled; // Invoke a callback on clicks outside of those elements. We also add `capture` events to avoid // some race conditions on window-attached events var listener = _react.default.useCallback(function (event) { var isOutsideClick = refs.every(function (ref) { return ref.current && !ref.current.contains(event.target); }); if (isOutsideClick) { callback(event); } }, [callback].concat(refs)); _react.default.useEffect(function () { if (!disabled) { window.addEventListener('mousedown', listener, { capture: true }); } return function () { if (!disabled) { window.removeEventListener('mousedown', listener, { capture: true }); } }; }, [listener, disabled]); }; var _default = useOutsideClick; exports.default = _default;