UNPKG

ahooks

Version:
58 lines (57 loc) • 2.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _useLatest = _interopRequireDefault(require("../useLatest")); var _domTarget = require("../utils/domTarget"); var _getDocumentOrShadow = _interopRequireDefault(require("../utils/getDocumentOrShadow")); var _useEffectWithTarget = _interopRequireDefault(require("../utils/useEffectWithTarget")); var normalizeOptions = function normalizeOptions(options) { var _a, _b; if (typeof options === 'string' || Array.isArray(options)) { return { eventName: options, enabled: true }; } return { eventName: (_a = options.eventName) !== null && _a !== void 0 ? _a : 'click', enabled: (_b = options.enabled) !== null && _b !== void 0 ? _b : true }; }; var useClickAway = function useClickAway(onClickAway, target) { var eventNameOrOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'click'; var onClickAwayRef = (0, _useLatest["default"])(onClickAway); var _normalizeOptions = normalizeOptions(eventNameOrOptions), eventName = _normalizeOptions.eventName, enabled = _normalizeOptions.enabled; (0, _useEffectWithTarget["default"])(function () { if (!enabled) { return; } var handler = function handler(event) { var targets = Array.isArray(target) ? target : [target]; if (targets.some(function (item) { var targetElement = (0, _domTarget.getTargetElement)(item); return !targetElement || targetElement.contains(event.target); })) { return; } onClickAwayRef.current(event); }; var documentOrShadow = (0, _getDocumentOrShadow["default"])(target); var eventNames = Array.isArray(eventName) ? eventName : [eventName]; eventNames.forEach(function (event) { documentOrShadow.addEventListener(event, handler); }); return function () { eventNames.forEach(function (event) { documentOrShadow.removeEventListener(event, handler); }); }; }, [].concat((0, _toConsumableArray2["default"])(Array.isArray(eventName) ? eventName : [eventName]), [enabled]), target); }; var _default = exports["default"] = useClickAway;