@lomray/react-mobx-manager
Version:
This package provides Mobx stores manager for react.
99 lines (98 loc) • 2.53 kB
TypeScript
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 };