UNPKG

@mittwald/react-use-promise

Version:

Simple and declarative use of Promises in your React components. Observe their state and refresh them in various advanced ways.

41 lines (40 loc) 1.95 kB
import { DurationLikeObject } from "luxon"; import { RemoveTimeout } from "../lib/ConsolidatedTimeout"; import { EventualValue } from "../lib/EventualValue"; import { ObservableValue } from "../observable-value/ObservableValue"; import { ResourceLoader, AsyncResourceState, AsyncResourceEventHandler, UseWatchResourceOptions, UseWatchResourceResult, type AsyncResourceMeta } from "./types"; export declare class AsyncResource<T = unknown> { private loader; readonly meta: AsyncResourceMeta; private loaderPromise; suspensePromise: Promise<void> | undefined; private resolveSuspensePromise; private loaderPromiseVersion; private autoRefreshTimeout; readonly value: ObservableValue<EventualValue<T>>; readonly valueWithCache: ObservableValue<EventualValue<T>>; readonly error: ObservableValue<EventualValue<unknown>>; syncValue: EventualValue<T>; syncError: EventualValue<unknown>; readonly state: ObservableValue<AsyncResourceState>; private readonly onRefreshListeners; private static readonly onBeforeRefreshListeners; private static readonly onLoadListeners; static voidInstance: AsyncResource<undefined>; constructor(loader: ResourceLoader<T>, meta?: AsyncResourceMeta); private buildLoaderWithContext; updateLoader(newLoader: ResourceLoader<T>): void; refresh(): void; private callListeners; onRefresh(handler: AsyncResourceEventHandler): () => void; static onBeforeRefresh(handler: AsyncResourceEventHandler): () => void; static onLoad(handler: AsyncResourceEventHandler): () => void; addTTL(ttl: DurationLikeObject): RemoveTimeout; load(): void; private resetPromises; isMatchingError(error: true | unknown): boolean; private handleLoading; private handleAsyncLoading; use<TOptions extends UseWatchResourceOptions>(options?: TOptions): UseWatchResourceResult<T, TOptions>; watchState(): AsyncResourceState; }