import { useMemo, useSyncExternalStore } from 'react' import { awaitClient } from './AwaitClient' import type { AwaitOptions, Awaited, Key } from './types' /** * @experimental This is experimental feature. */ export const useAwait = (options: AwaitOptions): Awaited => { const syncData = () => awaitClient.suspend(options) const data = useSyncExternalStore( (sync) => awaitClient.subscribe(options.key, sync).unsubscribe, syncData, syncData ) return useMemo( () => ({ key: options.key, data, reset: () => awaitClient.reset(options.key), }), [data, options.key] ) }