import { IStateFragment } from "../state"; import { IReducerAction } from "../actions"; import { Reducer } from "redux"; export interface IStateFragmentHandler { /** Modify the payload after ok */ payloadModifier?: (payload: TAction) => TFragment; /** Fired when an Action with an OK Status is processed */ onOk?: (newState: IStateFragment) => void; /** do we allow existing data to be preserved when a Pending action is recieved */ reuseDataOnPending?(action: IReducerAction, state: IStateFragment): boolean; /** do we allow existing data to be preserved when a Error action is recieved */ reuseDataOnError?(action: IReducerAction, state: IStateFragment): boolean; } export interface IReducerBuilder { /** Create a default Reducer Builder */ default(canHandle: string | { (action: IReducerAction): boolean; }, options?: IStateFragmentHandler): IReducerBuilder; /** Create a custom Reducer Builder */ custom(canHandle: string | { (action: IReducerAction): boolean; }, reducer: (state: TState, action: IReducerAction) => TState, handler?: IStateFragmentHandler): IReducerBuilder; } export interface IReducerBuilderManager extends IReducerBuilder { /** Builds the Reducer */ build(): Reducer; } /** Create a Reducer Builder Manager */ export declare function createBuilderManager(helper: IReducerHelper): IReducerBuilderManager; export interface IReducerHelper { /** Create a default Reducer */ default(canHandle: string | { (action: IReducerAction): boolean; }, options?: IStateFragmentHandler): Reducer; /** Create a custom Reducer */ custom(canHandle: string | { (action: IReducerAction): boolean; }, reducer: (state: TState, action: IReducerAction) => TState): Reducer; } /** Create a Reducer Helper */ export declare function createReducerHelper(reducer: (state: TState, action: IReducerAction, options?: IStateFragmentHandler) => TState, createDefaultState: () => TState): IReducerHelper;