UNPKG

tethysfaceid

Version:

1 lines 2.85 kB
{"ast":null,"code":"\"use strict\";\n\nvar _slicedToArray = require(\"/Users/dhrumil1/Documents/Tethy/online-verification/node_modules/@babel/runtime/helpers/slicedToArray\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.useIntersection = useIntersection;\n\nvar _react = require(\"react\");\n\nvar _requestIdleCallback = _interopRequireDefault(require(\"./request-idle-callback\"));\n\nvar hasIntersectionObserver = typeof IntersectionObserver !== 'undefined';\n\nfunction useIntersection(_ref) {\n var rootMargin = _ref.rootMargin,\n disabled = _ref.disabled;\n var isDisabled = disabled || !hasIntersectionObserver;\n var unobserve = (0, _react.useRef)();\n\n var _ref2 = (0, _react.useState)(false),\n _ref3 = _slicedToArray(_ref2, 2),\n visible = _ref3[0],\n setVisible = _ref3[1];\n\n var setRef = (0, _react.useCallback)(function (el) {\n if (unobserve.current) {\n unobserve.current();\n unobserve.current = undefined;\n }\n\n if (isDisabled || visible) return;\n\n if (el && el.tagName) {\n unobserve.current = observe(el, function (isVisible) {\n return isVisible && setVisible(isVisible);\n }, {\n rootMargin: rootMargin\n });\n }\n }, [isDisabled, rootMargin, visible]);\n (0, _react.useEffect)(function () {\n if (!hasIntersectionObserver) {\n if (!visible) (0, _requestIdleCallback[\"default\"])(function () {\n return setVisible(true);\n });\n }\n }, [visible]);\n return [setRef, visible];\n}\n\nfunction observe(element, callback, options) {\n var _createObserver = createObserver(options),\n id = _createObserver.id,\n observer = _createObserver.observer,\n elements = _createObserver.elements;\n\n elements.set(element, callback);\n observer.observe(element);\n return function unobserve() {\n observer.unobserve(element); // Destroy observer when there's nothing left to watch:\n\n if (elements.size === 0) {\n observer.disconnect();\n observers[\"delete\"](id);\n }\n };\n}\n\nvar observers = new Map();\n\nfunction createObserver(options) {\n var id = options.rootMargin || '';\n var instance = observers.get(id);\n\n if (instance) {\n return instance;\n }\n\n var elements = new Map();\n var observer = new IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n var callback = elements.get(entry.target);\n var isVisible = entry.isIntersecting || entry.intersectionRatio > 0;\n\n if (callback && isVisible) {\n callback(isVisible);\n }\n });\n }, options);\n observers.set(id, instance = {\n id: id,\n observer: observer,\n elements: elements\n });\n return instance;\n}","map":null,"metadata":{},"sourceType":"script"}