@mornya/react-image-libs
Version:
The project of React.js Image library.
58 lines (57 loc) • 2.31 kB
JavaScript
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);
}