UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

42 lines (41 loc) 1.24 kB
'use strict'; 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; };