@grafana/ui
Version:
Grafana Components Library
43 lines (38 loc) • 1.24 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
;
function ClickOutsideWrapper({
includeButtonPress = true,
parent = window,
useCapture = false,
onClick,
children
}) {
const wrapperRef = React.useRef(null);
const onOutsideClick = React.useCallback(
(event) => {
const domNode = wrapperRef.current;
if (!domNode || event.target instanceof Node && !domNode.contains(event.target)) {
onClick();
}
},
[onClick]
);
React.useEffect(() => {
parent.addEventListener("click", onOutsideClick, useCapture);
if (includeButtonPress) {
parent.addEventListener("keyup", onOutsideClick, useCapture);
}
return () => {
parent.removeEventListener("click", onOutsideClick, useCapture);
if (includeButtonPress) {
parent.removeEventListener("keyup", onOutsideClick, useCapture);
}
};
}, [includeButtonPress, onOutsideClick, parent, useCapture]);
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: wrapperRef, children });
}
exports.ClickOutsideWrapper = ClickOutsideWrapper;
//# sourceMappingURL=ClickOutsideWrapper.cjs.map