@itwin/itwinui-react
Version:
A react component library for iTwinUI
31 lines (30 loc) • 894 B
JavaScript
import * as React from 'react';
import { getWindow } from '../functions/dom.js';
export 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 || !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;
};