UNPKG

@lomray/react-mobx-manager

Version:
99 lines (98 loc) 2.53 kB
import { TInitStore } from "./types.js"; interface IPromise<TReturn> extends Promise<TReturn> { status?: 'fulfilled' | 'pending' | 'rejected'; value?: TReturn; reason?: any; } interface ISuspenseQueryParams { fieldName?: string; errorFields?: string[]; } interface ISuspenseQueryOptions { hash?: unknown; } interface ISuspenseSubqueryOptions { id: string; hash: unknown; } /** * Run request and cache promise * Sync suspense status between server and client */ declare class SuspenseQuery { /** * @protected */ protected promise: Promise<any> | undefined; /** * Subqueries info */ protected subqueries: Map<string, { hash: unknown; promise?: IPromise<any>; }>; /** * Target store */ protected readonly store: TInitStore; /** * @protected */ protected readonly params: Required<ISuspenseQueryParams>; /** * @constructor */ /** * @constructor */ constructor(store: TInitStore, { fieldName, errorFields }?: ISuspenseQueryParams); /** * Error to json */ /** * Error to json */ protected errorJson(e: any): void; /** * Assign custom error fields to error */ /** * Assign custom error fields to error */ protected jsonToError(e: Error, values: Record<string, any>): Error; /** * Throw suspense error */ /** * Throw suspense error */ protected throwError(): void; /** * Detect if suspense is restored from server side: * - throw error if exist * - skip run suspense if already completed */ /** * Detect if suspense is restored from server side: * - throw error if exist * - skip run suspense if already completed */ protected isComplete(hash: unknown): boolean; /** * Run request * Save request resolve status */ query: <TReturn>(promise: () => Promise<TReturn>, options?: ISuspenseQueryOptions) => TReturn | undefined; /** * Run subquery * Re-fetch data from query by hash changes in children components * NOTE: only client side */ subquery: <TReturn>(promise: () => Promise<TReturn>, options: ISuspenseSubqueryOptions) => TReturn | undefined; /** * Change status of promise. * Throw promise to react suspense */ static run: <TReturn>(promise: IPromise<TReturn> | undefined) => TReturn | undefined; } export { SuspenseQuery as default, IPromise };