-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtype.ts
151 lines (131 loc) · 4.99 KB
/
type.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import { AnyAction, MiddlewareAPI } from 'redux'
import { REDUX_API_MIDDLEWARE } from './constant'
export type StageActionTypes = {
START: string
FAIL: string
SUCCESS: string
}
export enum ResponseBodyType {
json = 'json',
text = 'text',
formData = 'formData',
blob = 'blob',
arrayBuffer = 'arrayBuffer',
readableStream = 'readableStream',
}
type ActionName = 'endAction' | 'APIAction'
export interface APIAction<
ResponseBody = unknown,
RequestBody = unknown,
Payload = unknown,
DispatchReturns extends ActionName = 'APIAction'
> extends Omit<RequestInit, 'headers' | 'body'> {
url: string
type: typeof REDUX_API_MIDDLEWARE
headers?: APIHeaders<ResponseBody, RequestBody, Payload>
body?: RequestBody
dispatchReturns?: DispatchReturns
responseBodyType?: ResponseBodyType
stageActionTypes: StageActionTypes
onStart?: OnStart<ResponseBody, RequestBody, Payload>
onSuccess?: OnSuccess<ResponseBody, RequestBody, Payload>
onFail?: OnFail<ResponseBody, RequestBody, Payload>
// put any data you want to receive in your reducer
payload?: Payload
}
export type APIActionAlt<ResponseBody = unknown, RequestBody = unknown, Payload = unknown> = APIAction<
ResponseBody,
RequestBody,
Payload,
'endAction'
>
export interface OnStart<ResponseBody = unknown, RequestBody = unknown, Payload = unknown> {
(params: StartActionParams<ResponseBody, RequestBody, Payload>): void
}
export interface OnFail<ResponseBody = unknown, RequestBody = unknown, Payload = unknown> {
(params: FailActionParams<ResponseBody, RequestBody, Payload>): void
}
export interface OnSuccess<ResponseBody = unknown, RequestBody = unknown, Payload = unknown> {
(params: SuccessActionParams<ResponseBody, RequestBody, Payload>): void
}
export interface StageAction<ResponseBody = unknown, RequestBody = unknown, Payload = unknown> {
type: string
payload: {
abortController?: AbortController
action: APIAction<ResponseBody, RequestBody, Payload>
body?: ResponseBody
response?: Response
}
}
export interface StartActionParams<ResponseBody = unknown, RequestBody = unknown, Payload = unknown> {
abortController: AbortController
action: APIAction<ResponseBody, RequestBody, Payload>
config: Config<ResponseBody, RequestBody, Payload> | null
store: MiddlewareAPI
}
export interface StartAction<ResponseBody = unknown, RequestBody = unknown, Payload = unknown> {
type: string
payload: StartActionParams<ResponseBody, RequestBody, Payload>
}
export interface SuccessActionParams<ResponseBody = unknown, RequestBody = unknown, Payload = unknown>
extends StartActionParams {
body: ResponseBody
request: Request
response: Response
config: Config<ResponseBody, RequestBody, Payload> | null
action: APIAction<ResponseBody, RequestBody, Payload>
}
export interface SuccessAction<ResponseBody = unknown, RequestBody = unknown, Payload = unknown> {
type: string
payload: SuccessActionParams<ResponseBody, RequestBody, Payload>
}
export interface FailActionParams<ResponseBody = unknown, RequestBody = unknown, Payload = unknown>
extends StartActionParams<ResponseBody, RequestBody, Payload> {
body?: ResponseBody
request?: Request
response?: Response
error?: string
config: Config<ResponseBody, RequestBody, Payload> | null
action: APIAction<ResponseBody, RequestBody, Payload>
}
export interface FailAction<ResponseBody = unknown, RequestBody = unknown, Payload = unknown> {
type: string
payload: FailActionParams<ResponseBody, RequestBody, Payload>
}
export type EndAction<ResponseBody = unknown, RequestBody = unknown, Payload = unknown> = FailAction<
ResponseBody,
RequestBody,
Payload
>
export interface BeforeFailParams<ResponseBody = unknown, RequestBody = unknown, Payload = unknown> {
request: Request
response: Response
config: Config<ResponseBody, RequestBody, Payload> | null
store: MiddlewareAPI
}
export type HeadersFormat = Headers | HeadersInit | undefined
export type APIHeaders<ResponseBody = unknown, RequestBody = unknown, Payload = unknown> =
| ((params: StartActionParams<ResponseBody, RequestBody, Payload>) => HeadersFormat)
| HeadersFormat
export interface Config<ResponseBody = unknown, RequestBody = unknown, Payload = unknown> {
beforeFail?: (
params: StartActionParams<ResponseBody, RequestBody, Payload> & { response: Response; request: Request },
) => Promise<Request | void> | Request | void
headers?: APIHeaders<ResponseBody, RequestBody, Payload>
onStart?: OnStart<ResponseBody, RequestBody, Payload>
onFail?: OnFail<ResponseBody, RequestBody, Payload>
onSuccess?: OnSuccess<ResponseBody, RequestBody, Payload>
}
export enum StageFunctionName {
onSuccess = 'onSuccess',
onFail = 'onFail',
onStart = 'onStart',
}
declare module 'redux' {
export type EndActionProperty = { dispatchReturns?: 'endAction' }
export interface Dispatch {
<T extends AnyAction, ResponseBody = unknown, RequestBody = unknown, Payload = unknown>(
action: T,
): T extends EndActionProperty ? EndAction<ResponseBody, RequestBody, Payload> : T
}
}