UNPKG

@snipsonian/observable-state

Version:

Observable-state snippets (redux-like)

51 lines (50 loc) 4.37 kB
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 {};