1 | export as namespace ReduxActions;
|
2 |
|
3 |
|
4 |
|
5 | export interface BaseAction {
|
6 | type: string;
|
7 | }
|
8 |
|
9 | export interface Action<Payload> extends BaseAction {
|
10 | payload: Payload;
|
11 | error?: boolean | undefined;
|
12 | }
|
13 |
|
14 | export interface ActionMeta<Payload, Meta> extends Action<Payload> {
|
15 | meta: Meta;
|
16 | }
|
17 |
|
18 |
|
19 | export interface CombinedActionType {
|
20 | _dummy: undefined;
|
21 | }
|
22 |
|
23 | export type ReducerMapValue<State, Payload> =
|
24 | | Reducer<State, Payload>
|
25 | | ReducerNextThrow<State, Payload>
|
26 | | ReducerMap<State, Payload>;
|
27 |
|
28 | export interface ReducerMap<State, Payload> {
|
29 | [actionType: string]: ReducerMapValue<State, Payload>;
|
30 | }
|
31 |
|
32 | export interface ReducerMapMeta<State, Payload, Meta> {
|
33 | [actionType: string]:
|
34 | | ReducerMeta<State, Payload, Meta>
|
35 | | ReducerNextThrowMeta<State, Payload, Meta>
|
36 | | ReducerMapMeta<State, Payload, Meta>;
|
37 | }
|
38 |
|
39 | export interface ReducerNextThrow<State, Payload> {
|
40 | next?(state: State, action: Action<Payload>): State;
|
41 | throw?(state: State, action: Action<Payload>): State;
|
42 | }
|
43 |
|
44 | export interface ReducerNextThrowMeta<State, Payload, Meta> {
|
45 | next?(state: State, action: ActionMeta<Payload, Meta>): State;
|
46 | throw?(state: State, action: ActionMeta<Payload, Meta>): State;
|
47 | }
|
48 |
|
49 | export type BaseActionFunctions<TAction> =
|
50 | | ActionFunction0<TAction>
|
51 | | ActionFunction1<any, TAction>
|
52 | | ActionFunction2<any, any, TAction>
|
53 | | ActionFunction3<any, any, any, TAction>
|
54 | | ActionFunction4<any, any, any, any, TAction>
|
55 | | ActionFunctionAny<TAction>;
|
56 |
|
57 | export type ActionFunctions<Payload> = BaseActionFunctions<Action<Payload>>;
|
58 |
|
59 | export type ActionWithMetaFunctions<Payload, Meta> = BaseActionFunctions<ActionMeta<Payload, Meta>>;
|
60 |
|
61 | export type Reducer<State, Payload> = (state: State, action: Action<Payload>) => State;
|
62 |
|
63 | export type ReducerMeta<State, Payload, Meta> = (state: State, action: ActionMeta<Payload, Meta>) => State;
|
64 |
|
65 | export type ReduxCompatibleReducer<State, Payload> = (state: State | undefined, action: Action<Payload>) => State;
|
66 |
|
67 | export type ReduxCompatibleReducerMeta<State, Payload, Meta> = (
|
68 | state: State | undefined,
|
69 | action: ActionMeta<Payload, Meta>,
|
70 | ) => State;
|
71 |
|
72 |
|
73 | export type ActionFunction0<R> = () => R;
|
74 | export type ActionFunction1<T1, R> = (t1: T1) => R;
|
75 | export type ActionFunction2<T1, T2, R> = (t1: T1, t2: T2) => R;
|
76 | export type ActionFunction3<T1, T2, T3, R> = (t1: T1, t2: T2, t3: T3) => R;
|
77 | export type ActionFunction4<T1, T2, T3, T4, R> = (t1: T1, t2: T2, t3: T3, t4: T4) => R;
|
78 | export type ActionFunctionAny<R> = (...args: any[]) => R;
|
79 |
|
80 |
|
81 | export function createAction(
|
82 | actionType: string,
|
83 | ): ActionFunctionAny<Action<any>>;
|
84 |
|
85 | export function createAction<Payload>(
|
86 | actionType: string,
|
87 | payloadCreator: ActionFunction0<Payload>,
|
88 | ): ActionFunction0<Action<Payload>>;
|
89 |
|
90 | export function createAction<Payload, Arg1>(
|
91 | actionType: string,
|
92 | payloadCreator: ActionFunction1<Arg1, Payload>,
|
93 | ): ActionFunction1<Arg1, Action<Payload>>;
|
94 |
|
95 | export function createAction<Payload, Arg1, Arg2>(
|
96 | actionType: string,
|
97 | payloadCreator: ActionFunction2<Arg1, Arg2, Payload>,
|
98 | ): ActionFunction2<Arg1, Arg2, Action<Payload>>;
|
99 |
|
100 | export function createAction<Payload, Arg1, Arg2, Arg3>(
|
101 | actionType: string,
|
102 | payloadCreator: ActionFunction3<Arg1, Arg2, Arg3, Payload>,
|
103 | ): ActionFunction3<Arg1, Arg2, Arg3, Action<Payload>>;
|
104 |
|
105 | export function createAction<Payload, Arg1, Arg2, Arg3, Arg4>(
|
106 | actionType: string,
|
107 | payloadCreator: ActionFunction4<Arg1, Arg2, Arg3, Arg4, Payload>,
|
108 | ): ActionFunction4<Arg1, Arg2, Arg3, Arg4, Action<Payload>>;
|
109 |
|
110 | export function createAction<Payload>(
|
111 | actionType: string,
|
112 | ): ActionFunction1<Payload, Action<Payload>>;
|
113 |
|
114 | export function createAction<Meta>(
|
115 | actionType: string,
|
116 | payloadCreator: null | undefined,
|
117 | metaCreator: ActionFunctionAny<Meta>,
|
118 | ): ActionFunctionAny<ActionMeta<any, Meta>>;
|
119 |
|
120 | export function createAction<Payload, Meta>(
|
121 | actionType: string,
|
122 | payloadCreator: ActionFunctionAny<Payload>,
|
123 | metaCreator: ActionFunctionAny<Meta>,
|
124 | ): ActionFunctionAny<ActionMeta<Payload, Meta>>;
|
125 |
|
126 | export function createAction<Payload, Meta, Arg1>(
|
127 | actionType: string,
|
128 | payloadCreator: ActionFunction1<Arg1, Payload>,
|
129 | metaCreator: ActionFunction1<Arg1, Meta>,
|
130 | ): ActionFunction1<Arg1, ActionMeta<Payload, Meta>>;
|
131 |
|
132 | export function createAction<Payload, Meta, Arg1, Arg2>(
|
133 | actionType: string,
|
134 | payloadCreator: ActionFunction2<Arg1, Arg2, Payload>,
|
135 | metaCreator: ActionFunction2<Arg1, Arg2, Meta>,
|
136 | ): ActionFunction2<Arg1, Arg2, ActionMeta<Payload, Meta>>;
|
137 |
|
138 | export function createAction<Payload, Meta, Arg1, Arg2, Arg3>(
|
139 | actionType: string,
|
140 | payloadCreator: ActionFunction3<Arg1, Arg2, Arg3, Payload>,
|
141 | metaCreator: ActionFunction3<Arg1, Arg2, Arg3, Meta>,
|
142 | ): ActionFunction3<Arg1, Arg2, Arg3, ActionMeta<Payload, Meta>>;
|
143 |
|
144 | export function createAction<Payload, Meta, Arg1, Arg2, Arg3, Arg4>(
|
145 | actionType: string,
|
146 | payloadCreator: ActionFunction4<Arg1, Arg2, Arg3, Arg4, Payload>,
|
147 | metaCreator: ActionFunction4<Arg1, Arg2, Arg3, Arg4, Meta>,
|
148 | ): ActionFunction4<Arg1, Arg2, Arg3, Arg4, ActionMeta<Payload, Meta>>;
|
149 |
|
150 | export function handleAction<State, Payload>(
|
151 | actionType: string | ActionFunctions<Payload> | CombinedActionType,
|
152 | reducer: Reducer<State, Payload> | ReducerNextThrow<State, Payload>,
|
153 | initialState: State,
|
154 | ): ReduxCompatibleReducer<State, Payload>;
|
155 |
|
156 | export function handleAction<State, Payload, Meta>(
|
157 | actionType: string | ActionWithMetaFunctions<Payload, Meta> | CombinedActionType,
|
158 | reducer: ReducerMeta<State, Payload, Meta> | ReducerNextThrowMeta<State, Payload, Meta>,
|
159 | initialState: State,
|
160 | ): ReduxCompatibleReducerMeta<State, Payload, Meta>;
|
161 |
|
162 | export interface Options {
|
163 | prefix?: string | undefined;
|
164 | namespace?: string | undefined;
|
165 | }
|
166 |
|
167 | export function handleActions<StateAndPayload>(
|
168 | reducerMap: ReducerMap<StateAndPayload, StateAndPayload>,
|
169 | initialState: StateAndPayload,
|
170 | options?: Options,
|
171 | ): ReduxCompatibleReducer<StateAndPayload, StateAndPayload>;
|
172 |
|
173 | export function handleActions<State, Payload>(
|
174 | reducerMap: ReducerMap<State, Payload>,
|
175 | initialState: State,
|
176 | options?: Options,
|
177 | ): ReduxCompatibleReducer<State, Payload>;
|
178 |
|
179 | export function handleActions<State, Payload, Meta>(
|
180 | reducerMap: ReducerMapMeta<State, Payload, Meta>,
|
181 | initialState: State,
|
182 | options?: Options,
|
183 | ): ReduxCompatibleReducerMeta<State, Payload, Meta>;
|
184 |
|
185 |
|
186 | export function combineActions(...actionTypes: Array<ActionFunctions<any> | string | symbol>): CombinedActionType;
|
187 |
|
188 | export interface ActionMap<Payload, Meta> {
|
189 | [actionType: string]:
|
190 | | ActionMap<Payload, Meta>
|
191 | | ActionFunctionAny<Payload>
|
192 | | [ActionFunctionAny<Payload>, ActionFunctionAny<Meta>]
|
193 | | undefined;
|
194 | }
|
195 |
|
196 | export function createActions<Payload>(
|
197 | actionMapOrIdentityAction: ActionMap<Payload, any> | string,
|
198 | ...identityActions: Array<string | Options>
|
199 | ): {
|
200 | [actionName: string]: ActionFunctionAny<Action<Payload>>;
|
201 | };
|
202 |
|
203 | export function createActions(
|
204 | actionMapOrIdentityAction: ActionMap<any, any> | string,
|
205 | ...identityActions: Array<string | Options>
|
206 | ): {
|
207 | [actionName: string]: ActionFunctionAny<Action<any>>;
|
208 | };
|