-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathasync-data.d.ts
56 lines (49 loc) · 1.49 KB
/
async-data.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
export interface AsyncDataActionTypes {
REQUESTED: string;
FAILED: string;
SUCCEEDED: string;
RESET: string;
RETRY: string;
REPLACE: string;
}
export interface Action {
type: string;
}
export interface ActionError<TError> extends Action {
error: TError;
}
export interface ActionSucceeded<TData> extends Action {
data: TData;
}
export interface ActionReplace<TState> extends Action {
state: TState;
}
export type FuncRequested = (params) => Action;
export type FuncFailed<TError> = (error: TError) => ActionError<TError>;
export type FuncSucceeded<TData> = (data: TData) => ActionSucceeded<TData>;
export type FuncReset = () => Action;
export type FuncReplace<TState> = (state: TState) => ActionReplace<TState>;
export interface AsyncDataActions<TData, TError, TState> {
actions: AsyncDataActionTypes;
requested: FuncRequested;
failed: FuncFailed<TError>;
succeeded: FuncSucceeded<TData>;
reset: FuncReset;
retry: FuncRequested;
replace: FuncReplace<TState>;
}
export function createActions<TData, TError, TState>(PREFIX: string): AsyncDataActions<TData, TError, TState>;
export interface AsyncDataState<TData, TError> {
data: TData;
requesting: boolean;
succeeded: boolean;
error: TError;
}
export type FuncAsyncDataReducer<TData, TError> = (
state: AsyncDataState<TData, TError>,
action: Action
) => AsyncDataState<TData, TError>;
export function createReducer<TData, TError>(
defaultState: AsyncDataState<TData, TError>,
actions: AsyncDataActionTypes
): FuncAsyncDataReducer<TData, TError>;