UNPKG

@grafana/ui

Version:
39 lines (36 loc) 1.13 kB
import { jsx } from 'react/jsx-runtime'; import { useRef, useCallback, useEffect } from 'react'; "use strict"; 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