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.

36 lines (35 loc) 1.31 kB
import { DurationLikeObject } from "luxon"; import type { Tags, TagsInput } from "../store/Tags"; import type { AsyncResource } from "./AsyncResource"; export type FnParameters = unknown[]; export type LoaderFn<TResult, TParams extends FnParameters> = (...args: TParams) => Promise<TResult> | TResult; export type ResourceLoader<TResult = unknown> = () => Promise<TResult> | TResult; export type AsyncResourceState = "void" | "loading" | "loaded" | "error"; export type GetAsyncResourceOptions = { loaderId?: string; tags?: TagsInput; }; export interface AsyncResourceMeta { tags?: Tags; } export type UseWatchResourceOptions = { keepValueWhileLoading?: boolean; useSuspense?: boolean; autoRefresh?: DurationLikeObject; refreshOnWindowFocus?: boolean; refreshOnDocumentVisibilityChange?: boolean; } & GetAsyncResourceOptions; export type NoSuspenseReturnType<T> = Readonly<{ maybeValue: T | undefined; isLoading: boolean; } & ({ hasValue: false; } | { hasValue: true; value: T; })>; export type UseWatchResourceResult<TValue, TOptions> = TOptions extends { useSuspense: false; } ? NoSuspenseReturnType<TValue> : TValue; export type ResolveLoaderPromiseFn = () => void; export type AsyncResourceEventHandler = <T>(resource: AsyncResource<T>) => void;