import React, { useRef, Suspense, Fragment } from "react"; interface StorageRef { promise?: Promise; resolve?: (value: void | PromiseLike) => void; } function Suspender({ freeze, children, }: { freeze: boolean; children: React.ReactNode; }) { const promiseCache = useRef({}).current; if (freeze && !promiseCache.promise) { promiseCache.promise = new Promise((resolve) => { promiseCache.resolve = resolve; }); throw promiseCache.promise; } else if (freeze) { throw promiseCache.promise; } else if (promiseCache.promise) { promiseCache.resolve!(); promiseCache.promise = undefined; } return {children}; } interface Props { freeze: boolean; children: React.ReactNode; placeholder?: React.ReactNode; } export function Freeze({ freeze, children, placeholder = null }: Props) { return ( {children} ); }