@snipsonian/observable-state
Version:
Observable-state snippets (redux-like)
51 lines (50 loc) • 4.37 kB
TypeScript
import { ITraceableApiErrorBase } from '@snipsonian/core/es/typings/apiErrors';
import { IObservableStateAction } from '../types';
import { TNrOfParentNotificationLevelsToTrigger } from '../../observer/extendNotificationsToTrigger';
import { ISetState } from '../../store/types';
import { AsyncOperation, IAsyncEntity, IAsyncEntityOperationHooks, IEntitiesInitialState, IOperationUpdaterOptions, TEntityKey } from './types';
export interface IAsyncEntityActionCreators<State, ExtraProcessInput, StateChangeNotificationKey, Error = ITraceableApiErrorBase<{}>, ActionType = string> {
getAsyncEntity<Data>(state: State, asyncEntityKey: TEntityKey): IAsyncEntity<Data, Error>;
updateAsyncEntityInState<Data>(props: IUpdateAsyncEntityInStateProps<State, StateChangeNotificationKey, Data, Error>): void;
fetchAsyncEntityAction<ApiInput, ApiResult, ApiResponse = ApiResult>(props: ICreateFetchAsyncEntityActionProps<State, StateChangeNotificationKey, ApiInput, ApiResult, ApiResponse>): IObservableStateAction<ActionType, IAsyncEntityActionPayload, State, ExtraProcessInput, StateChangeNotificationKey>;
createAsyncEntityAction<ApiInput, ApiResult, ApiResponse = ApiResult>(props: ICreateUpdateAsyncEntityActionProps<State, StateChangeNotificationKey, ApiInput, ApiResult, ApiResponse>): IObservableStateAction<ActionType, IAsyncEntityActionPayload, State, ExtraProcessInput, StateChangeNotificationKey>;
updateAsyncEntityAction<ApiInput, ApiResult, ApiResponse = ApiResult>(props: ICreateUpdateAsyncEntityActionProps<State, StateChangeNotificationKey, ApiInput, ApiResult, ApiResponse>): IObservableStateAction<ActionType, IAsyncEntityActionPayload, State, ExtraProcessInput, StateChangeNotificationKey>;
removeAsyncEntityAction<ApiInput, ApiResult, ApiResponse = ApiResult>(props: ICreateRemoveAsyncEntityActionProps<State, StateChangeNotificationKey, ApiInput, ApiResult, ApiResponse>): IObservableStateAction<ActionType, IAsyncEntityActionPayload, State, ExtraProcessInput, StateChangeNotificationKey>;
}
interface IUpdateAsyncEntityInStateProps<State, StateChangeNotificationKey, Data, Error> {
asyncEntityKey: TEntityKey;
entityUpdater: (currentEntity: IAsyncEntity<Data, Error>) => IAsyncEntity<Data, Error>;
options: Required<IOperationUpdaterOptions<StateChangeNotificationKey>>;
setState: ISetState<State, StateChangeNotificationKey>;
}
interface ICreateAsyncEntityActionPropsBase<State, StateChangeNotificationKey, ApiInput, ApiResult, ApiResponse = ApiResult> extends IAsyncEntityOperationHooks<State, ApiInput, ApiResult, ApiResponse> {
asyncEntityKey: TEntityKey;
api: (apiInput: ApiInput) => Promise<ApiResponse>;
apiInputSelector?: (props: {
state: State;
}) => ApiInput;
mapApiResponse?: (props: {
response: ApiResponse;
state: State;
}) => ApiResult;
notificationsToTrigger: StateChangeNotificationKey[];
nrOfParentNotificationLevelsToTrigger?: TNrOfParentNotificationLevelsToTrigger;
}
interface ICreateFetchAsyncEntityActionProps<State, StateChangeNotificationKey, ApiInput, ApiResult, ApiResponse = ApiResult> extends ICreateAsyncEntityActionPropsBase<State, StateChangeNotificationKey, ApiInput, ApiResult, ApiResponse> {
resetDataOnTrigger?: boolean;
}
interface ICreateUpdateAsyncEntityActionProps<State, StateChangeNotificationKey, ApiInput, ApiResult, ApiResponse = ApiResult> extends ICreateAsyncEntityActionPropsBase<State, StateChangeNotificationKey, ApiInput, ApiResult, ApiResponse> {
updateDataOnSuccess?: boolean;
markAsFetchedOnSuccess?: boolean;
}
interface ICreateRemoveAsyncEntityActionProps<State, StateChangeNotificationKey, ApiInput, ApiResult, ApiResponse = ApiResult> extends ICreateAsyncEntityActionPropsBase<State, StateChangeNotificationKey, ApiInput, ApiResult, ApiResponse> {
markAsNotFetchedOnSuccess?: boolean;
}
interface IAsyncEntityActionPayload {
operation: AsyncOperation;
}
export declare function initAsyncEntityActionCreators<State, ExtraProcessInput, StateChangeNotificationKey = string, Error = ITraceableApiErrorBase<{}>, ActionType = string>({ entitiesStateField, getEntitiesInitialState, }: {
entitiesStateField?: string;
getEntitiesInitialState: () => IEntitiesInitialState;
}): IAsyncEntityActionCreators<State, ExtraProcessInput, StateChangeNotificationKey, Error, ActionType>;
export {};