@refinedev/core 4.12.0 → 4.13.0
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/CHANGELOG.md +19 -0
- package/dist/components/gh-banner/index.d.ts +0 -1
- package/dist/components/gh-banner/index.d.ts.map +1 -1
- package/dist/esm/index.js +6 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/hooks/form/useForm.d.ts +18 -16
- package/dist/hooks/form/useForm.d.ts.map +1 -1
- package/dist/iife/index.js +5 -5
- package/dist/iife/index.js.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/hooks/form/useForm.ts +131 -93
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@refinedev/core",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.13.0",
|
|
4
4
|
"description": "refine is a React-based framework for building internal tools, rapidly. It ships with Ant Design System, an enterprise-level UI toolkit.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -54,10 +54,12 @@ export type ActionParams = {
|
|
|
54
54
|
};
|
|
55
55
|
|
|
56
56
|
type ActionFormProps<
|
|
57
|
-
|
|
57
|
+
TQueryFnData extends BaseRecord = BaseRecord,
|
|
58
58
|
TError extends HttpError = HttpError,
|
|
59
59
|
TVariables = {},
|
|
60
|
-
|
|
60
|
+
TData extends BaseRecord = TQueryFnData,
|
|
61
|
+
TResponse extends BaseRecord = TData,
|
|
62
|
+
TResponseError extends HttpError = TError,
|
|
61
63
|
> = {
|
|
62
64
|
/**
|
|
63
65
|
* Resource name for API data interactions
|
|
@@ -93,7 +95,7 @@ type ActionFormProps<
|
|
|
93
95
|
* Called when a mutation is successful
|
|
94
96
|
*/
|
|
95
97
|
onMutationSuccess?: (
|
|
96
|
-
data: CreateResponse<
|
|
98
|
+
data: CreateResponse<TResponse> | UpdateResponse<TResponse>,
|
|
97
99
|
variables: TVariables,
|
|
98
100
|
context: any,
|
|
99
101
|
) => void;
|
|
@@ -101,7 +103,7 @@ type ActionFormProps<
|
|
|
101
103
|
* Called when a mutation encounters an error
|
|
102
104
|
*/
|
|
103
105
|
onMutationError?: (
|
|
104
|
-
error:
|
|
106
|
+
error: TResponseError,
|
|
105
107
|
variables: TVariables,
|
|
106
108
|
context: any,
|
|
107
109
|
) => void;
|
|
@@ -124,59 +126,70 @@ type ActionFormProps<
|
|
|
124
126
|
* react-query's [useQuery](https://tanstack.com/query/v4/docs/reference/useQuery) options of useOne hook used while in edit mode.
|
|
125
127
|
*/
|
|
126
128
|
queryOptions?: UseQueryOptions<
|
|
127
|
-
GetOneResponse<
|
|
129
|
+
GetOneResponse<TQueryFnData>,
|
|
128
130
|
TError,
|
|
129
|
-
GetOneResponse<
|
|
131
|
+
GetOneResponse<TData>
|
|
130
132
|
>;
|
|
131
133
|
/**
|
|
132
134
|
* react-query's [useMutation](https://tanstack.com/query/v4/docs/reference/useMutation) options of useCreate hook used while submitting in create and clone modes.
|
|
133
135
|
*/
|
|
134
136
|
createMutationOptions?: UseCreateProps<
|
|
135
|
-
|
|
136
|
-
|
|
137
|
+
TResponse,
|
|
138
|
+
TResponseError,
|
|
137
139
|
TVariables
|
|
138
140
|
>["mutationOptions"];
|
|
139
141
|
/**
|
|
140
142
|
* react-query's [useMutation](https://tanstack.com/query/v4/docs/reference/useMutation) options of useUpdate hook used while submitting in edit mode.
|
|
141
143
|
*/
|
|
142
144
|
updateMutationOptions?: UseUpdateProps<
|
|
143
|
-
|
|
144
|
-
|
|
145
|
+
TResponse,
|
|
146
|
+
TResponseError,
|
|
145
147
|
TVariables
|
|
146
148
|
>["mutationOptions"];
|
|
147
149
|
} & SuccessErrorNotification<
|
|
148
|
-
UpdateResponse<
|
|
149
|
-
|
|
150
|
+
UpdateResponse<TResponse> | CreateResponse<TResponse>,
|
|
151
|
+
TResponseError,
|
|
150
152
|
{ id: BaseKey; values: TVariables } | TVariables
|
|
151
153
|
> &
|
|
152
154
|
ActionParams &
|
|
153
155
|
LiveModeProps;
|
|
154
156
|
|
|
155
157
|
export type UseFormProps<
|
|
156
|
-
|
|
158
|
+
TQueryFnData extends BaseRecord = BaseRecord,
|
|
157
159
|
TError extends HttpError = HttpError,
|
|
158
160
|
TVariables = {},
|
|
159
|
-
|
|
160
|
-
|
|
161
|
+
TData extends BaseRecord = TQueryFnData,
|
|
162
|
+
TResponse extends BaseRecord = TData,
|
|
163
|
+
TResponseError extends HttpError = TError,
|
|
164
|
+
> = ActionFormProps<
|
|
165
|
+
TQueryFnData,
|
|
166
|
+
TError,
|
|
167
|
+
TVariables,
|
|
168
|
+
TData,
|
|
169
|
+
TResponse,
|
|
170
|
+
TResponseError
|
|
171
|
+
> &
|
|
161
172
|
ActionParams &
|
|
162
173
|
LiveModeProps;
|
|
163
174
|
|
|
164
175
|
export type UseFormReturnType<
|
|
165
|
-
|
|
176
|
+
TQueryFnData extends BaseRecord = BaseRecord,
|
|
166
177
|
TError extends HttpError = HttpError,
|
|
167
178
|
TVariables = {},
|
|
168
|
-
|
|
179
|
+
TData extends BaseRecord = TQueryFnData,
|
|
180
|
+
TResponse extends BaseRecord = TData,
|
|
181
|
+
TResponseError extends HttpError = TError,
|
|
169
182
|
> = {
|
|
170
183
|
id?: BaseKey;
|
|
171
184
|
setId: Dispatch<SetStateAction<BaseKey | undefined>>;
|
|
172
|
-
queryResult?: QueryObserverResult<GetOneResponse<
|
|
185
|
+
queryResult?: QueryObserverResult<GetOneResponse<TData>>;
|
|
173
186
|
mutationResult:
|
|
174
|
-
| UseUpdateReturnType<
|
|
175
|
-
| UseCreateReturnType<
|
|
187
|
+
| UseUpdateReturnType<TResponse, TResponseError, TVariables>
|
|
188
|
+
| UseCreateReturnType<TResponse, TResponseError, TVariables>;
|
|
176
189
|
formLoading: boolean;
|
|
177
190
|
onFinish: (
|
|
178
191
|
values: TVariables,
|
|
179
|
-
) => Promise<CreateResponse<
|
|
192
|
+
) => Promise<CreateResponse<TResponse> | UpdateResponse<TResponse> | void>;
|
|
180
193
|
redirect: (
|
|
181
194
|
redirect: RedirectAction,
|
|
182
195
|
idFromFunction?: BaseKey | undefined,
|
|
@@ -189,17 +202,21 @@ export type UseFormReturnType<
|
|
|
189
202
|
*
|
|
190
203
|
* @see {@link https://refine.dev/docs/api-references/hooks/form/useForm} for more details.
|
|
191
204
|
*
|
|
192
|
-
* @typeParam
|
|
193
|
-
* @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-
|
|
205
|
+
* @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}
|
|
206
|
+
* @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}
|
|
194
207
|
* @typeParam TVariables - Values for params. default `{}`
|
|
195
|
-
*
|
|
208
|
+
* @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`
|
|
209
|
+
* @typeParam TResponse - Result data returned by the mutation function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TData`
|
|
210
|
+
* @typeParam TResponseError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}. Defaults to `TError`
|
|
196
211
|
*
|
|
197
212
|
*/
|
|
198
213
|
export const useForm = <
|
|
199
|
-
|
|
214
|
+
TQueryFnData extends BaseRecord = BaseRecord,
|
|
200
215
|
TError extends HttpError = HttpError,
|
|
201
216
|
TVariables = {},
|
|
202
|
-
|
|
217
|
+
TData extends BaseRecord = TQueryFnData,
|
|
218
|
+
TResponse extends BaseRecord = TData,
|
|
219
|
+
TResponseError extends HttpError = TError,
|
|
203
220
|
>({
|
|
204
221
|
resource: resourceFromProps,
|
|
205
222
|
action: actionFromProps,
|
|
@@ -222,11 +239,20 @@ export const useForm = <
|
|
|
222
239
|
createMutationOptions,
|
|
223
240
|
updateMutationOptions,
|
|
224
241
|
}: UseFormProps<
|
|
242
|
+
TQueryFnData,
|
|
243
|
+
TError,
|
|
244
|
+
TVariables,
|
|
225
245
|
TData,
|
|
246
|
+
TResponse,
|
|
247
|
+
TResponseError
|
|
248
|
+
> = {}): UseFormReturnType<
|
|
249
|
+
TQueryFnData,
|
|
226
250
|
TError,
|
|
227
251
|
TVariables,
|
|
228
|
-
|
|
229
|
-
|
|
252
|
+
TData,
|
|
253
|
+
TResponse,
|
|
254
|
+
TResponseError
|
|
255
|
+
> => {
|
|
230
256
|
const { options } = useRefineContext();
|
|
231
257
|
const { resources } = useResource();
|
|
232
258
|
const routerType = useRouterType();
|
|
@@ -366,7 +392,7 @@ export const useForm = <
|
|
|
366
392
|
|
|
367
393
|
const enableQuery = id !== undefined && (isEdit || isClone);
|
|
368
394
|
|
|
369
|
-
const queryResult = useOne<
|
|
395
|
+
const queryResult = useOne<TQueryFnData, TError, TData>({
|
|
370
396
|
resource: resource?.name,
|
|
371
397
|
id: id ?? "",
|
|
372
398
|
queryOptions: {
|
|
@@ -383,13 +409,21 @@ export const useForm = <
|
|
|
383
409
|
|
|
384
410
|
const { isFetching: isFetchingQuery } = queryResult;
|
|
385
411
|
|
|
386
|
-
const mutationResultCreate = useCreate<
|
|
412
|
+
const mutationResultCreate = useCreate<
|
|
413
|
+
TResponse,
|
|
414
|
+
TResponseError,
|
|
415
|
+
TVariables
|
|
416
|
+
>({
|
|
387
417
|
mutationOptions: createMutationOptions,
|
|
388
418
|
});
|
|
389
419
|
const { mutate: mutateCreate, isLoading: isLoadingCreate } =
|
|
390
420
|
mutationResultCreate;
|
|
391
421
|
|
|
392
|
-
const mutationResultUpdate = useUpdate<
|
|
422
|
+
const mutationResultUpdate = useUpdate<
|
|
423
|
+
TResponse,
|
|
424
|
+
TResponseError,
|
|
425
|
+
TVariables
|
|
426
|
+
>({
|
|
393
427
|
mutationOptions: updateMutationOptions,
|
|
394
428
|
});
|
|
395
429
|
const { mutate: mutateUpdate, isLoading: isLoadingUpdate } =
|
|
@@ -417,45 +451,47 @@ export const useForm = <
|
|
|
417
451
|
});
|
|
418
452
|
}
|
|
419
453
|
|
|
420
|
-
return new Promise<CreateResponse<
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
454
|
+
return new Promise<CreateResponse<TResponse> | void>(
|
|
455
|
+
(resolve, reject) => {
|
|
456
|
+
if (mutationMode !== "pessimistic") {
|
|
457
|
+
resolve();
|
|
458
|
+
}
|
|
424
459
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
},
|
|
438
|
-
{
|
|
439
|
-
onSuccess: (data, _, context) => {
|
|
440
|
-
if (onMutationSuccess) {
|
|
441
|
-
onMutationSuccess(data, values, context);
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
const responseId = data?.data?.id;
|
|
445
|
-
|
|
446
|
-
onSuccess(responseId);
|
|
447
|
-
|
|
448
|
-
resolve(data);
|
|
460
|
+
if (!resource) return;
|
|
461
|
+
|
|
462
|
+
return mutateCreate(
|
|
463
|
+
{
|
|
464
|
+
values,
|
|
465
|
+
resource: resource.name,
|
|
466
|
+
successNotification,
|
|
467
|
+
errorNotification,
|
|
468
|
+
meta: combinedMeta,
|
|
469
|
+
metaData: combinedMeta,
|
|
470
|
+
dataProviderName,
|
|
471
|
+
invalidates,
|
|
449
472
|
},
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
473
|
+
{
|
|
474
|
+
onSuccess: (data, _, context) => {
|
|
475
|
+
if (onMutationSuccess) {
|
|
476
|
+
onMutationSuccess(data, values, context);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
const responseId = data?.data?.id;
|
|
480
|
+
|
|
481
|
+
onSuccess(responseId);
|
|
482
|
+
|
|
483
|
+
resolve(data);
|
|
484
|
+
},
|
|
485
|
+
onError: (error: TResponseError, _, context) => {
|
|
486
|
+
if (onMutationError) {
|
|
487
|
+
return onMutationError(error, values, context);
|
|
488
|
+
}
|
|
489
|
+
reject();
|
|
490
|
+
},
|
|
455
491
|
},
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
492
|
+
);
|
|
493
|
+
},
|
|
494
|
+
);
|
|
459
495
|
};
|
|
460
496
|
|
|
461
497
|
const onFinishUpdate = async (values: TVariables) => {
|
|
@@ -463,7 +499,7 @@ export const useForm = <
|
|
|
463
499
|
|
|
464
500
|
if (!resource) return;
|
|
465
501
|
|
|
466
|
-
const variables: UpdateParams<
|
|
502
|
+
const variables: UpdateParams<TResponse, TResponseError, TVariables> = {
|
|
467
503
|
id: id ?? "",
|
|
468
504
|
values,
|
|
469
505
|
resource: resource.name,
|
|
@@ -494,32 +530,34 @@ export const useForm = <
|
|
|
494
530
|
}
|
|
495
531
|
|
|
496
532
|
// setTimeout is required to make onSuccess e.g. callbacks to work if component unmounts i.e. on route change
|
|
497
|
-
return new Promise<UpdateResponse<
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
onMutationSuccess
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
533
|
+
return new Promise<UpdateResponse<TResponse> | void>(
|
|
534
|
+
(resolve, reject) => {
|
|
535
|
+
if (mutationMode !== "pessimistic") {
|
|
536
|
+
resolve();
|
|
537
|
+
}
|
|
538
|
+
return setTimeout(() => {
|
|
539
|
+
mutateUpdate(variables, {
|
|
540
|
+
onSuccess: (data, _, context) => {
|
|
541
|
+
if (onMutationSuccess) {
|
|
542
|
+
onMutationSuccess(data, values, context);
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
if (mutationMode === "pessimistic") {
|
|
546
|
+
onSuccess();
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
resolve(data);
|
|
550
|
+
},
|
|
551
|
+
onError: (error: TResponseError, _, context) => {
|
|
552
|
+
if (onMutationError) {
|
|
553
|
+
return onMutationError(error, values, context);
|
|
554
|
+
}
|
|
555
|
+
reject();
|
|
556
|
+
},
|
|
557
|
+
});
|
|
520
558
|
});
|
|
521
|
-
}
|
|
522
|
-
|
|
559
|
+
},
|
|
560
|
+
);
|
|
523
561
|
};
|
|
524
562
|
|
|
525
563
|
const createResult = {
|