@modern-kit/react
Version:
38 lines (34 loc) • 1.2 kB
JavaScript
;
var React = require('react');
var utils = require('@modern-kit/utils');
var hooksUseEventListener = require('../useEventListener/index.cjs');
require('../usePreservedCallback/index.cjs');
require('../useIsomorphicLayoutEffect/index.cjs');
function useOutsidePointerDown(callback, options) {
const { excludeRefs } = options ?? {};
const targetRef = React.useRef(null);
const eventType = React.useMemo(
() => utils.isMobile() ? "touchstart" : "mousedown",
[]
);
const handleOutsidePointerDown = ({ target }) => {
if (!targetRef.current) return;
const targetElement = targetRef.current;
const isInExcluded = excludeRefs?.some(
(excludeRef) => excludeRef.current?.contains(target)
);
const isOutside = !targetElement.contains(target);
const shouldTriggerCallback = isOutside && !isInExcluded;
if (shouldTriggerCallback) {
callback(targetElement);
}
};
hooksUseEventListener.useEventListener(
typeof document !== "undefined" ? document : null,
eventType,
handleOutsidePointerDown
);
return { ref: targetRef };
}
exports.useOutsidePointerDown = useOutsidePointerDown;
//# sourceMappingURL=index.cjs.map