UNPKG

@nutui/nutui-react

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

53 lines (52 loc) 1.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return useClickAway; } }); var _react = require("react"); var _utils = require("../utils"); var getTargetElement = function getTargetElement(target) { var targetElement; if ((0, _utils.isFunction)(target)) { targetElement = target(); } else if ('current' in target) { targetElement = target.current; } else { targetElement = target; } return targetElement; }; function useClickAway(onClickAway, target) { var eventName = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 'click', useCapture = arguments.length > 3 ? arguments[3] : void 0, isListener = arguments.length > 4 ? arguments[4] : void 0, outerVar = arguments.length > 5 ? arguments[5] : void 0; var handler = function handler(event) { var targets = Array.isArray(target) ? target : [ target ]; if (targets.some(function(item) { var targetElement = getTargetElement(item); return !targetElement || targetElement.contains(event.target); })) { return; } if (outerVar) { onClickAway(); } }; (0, _react.useEffect)(function() { if (isListener) { window.addEventListener(eventName, handler, useCapture); } else { window.removeEventListener(eventName, handler, useCapture); } return function() { window.removeEventListener(eventName, handler, useCapture); }; }, [ target ]); }