@grafana/ui
Version:
Grafana Components Library
39 lines (36 loc) • 1.13 kB
JavaScript
import { jsx } from 'react/jsx-runtime';
import { useRef, useCallback, useEffect } from 'react';
;
function ClickOutsideWrapper({
includeButtonPress = true,
parent = window,
useCapture = false,
onClick,
children
}) {
const wrapperRef = useRef(null);
const onOutsideClick = useCallback(
(event) => {
const domNode = wrapperRef.current;
if (!domNode || event.target instanceof Node && !domNode.contains(event.target)) {
onClick();
}
},
[onClick]
);
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__ */ jsx("div", { ref: wrapperRef, children });
}
export { ClickOutsideWrapper };
//# sourceMappingURL=ClickOutsideWrapper.mjs.map