@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
TypeScript
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;
}