@ivliu/react-offscreen
Version:
 
25 lines (24 loc) • 1.13 kB
JavaScript
"use client";
import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
const Repeater = (props)=>{
const { mode, children } = props;
const promiseRef = (0, __WEBPACK_EXTERNAL_MODULE_react__.useRef)(null);
const resolveRef = (0, __WEBPACK_EXTERNAL_MODULE_react__.useRef)(null);
const resolvePromise = (ignore)=>{
if ((ignore || "visible" === mode) && "function" == typeof resolveRef.current) {
resolveRef.current();
resolveRef.current = null;
promiseRef.current = null;
}
};
(0, __WEBPACK_EXTERNAL_MODULE_react__.useEffect)(()=>()=>resolvePromise(true), []);
if ("hidden" === mode) {
if (null === resolveRef.current) promiseRef.current = new Promise((resolve)=>resolveRef.current = resolve);
const promise = promiseRef.current;
if ("use" in __WEBPACK_EXTERNAL_MODULE_react__["default"] && "function" == typeof __WEBPACK_EXTERNAL_MODULE_react__["default"].use) __WEBPACK_EXTERNAL_MODULE_react__["default"].use(promise);
else throw promise;
}
resolvePromise();
return children;
};
export { Repeater };