@itwin/itwinui-react
Version:
A react component library for iTwinUI
42 lines (41 loc) • 1.24 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true,
});
Object.defineProperty(exports, 'useIntersection', {
enumerable: true,
get: function () {
return useIntersection;
},
});
const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard');
const _react = /*#__PURE__*/ _interop_require_wildcard._(require('react'));
const _dom = require('../functions/dom.js');
const useIntersection = (onIntersect, options = {}, once = true) => {
let { root, rootMargin, threshold } = options;
let cleanupRef = _react.useRef(() => {});
let setRef = _react.useCallback(
(node) => {
cleanupRef.current?.();
cleanupRef.current = () => {};
if (!node || !(0, _dom.getWindow)()?.IntersectionObserver) return;
let observer = new IntersectionObserver(
([entry], obs) => {
if (entry.isIntersecting) {
if (once) obs.disconnect();
onIntersect();
}
},
{
root,
rootMargin,
threshold,
},
);
observer.observe(node);
cleanupRef.current = () => observer.disconnect();
},
[onIntersect, once, root, rootMargin, threshold],
);
return setRef;
};