test-nut-ui
Version:
<p align="center"> <img alt="logo" src="https://img11.360buyimg.com/imagetools/jfs/t1/211965/25/7152/22022/61b16785E433119bb/aa41d7a9f7e823f3.png" width="150" style="margin-bottom: 10px;"> </p>
45 lines (44 loc) • 1.38 kB
JavaScript
import { useEffect } from "react";
import { i as isFunction } from "./index2.js";
var getTargetElement = function getTargetElement2(target) {
var targetElement;
if (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";
var useCapture = arguments.length > 3 ? arguments[3] : void 0;
var isListener = arguments.length > 4 ? arguments[4] : void 0;
var outerVar = arguments.length > 5 ? arguments[5] : void 0;
var handler = function handler2(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();
}
};
useEffect(function() {
if (isListener) {
window.addEventListener(eventName, handler, useCapture);
} else {
window.removeEventListener(eventName, handler, useCapture);
}
return function() {
window.removeEventListener(eventName, handler, useCapture);
};
}, [target]);
}
export {
useClickAway as u
};