UNPKG

@mornya/react-image-libs

Version:
58 lines (57 loc) 2.31 kB
var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, useContext, useState, useEffect } from 'react'; import { ImageObserver } from './ImageObserver'; export var IntersectObserverContext = createContext({ subscribe: function () { console.error('To use components such as <LazyImage> or <LazyBackground>, must be initialized the provider: <IntersectObserverProvider>.'); }, unsubscribe: function () { }, }); export var IntersectObserverProvider = function (props) { var _a = __read(useState(), 2), imageObserver = _a[0], setImageObserver = _a[1]; var subscribe = function (target, callback, once) { if (imageObserver) { if (once) { imageObserver.subscribeOnce(target, callback); } else { var unsubscriber = imageObserver.subscribe(target, callback); target.addEventListener('unsubscribeImageObserverItem', unsubscriber, { once: true, capture: false }); } } }; var unsubscribe = function (target) { if (imageObserver) { target.dispatchEvent(new CustomEvent('unsubscribeImageObserverItem')); imageObserver.unsubscribe(target); } }; useEffect(function () { if (!imageObserver) { setImageObserver(new ImageObserver.Provider(props.option)); } return function () { imageObserver === null || imageObserver === void 0 ? void 0 : imageObserver.destroy(); }; }, [imageObserver, props.option]); return (_jsx(IntersectObserverContext.Provider, { value: { subscribe: subscribe, unsubscribe: unsubscribe }, children: imageObserver ? props.children : null })); }; export function useIntersectObserver() { return useContext(IntersectObserverContext); }