@e-group/utils
Version:
eGroup team utils that share across projects.
31 lines (30 loc) • 1.6 kB
TypeScript
import { ActionFunctionAny, Action } from 'redux-actions';
import { ActionsObservable, StateObservable, Epic } from 'redux-observable';
import { Observable, OperatorFunction, ObservableInput } from 'rxjs';
import { mergeMap, switchMap } from 'rxjs/operators';
export declare type ObservableAction = ActionsObservable<Action<any>>;
export declare type ObservableState = StateObservable<any>;
export declare type Api = (payload: any) => Promise<any>;
export interface Dependencies {
apiErrorsHandler?: any;
apis?: any;
schema?: any;
}
export interface HandlerArgs extends Dependencies {
action$: ObservableAction;
state$: ObservableState;
action: Action<any>;
}
export interface MakeBasicFetchEpicOptions {
actionType: string;
apiName: string;
fetchRequest: ActionFunctionAny<Action<any>>;
handleSuccess: (response: any, args: HandlerArgs) => ObservableInput<any>;
handleFailure: (error: any, args: HandlerArgs) => ObservableInput<any>;
debounceTime?: number;
observableMap?: typeof switchMap | typeof mergeMap;
handleTakeUntil?: (action$: ObservableAction) => OperatorFunction<any, any>;
handleBeforeFetch?: (action: Action<any>, dependencies: Dependencies) => Observable<any>;
handleAfterFetch?: (action: Action<any>, dependencies: Dependencies) => Observable<any>;
}
export default function makeBasicFetchEpic({ actionType, apiName, fetchRequest, handleSuccess, handleFailure, debounceTime: time, observableMap: customized$Map, handleTakeUntil, handleBeforeFetch, handleAfterFetch, }: MakeBasicFetchEpicOptions): Epic<any, any, any, any>;