UNPKG

redux-promise-middleware-actions

Version:

Redux action creator for making async actions with redux-promise-middleware

38 lines (37 loc) 2.6 kB
import { ActionCreator, AnyAction, AsyncActionCreator } from './actions'; export declare function getType<TActionCreator extends { toString(): string; }, Type extends string = TActionCreator extends { toString(): infer U; } ? U : never>(actionCreator: TActionCreator): Type; export declare type Handler<TPrevState, TAction, TNextState extends TPrevState = TPrevState> = (prevState: TPrevState, action: TAction) => TNextState; export declare type HandlerMap<TPrevState, TAction extends AnyAction, TNextState extends TPrevState = TPrevState> = { [type in TAction['type']]: Handler<TPrevState, TAction, TNextState>; }; export declare type InferActionFromHandlerMap<THandlerMap extends HandlerMap<any, any>> = THandlerMap extends HandlerMap<any, infer T> ? T : never; export declare type InferNextStateFromHandlerMap<THandlerMap extends HandlerMap<any, any>> = THandlerMap extends HandlerMap<any, any, infer T> ? T : never; export declare type CreateHandlerMap<TPrevState> = <TActionCreator extends ActionCreator<AnyAction>, TNextState extends TPrevState, TAction extends AnyAction = TActionCreator extends (...args: any[]) => infer T ? T : never>(actionCreators: TActionCreator | TActionCreator[], handler: Handler<TPrevState, TAction, TNextState>) => HandlerMap<TPrevState, TAction, TNextState>; export declare function createHandlerMap<TActionCreator extends ActionCreator<AnyAction>, TPrevState, TNextState extends TPrevState, TAction extends AnyAction = TActionCreator extends (...args: any[]) => infer T ? T : never>(actionCreators: TActionCreator | TActionCreator[], handler: Handler<TPrevState, TAction, TNextState>): HandlerMap<TPrevState, TAction, TNextState>; export declare function createReducer<TState, THandlerMap extends HandlerMap<TState, any, any>>(defaultState: TState, handlerMapsCreator: (handle: CreateHandlerMap<TState>) => THandlerMap[]): (state: TState | undefined, action: InferActionFromHandlerMap<THandlerMap>) => InferNextStateFromHandlerMap<THandlerMap>; export interface State<Payload> { error?: Error; data?: Payload; date?: number; pending?: boolean; } export declare const asyncReducer: <Type extends string, Payload, Metadata>(fn: AsyncActionCreator<Type, Payload, Metadata>) => (state: State<Payload> | undefined, action: any) => { pending: true; error?: Error | undefined; data?: Payload | undefined; date?: number | undefined; } | { pending: false; error: undefined; data: any; date: number; } | { pending: false; error: Error; data?: Payload | undefined; date?: number | undefined; };