@faasjs/react 0.0.3-beta.99 → 0.0.4-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -16
- package/dist/index.d.mts +9 -5
- package/dist/index.d.ts +9 -5
- package/dist/index.js +74 -56
- package/dist/index.mjs +74 -56
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -16,23 +16,26 @@ React plugin for FaasJS.
|
|
|
16
16
|
|
|
17
17
|
### Classes
|
|
18
18
|
|
|
19
|
-
- [
|
|
19
|
+
- [ErrorBoundary](classes/ErrorBoundary.md)
|
|
20
20
|
- [Response](classes/Response.md)
|
|
21
21
|
- [ResponseError](classes/ResponseError.md)
|
|
22
22
|
|
|
23
23
|
### Interfaces
|
|
24
24
|
|
|
25
|
-
- [
|
|
26
|
-
- [FaasDataWrapperProps](interfaces/FaasDataWrapperProps.md)
|
|
27
|
-
- [FaasReactClientInstance](interfaces/FaasReactClientInstance.md)
|
|
25
|
+
- [ErrorBoundaryProps](interfaces/ErrorBoundaryProps.md)
|
|
28
26
|
|
|
29
27
|
### Type Aliases
|
|
30
28
|
|
|
29
|
+
- [ErrorChildrenProps](#errorchildrenprops)
|
|
31
30
|
- [FaasAction](#faasaction)
|
|
32
31
|
- [FaasData](#faasdata)
|
|
32
|
+
- [FaasDataInjection](#faasdatainjection)
|
|
33
|
+
- [FaasDataWrapperProps](#faasdatawrapperprops)
|
|
33
34
|
- [FaasParams](#faasparams)
|
|
35
|
+
- [FaasReactClientInstance](#faasreactclientinstance)
|
|
34
36
|
- [Options](#options)
|
|
35
37
|
- [ResponseHeaders](#responseheaders)
|
|
38
|
+
- [useFaasOptions](#usefaasoptions)
|
|
36
39
|
|
|
37
40
|
### Functions
|
|
38
41
|
|
|
@@ -44,6 +47,21 @@ React plugin for FaasJS.
|
|
|
44
47
|
|
|
45
48
|
## Type Aliases
|
|
46
49
|
|
|
50
|
+
### ErrorChildrenProps
|
|
51
|
+
|
|
52
|
+
Ƭ **ErrorChildrenProps**: `Object`
|
|
53
|
+
|
|
54
|
+
#### Type declaration
|
|
55
|
+
|
|
56
|
+
| Name | Type |
|
|
57
|
+
| :------ | :------ |
|
|
58
|
+
| `error?` | `Error` |
|
|
59
|
+
| `errorDescription?` | `string` |
|
|
60
|
+
| `errorMessage?` | `string` |
|
|
61
|
+
| `info?` | `any` |
|
|
62
|
+
|
|
63
|
+
___
|
|
64
|
+
|
|
47
65
|
### FaasAction
|
|
48
66
|
|
|
49
67
|
Ƭ **FaasAction**: `FaasActionPaths` \| `Record`<`string`, `any`\>
|
|
@@ -62,6 +80,62 @@ ___
|
|
|
62
80
|
|
|
63
81
|
___
|
|
64
82
|
|
|
83
|
+
### FaasDataInjection
|
|
84
|
+
|
|
85
|
+
Ƭ **FaasDataInjection**<`Data`\>: `Object`
|
|
86
|
+
|
|
87
|
+
Injects FaasData props.
|
|
88
|
+
|
|
89
|
+
#### Type parameters
|
|
90
|
+
|
|
91
|
+
| Name | Type |
|
|
92
|
+
| :------ | :------ |
|
|
93
|
+
| `Data` | `any` |
|
|
94
|
+
|
|
95
|
+
#### Type declaration
|
|
96
|
+
|
|
97
|
+
| Name | Type |
|
|
98
|
+
| :------ | :------ |
|
|
99
|
+
| `action` | `string` \| `any` |
|
|
100
|
+
| `data` | `Data` |
|
|
101
|
+
| `error` | `any` |
|
|
102
|
+
| `loading` | `boolean` |
|
|
103
|
+
| `params` | `Record`<`string`, `any`\> |
|
|
104
|
+
| `promise` | `Promise`<`Response`<`Data`\>\> |
|
|
105
|
+
| `reloadTimes` | `number` |
|
|
106
|
+
| `setData` | `React.Dispatch`<`React.SetStateAction`<`Data`\>\> |
|
|
107
|
+
| `setError` | `React.Dispatch`<`React.SetStateAction`<`any`\>\> |
|
|
108
|
+
| `setLoading` | `React.Dispatch`<`React.SetStateAction`<`boolean`\>\> |
|
|
109
|
+
| `setPromise` | `React.Dispatch`<`React.SetStateAction`<`Promise`<`Response`<`Data`\>\>\>\> |
|
|
110
|
+
| `reload` | (`params?`: `Record`<`string`, `any`\>) => `Promise`<`any`\> |
|
|
111
|
+
|
|
112
|
+
___
|
|
113
|
+
|
|
114
|
+
### FaasDataWrapperProps
|
|
115
|
+
|
|
116
|
+
Ƭ **FaasDataWrapperProps**<`PathOrData`\>: `Object`
|
|
117
|
+
|
|
118
|
+
#### Type parameters
|
|
119
|
+
|
|
120
|
+
| Name | Type |
|
|
121
|
+
| :------ | :------ |
|
|
122
|
+
| `PathOrData` | extends `FaasAction` |
|
|
123
|
+
|
|
124
|
+
#### Type declaration
|
|
125
|
+
|
|
126
|
+
| Name | Type | Description |
|
|
127
|
+
| :------ | :------ | :------ |
|
|
128
|
+
| `action` | `string` | - |
|
|
129
|
+
| `children?` | `React.ReactElement`<`Partial`<[`FaasDataInjection`](#faasdatainjection)\>\> | - |
|
|
130
|
+
| `data?` | `FaasData`<`PathOrData`\> | use custom data, should work with setData |
|
|
131
|
+
| `fallback?` | `JSX.Element` \| ``false`` | - |
|
|
132
|
+
| `params?` | `FaasParams`<`PathOrData`\> | - |
|
|
133
|
+
| `setData?` | `React.Dispatch`<`React.SetStateAction`<`FaasData`<`PathOrData`\>\>\> | use custom setData, should work with data |
|
|
134
|
+
| `onDataChange?` | (`args`: [`FaasDataInjection`](#faasdatainjection)<`FaasData`<`PathOrData`\>\>) => `void` | - |
|
|
135
|
+
| `render?` | (`args`: [`FaasDataInjection`](#faasdatainjection)<`FaasData`<`PathOrData`\>\>) => `Element` \| `Element`[] | - |
|
|
136
|
+
|
|
137
|
+
___
|
|
138
|
+
|
|
65
139
|
### FaasParams
|
|
66
140
|
|
|
67
141
|
Ƭ **FaasParams**<`T`\>: `T` extends `FaasActionPaths` ? `FaasActions`[`T`][``"Params"``] : `any`
|
|
@@ -74,10 +148,27 @@ ___
|
|
|
74
148
|
|
|
75
149
|
___
|
|
76
150
|
|
|
151
|
+
### FaasReactClientInstance
|
|
152
|
+
|
|
153
|
+
Ƭ **FaasReactClientInstance**: `Object`
|
|
154
|
+
|
|
155
|
+
#### Type declaration
|
|
156
|
+
|
|
157
|
+
| Name | Type |
|
|
158
|
+
| :------ | :------ |
|
|
159
|
+
| `faas` | <PathOrData\>(`action`: `string` \| `PathOrData`, `params`: `FaasParams`<`PathOrData`\>) => `Promise`<`Response`<`FaasData`<`PathOrData`\>\>\> |
|
|
160
|
+
| `id` | `string` |
|
|
161
|
+
| `useFaas` | <PathOrData\>(`action`: `string` \| `PathOrData`, `defaultParams`: `FaasParams`<`PathOrData`\>, `options?`: [`useFaasOptions`](#usefaasoptions)<`PathOrData`\>) => [`FaasDataInjection`](#faasdatainjection)<`FaasData`<`PathOrData`\>\> |
|
|
162
|
+
| `FaasDataWrapper` | <PathOrData\>(`props`: [`FaasDataWrapperProps`](#faasdatawrapperprops)<`PathOrData`\>) => `Element` |
|
|
163
|
+
|
|
164
|
+
___
|
|
165
|
+
|
|
77
166
|
### Options
|
|
78
167
|
|
|
79
168
|
Ƭ **Options**: `RequestInit` & { `beforeRequest?`: (`{
|
|
80
|
-
action,
|
|
169
|
+
action,
|
|
170
|
+
params,
|
|
171
|
+
options,
|
|
81
172
|
}`: { `action`: `string` ; `options`: [`Options`](#options) ; `params`: `Record`<`string`, `any`\> }) => `Promise`<`void`\> \| `void` ; `headers?`: { `[key: string]`: `string`; } ; `request?`: <PathOrData\>(`url`: `string`, `options`: [`Options`](#options)) => `Promise`<[`Response`](classes/Response.md)<[`FaasData`](#faasdata)<`PathOrData`\>\>\> }
|
|
82
173
|
|
|
83
174
|
___
|
|
@@ -90,6 +181,28 @@ ___
|
|
|
90
181
|
|
|
91
182
|
▪ [key: `string`]: `string`
|
|
92
183
|
|
|
184
|
+
___
|
|
185
|
+
|
|
186
|
+
### useFaasOptions
|
|
187
|
+
|
|
188
|
+
Ƭ **useFaasOptions**<`PathOrData`\>: `Object`
|
|
189
|
+
|
|
190
|
+
#### Type parameters
|
|
191
|
+
|
|
192
|
+
| Name | Type |
|
|
193
|
+
| :------ | :------ |
|
|
194
|
+
| `PathOrData` | extends `FaasAction` |
|
|
195
|
+
|
|
196
|
+
#### Type declaration
|
|
197
|
+
|
|
198
|
+
| Name | Type | Description |
|
|
199
|
+
| :------ | :------ | :------ |
|
|
200
|
+
| `data?` | `FaasData`<`PathOrData`\> | - |
|
|
201
|
+
| `debounce?` | `number` | send the last request after milliseconds |
|
|
202
|
+
| `params?` | `FaasParams`<`PathOrData`\> | - |
|
|
203
|
+
| `setData?` | `React.Dispatch`<`React.SetStateAction`<`FaasData`<`PathOrData`\>\>\> | - |
|
|
204
|
+
| `skip?` | `boolean` | - |
|
|
205
|
+
|
|
93
206
|
## Functions
|
|
94
207
|
|
|
95
208
|
### FaasDataWrapper
|
|
@@ -108,7 +221,7 @@ A data wrapper for react components
|
|
|
108
221
|
|
|
109
222
|
| Name | Type |
|
|
110
223
|
| :------ | :------ |
|
|
111
|
-
| `props` | [`FaasDataWrapperProps`](
|
|
224
|
+
| `props` | [`FaasDataWrapperProps`](#faasdatawrapperprops)<`PathOrData`\> |
|
|
112
225
|
|
|
113
226
|
#### Returns
|
|
114
227
|
|
|
@@ -129,7 +242,7 @@ ___
|
|
|
129
242
|
|
|
130
243
|
### FaasReactClient
|
|
131
244
|
|
|
132
|
-
▸ **FaasReactClient**(`«destructured»`): [`FaasReactClientInstance`](
|
|
245
|
+
▸ **FaasReactClient**(`«destructured»`): [`FaasReactClientInstance`](#faasreactclientinstance)
|
|
133
246
|
|
|
134
247
|
Before use faas, you should initialize a FaasReactClient.
|
|
135
248
|
|
|
@@ -144,7 +257,7 @@ Before use faas, you should initialize a FaasReactClient.
|
|
|
144
257
|
|
|
145
258
|
#### Returns
|
|
146
259
|
|
|
147
|
-
[`FaasReactClientInstance`](
|
|
260
|
+
[`FaasReactClientInstance`](#faasreactclientinstance)
|
|
148
261
|
|
|
149
262
|
```ts
|
|
150
263
|
const client = FaasReactClient({
|
|
@@ -187,7 +300,7 @@ ___
|
|
|
187
300
|
|
|
188
301
|
### getClient
|
|
189
302
|
|
|
190
|
-
▸ **getClient**(`domain?`): [`FaasReactClientInstance`](
|
|
303
|
+
▸ **getClient**(`domain?`): [`FaasReactClientInstance`](#faasreactclientinstance)
|
|
191
304
|
|
|
192
305
|
Get FaasReactClient instance
|
|
193
306
|
|
|
@@ -199,7 +312,7 @@ Get FaasReactClient instance
|
|
|
199
312
|
|
|
200
313
|
#### Returns
|
|
201
314
|
|
|
202
|
-
[`FaasReactClientInstance`](
|
|
315
|
+
[`FaasReactClientInstance`](#faasreactclientinstance)
|
|
203
316
|
|
|
204
317
|
```ts
|
|
205
318
|
getClient()
|
|
@@ -211,7 +324,7 @@ ___
|
|
|
211
324
|
|
|
212
325
|
### useFaas
|
|
213
326
|
|
|
214
|
-
▸ **useFaas**<`PathOrData`\>(`action`, `defaultParams`, `options?`): [`FaasDataInjection`](
|
|
327
|
+
▸ **useFaas**<`PathOrData`\>(`action`, `defaultParams`, `options?`): [`FaasDataInjection`](#faasdatainjection)<[`FaasData`](#faasdata)<`PathOrData`\>\>
|
|
215
328
|
|
|
216
329
|
Request faas server with React hook
|
|
217
330
|
|
|
@@ -227,14 +340,11 @@ Request faas server with React hook
|
|
|
227
340
|
| :------ | :------ | :------ |
|
|
228
341
|
| `action` | `string` \| `PathOrData` | {string} action name |
|
|
229
342
|
| `defaultParams` | [`FaasParams`](#faasparams)<`PathOrData`\> | {object} initial action params |
|
|
230
|
-
| `options?` | `
|
|
231
|
-
| `options.data?` | [`FaasData`](#faasdata)<`PathOrData`\> | - |
|
|
232
|
-
| `options.setData?` | `Dispatch`<`SetStateAction`<[`FaasData`](#faasdata)<`PathOrData`\>\>\> | - |
|
|
233
|
-
| `options.skip?` | `boolean` | - |
|
|
343
|
+
| `options?` | [`useFaasOptions`](#usefaasoptions)<`PathOrData`\> | - |
|
|
234
344
|
|
|
235
345
|
#### Returns
|
|
236
346
|
|
|
237
|
-
[`FaasDataInjection`](
|
|
347
|
+
[`FaasDataInjection`](#faasdatainjection)<[`FaasData`](#faasdata)<`PathOrData`\>\>
|
|
238
348
|
|
|
239
349
|
```ts
|
|
240
350
|
function Post ({ id }) {
|
package/dist/index.d.mts
CHANGED
|
@@ -14,9 +14,11 @@ type FaasReactClientInstance = {
|
|
|
14
14
|
useFaas: <PathOrData extends FaasAction>(
|
|
15
15
|
action: string | PathOrData,
|
|
16
16
|
defaultParams: FaasParams<PathOrData>,
|
|
17
|
-
options?: useFaasOptions<PathOrData
|
|
17
|
+
options?: useFaasOptions<PathOrData>
|
|
18
18
|
) => FaasDataInjection<FaasData<PathOrData>>
|
|
19
|
-
FaasDataWrapper<PathOrData extends FaasAction>(
|
|
19
|
+
FaasDataWrapper<PathOrData extends FaasAction>(
|
|
20
|
+
props: FaasDataWrapperProps<PathOrData>
|
|
21
|
+
): JSX.Element
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
/**
|
|
@@ -30,7 +32,7 @@ type FaasDataInjection<Data = any> = {
|
|
|
30
32
|
data: Data
|
|
31
33
|
error: any
|
|
32
34
|
promise: Promise<Response<Data>>
|
|
33
|
-
reload(params?: Record<string, any>): Promise<Response<Data
|
|
35
|
+
reload(params?: Record<string, any>): Promise<Response<Data>>
|
|
34
36
|
setData: React.Dispatch<React.SetStateAction<Data>>
|
|
35
37
|
setLoading: React.Dispatch<React.SetStateAction<boolean>>
|
|
36
38
|
setPromise: React.Dispatch<React.SetStateAction<Promise<Response<Data>>>>
|
|
@@ -38,7 +40,9 @@ type FaasDataInjection<Data = any> = {
|
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
type FaasDataWrapperProps<PathOrData extends FaasAction> = {
|
|
41
|
-
render?(
|
|
43
|
+
render?(
|
|
44
|
+
args: FaasDataInjection<FaasData<PathOrData>>
|
|
45
|
+
): JSX.Element | JSX.Element[]
|
|
42
46
|
children?: React.ReactElement<Partial<FaasDataInjection>>
|
|
43
47
|
fallback?: JSX.Element | false
|
|
44
48
|
action: string
|
|
@@ -72,7 +76,7 @@ type useFaasOptions<PathOrData extends FaasAction> = {
|
|
|
72
76
|
* })
|
|
73
77
|
* ```
|
|
74
78
|
*/
|
|
75
|
-
declare function FaasReactClient({ domain, options, onError }: {
|
|
79
|
+
declare function FaasReactClient({ domain, options, onError, }: {
|
|
76
80
|
domain: string;
|
|
77
81
|
options?: Options;
|
|
78
82
|
onError?: (action: string, params: Record<string, any>) => (res: ResponseError) => Promise<void>;
|
package/dist/index.d.ts
CHANGED
|
@@ -14,9 +14,11 @@ type FaasReactClientInstance = {
|
|
|
14
14
|
useFaas: <PathOrData extends FaasAction>(
|
|
15
15
|
action: string | PathOrData,
|
|
16
16
|
defaultParams: FaasParams<PathOrData>,
|
|
17
|
-
options?: useFaasOptions<PathOrData
|
|
17
|
+
options?: useFaasOptions<PathOrData>
|
|
18
18
|
) => FaasDataInjection<FaasData<PathOrData>>
|
|
19
|
-
FaasDataWrapper<PathOrData extends FaasAction>(
|
|
19
|
+
FaasDataWrapper<PathOrData extends FaasAction>(
|
|
20
|
+
props: FaasDataWrapperProps<PathOrData>
|
|
21
|
+
): JSX.Element
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
/**
|
|
@@ -30,7 +32,7 @@ type FaasDataInjection<Data = any> = {
|
|
|
30
32
|
data: Data
|
|
31
33
|
error: any
|
|
32
34
|
promise: Promise<Response<Data>>
|
|
33
|
-
reload(params?: Record<string, any>): Promise<Response<Data
|
|
35
|
+
reload(params?: Record<string, any>): Promise<Response<Data>>
|
|
34
36
|
setData: React.Dispatch<React.SetStateAction<Data>>
|
|
35
37
|
setLoading: React.Dispatch<React.SetStateAction<boolean>>
|
|
36
38
|
setPromise: React.Dispatch<React.SetStateAction<Promise<Response<Data>>>>
|
|
@@ -38,7 +40,9 @@ type FaasDataInjection<Data = any> = {
|
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
type FaasDataWrapperProps<PathOrData extends FaasAction> = {
|
|
41
|
-
render?(
|
|
43
|
+
render?(
|
|
44
|
+
args: FaasDataInjection<FaasData<PathOrData>>
|
|
45
|
+
): JSX.Element | JSX.Element[]
|
|
42
46
|
children?: React.ReactElement<Partial<FaasDataInjection>>
|
|
43
47
|
fallback?: JSX.Element | false
|
|
44
48
|
action: string
|
|
@@ -72,7 +76,7 @@ type useFaasOptions<PathOrData extends FaasAction> = {
|
|
|
72
76
|
* })
|
|
73
77
|
* ```
|
|
74
78
|
*/
|
|
75
|
-
declare function FaasReactClient({ domain, options, onError }: {
|
|
79
|
+
declare function FaasReactClient({ domain, options, onError, }: {
|
|
76
80
|
domain: string;
|
|
77
81
|
options?: Options;
|
|
78
82
|
onError?: (action: string, params: Record<string, any>) => (res: ResponseError) => Promise<void>;
|
package/dist/index.js
CHANGED
|
@@ -30,59 +30,71 @@ function FaasReactClient({
|
|
|
30
30
|
const [params, setParams] = react.useState(defaultParams);
|
|
31
31
|
const [reloadTimes, setReloadTimes] = react.useState(0);
|
|
32
32
|
const [fails, setFails] = react.useState(0);
|
|
33
|
-
react.useEffect(
|
|
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
|
-
|
|
33
|
+
react.useEffect(
|
|
34
|
+
function() {
|
|
35
|
+
if (JSON.stringify(defaultParams) !== JSON.stringify(params)) {
|
|
36
|
+
setParams(defaultParams);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
[JSON.stringify(defaultParams)]
|
|
40
|
+
);
|
|
41
|
+
react.useEffect(
|
|
42
|
+
function() {
|
|
43
|
+
if (!action || (options2 == null ? void 0 : options2.skip)) {
|
|
44
|
+
setLoading(false);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
setLoading(true);
|
|
48
|
+
const controller = new AbortController();
|
|
49
|
+
function send() {
|
|
50
|
+
const request = client.action(
|
|
51
|
+
action,
|
|
52
|
+
options2.params || params,
|
|
53
|
+
{ signal: controller.signal }
|
|
54
|
+
);
|
|
55
|
+
setPromise(request);
|
|
56
|
+
request.then(
|
|
57
|
+
(r) => (options2 == null ? void 0 : options2.setData) ? options2.setData(r.data) : setData(r.data)
|
|
58
|
+
).catch(async (e) => {
|
|
59
|
+
if ((e == null ? void 0 : e.message) === "The user aborted a request." || (e == null ? void 0 : e.message) === "Aborted")
|
|
60
|
+
return;
|
|
61
|
+
if (!fails && typeof (e == null ? void 0 : e.message) === "string" && e.message.indexOf("Failed to fetch") >= 0) {
|
|
62
|
+
console.warn(`FaasReactClient: ${e.message} retry...`);
|
|
63
|
+
setFails(1);
|
|
64
|
+
return send();
|
|
61
65
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
if (onError)
|
|
67
|
+
try {
|
|
68
|
+
await onError(action, params)(e);
|
|
69
|
+
} catch (error2) {
|
|
70
|
+
setError(error2);
|
|
71
|
+
}
|
|
72
|
+
else
|
|
73
|
+
setError(e);
|
|
74
|
+
return Promise.reject(e);
|
|
75
|
+
}).finally(() => setLoading(false));
|
|
76
|
+
}
|
|
77
|
+
if (options2 == null ? void 0 : options2.debounce) {
|
|
78
|
+
const timeout = setTimeout(send, options2.debounce);
|
|
79
|
+
return () => {
|
|
80
|
+
clearTimeout(timeout);
|
|
81
|
+
controller.abort();
|
|
82
|
+
setLoading(false);
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
send();
|
|
69
86
|
return () => {
|
|
70
|
-
clearTimeout(timeout);
|
|
71
87
|
controller.abort();
|
|
72
88
|
setLoading(false);
|
|
73
89
|
};
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
JSON.stringify(options2.params || params),
|
|
83
|
-
reloadTimes,
|
|
84
|
-
options2.skip
|
|
85
|
-
]);
|
|
90
|
+
},
|
|
91
|
+
[
|
|
92
|
+
action,
|
|
93
|
+
JSON.stringify(options2.params || params),
|
|
94
|
+
reloadTimes,
|
|
95
|
+
options2.skip
|
|
96
|
+
]
|
|
97
|
+
);
|
|
86
98
|
return {
|
|
87
99
|
action,
|
|
88
100
|
params,
|
|
@@ -122,14 +134,20 @@ function FaasReactClient({
|
|
|
122
134
|
setData
|
|
123
135
|
});
|
|
124
136
|
const [loaded, setLoaded] = react.useState(false);
|
|
125
|
-
react.useEffect(
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
137
|
+
react.useEffect(
|
|
138
|
+
function() {
|
|
139
|
+
if (!loaded && !request.loading)
|
|
140
|
+
setLoaded(true);
|
|
141
|
+
},
|
|
142
|
+
[request.loading]
|
|
143
|
+
);
|
|
144
|
+
react.useEffect(
|
|
145
|
+
function() {
|
|
146
|
+
if (onDataChange)
|
|
147
|
+
onDataChange(request);
|
|
148
|
+
},
|
|
149
|
+
[JSON.stringify(request.data)]
|
|
150
|
+
);
|
|
133
151
|
if (loaded) {
|
|
134
152
|
if (children)
|
|
135
153
|
return react.cloneElement(children, request);
|
package/dist/index.mjs
CHANGED
|
@@ -28,59 +28,71 @@ function FaasReactClient({
|
|
|
28
28
|
const [params, setParams] = useState(defaultParams);
|
|
29
29
|
const [reloadTimes, setReloadTimes] = useState(0);
|
|
30
30
|
const [fails, setFails] = useState(0);
|
|
31
|
-
useEffect(
|
|
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
|
-
|
|
31
|
+
useEffect(
|
|
32
|
+
function() {
|
|
33
|
+
if (JSON.stringify(defaultParams) !== JSON.stringify(params)) {
|
|
34
|
+
setParams(defaultParams);
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
[JSON.stringify(defaultParams)]
|
|
38
|
+
);
|
|
39
|
+
useEffect(
|
|
40
|
+
function() {
|
|
41
|
+
if (!action || (options2 == null ? void 0 : options2.skip)) {
|
|
42
|
+
setLoading(false);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
setLoading(true);
|
|
46
|
+
const controller = new AbortController();
|
|
47
|
+
function send() {
|
|
48
|
+
const request = client.action(
|
|
49
|
+
action,
|
|
50
|
+
options2.params || params,
|
|
51
|
+
{ signal: controller.signal }
|
|
52
|
+
);
|
|
53
|
+
setPromise(request);
|
|
54
|
+
request.then(
|
|
55
|
+
(r) => (options2 == null ? void 0 : options2.setData) ? options2.setData(r.data) : setData(r.data)
|
|
56
|
+
).catch(async (e) => {
|
|
57
|
+
if ((e == null ? void 0 : e.message) === "The user aborted a request." || (e == null ? void 0 : e.message) === "Aborted")
|
|
58
|
+
return;
|
|
59
|
+
if (!fails && typeof (e == null ? void 0 : e.message) === "string" && e.message.indexOf("Failed to fetch") >= 0) {
|
|
60
|
+
console.warn(`FaasReactClient: ${e.message} retry...`);
|
|
61
|
+
setFails(1);
|
|
62
|
+
return send();
|
|
59
63
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
if (onError)
|
|
65
|
+
try {
|
|
66
|
+
await onError(action, params)(e);
|
|
67
|
+
} catch (error2) {
|
|
68
|
+
setError(error2);
|
|
69
|
+
}
|
|
70
|
+
else
|
|
71
|
+
setError(e);
|
|
72
|
+
return Promise.reject(e);
|
|
73
|
+
}).finally(() => setLoading(false));
|
|
74
|
+
}
|
|
75
|
+
if (options2 == null ? void 0 : options2.debounce) {
|
|
76
|
+
const timeout = setTimeout(send, options2.debounce);
|
|
77
|
+
return () => {
|
|
78
|
+
clearTimeout(timeout);
|
|
79
|
+
controller.abort();
|
|
80
|
+
setLoading(false);
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
send();
|
|
67
84
|
return () => {
|
|
68
|
-
clearTimeout(timeout);
|
|
69
85
|
controller.abort();
|
|
70
86
|
setLoading(false);
|
|
71
87
|
};
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
JSON.stringify(options2.params || params),
|
|
81
|
-
reloadTimes,
|
|
82
|
-
options2.skip
|
|
83
|
-
]);
|
|
88
|
+
},
|
|
89
|
+
[
|
|
90
|
+
action,
|
|
91
|
+
JSON.stringify(options2.params || params),
|
|
92
|
+
reloadTimes,
|
|
93
|
+
options2.skip
|
|
94
|
+
]
|
|
95
|
+
);
|
|
84
96
|
return {
|
|
85
97
|
action,
|
|
86
98
|
params,
|
|
@@ -120,14 +132,20 @@ function FaasReactClient({
|
|
|
120
132
|
setData
|
|
121
133
|
});
|
|
122
134
|
const [loaded, setLoaded] = useState(false);
|
|
123
|
-
useEffect(
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
135
|
+
useEffect(
|
|
136
|
+
function() {
|
|
137
|
+
if (!loaded && !request.loading)
|
|
138
|
+
setLoaded(true);
|
|
139
|
+
},
|
|
140
|
+
[request.loading]
|
|
141
|
+
);
|
|
142
|
+
useEffect(
|
|
143
|
+
function() {
|
|
144
|
+
if (onDataChange)
|
|
145
|
+
onDataChange(request);
|
|
146
|
+
},
|
|
147
|
+
[JSON.stringify(request.data)]
|
|
148
|
+
);
|
|
131
149
|
if (loaded) {
|
|
132
150
|
if (children)
|
|
133
151
|
return cloneElement(children, request);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@faasjs/react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4-beta.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -21,17 +21,17 @@
|
|
|
21
21
|
"files": [
|
|
22
22
|
"dist"
|
|
23
23
|
],
|
|
24
|
-
"dependencies": {
|
|
25
|
-
"@faasjs/browser": "0.0.3-beta.99"
|
|
26
|
-
},
|
|
27
24
|
"peerDependencies": {
|
|
28
|
-
"react": "*"
|
|
25
|
+
"react": "*",
|
|
26
|
+
"@faasjs/browser": "0.0.4-beta.2"
|
|
29
27
|
},
|
|
30
28
|
"devDependencies": {
|
|
31
|
-
"@types/react": "*"
|
|
29
|
+
"@types/react": "*",
|
|
30
|
+
"@faasjs/browser": "0.0.4-beta.2",
|
|
31
|
+
"react": "*"
|
|
32
32
|
},
|
|
33
33
|
"engines": {
|
|
34
|
-
"npm": ">=
|
|
35
|
-
"node": ">=
|
|
34
|
+
"npm": ">=9.0.0",
|
|
35
|
+
"node": ">=18.0.0"
|
|
36
36
|
}
|
|
37
37
|
}
|