UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

31 lines (30 loc) 894 B
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; };