@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@refinedev/core",
3
- "version": "4.12.0",
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
- TData extends BaseRecord = BaseRecord,
57
+ TQueryFnData extends BaseRecord = BaseRecord,
58
58
  TError extends HttpError = HttpError,
59
59
  TVariables = {},
60
- TSelectData extends BaseRecord = TData,
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<TData> | UpdateResponse<TData>,
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: TError,
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<TData>,
129
+ GetOneResponse<TQueryFnData>,
128
130
  TError,
129
- GetOneResponse<TSelectData>
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
- TData,
136
- TError,
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
- TData,
144
- TError,
145
+ TResponse,
146
+ TResponseError,
145
147
  TVariables
146
148
  >["mutationOptions"];
147
149
  } & SuccessErrorNotification<
148
- UpdateResponse<TData> | CreateResponse<TData>,
149
- TError,
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
- TData extends BaseRecord = BaseRecord,
158
+ TQueryFnData extends BaseRecord = BaseRecord,
157
159
  TError extends HttpError = HttpError,
158
160
  TVariables = {},
159
- TSelectData extends BaseRecord = TData,
160
- > = ActionFormProps<TData, TError, TVariables, TSelectData> &
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
- TData extends BaseRecord = BaseRecord,
176
+ TQueryFnData extends BaseRecord = BaseRecord,
166
177
  TError extends HttpError = HttpError,
167
178
  TVariables = {},
168
- TSelectData extends BaseRecord = TData,
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<TSelectData>>;
185
+ queryResult?: QueryObserverResult<GetOneResponse<TData>>;
173
186
  mutationResult:
174
- | UseUpdateReturnType<TData, TError, TVariables>
175
- | UseCreateReturnType<TData, TError, TVariables>;
187
+ | UseUpdateReturnType<TResponse, TResponseError, TVariables>
188
+ | UseCreateReturnType<TResponse, TResponseError, TVariables>;
176
189
  formLoading: boolean;
177
190
  onFinish: (
178
191
  values: TVariables,
179
- ) => Promise<CreateResponse<TData> | UpdateResponse<TData> | void>;
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 TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}
193
- * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-references/interfaceReferences#httperror `HttpError`}
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
- TData extends BaseRecord = BaseRecord,
214
+ TQueryFnData extends BaseRecord = BaseRecord,
200
215
  TError extends HttpError = HttpError,
201
216
  TVariables = {},
202
- TSelectData extends BaseRecord = TData,
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
- TSelectData
229
- > = {}): UseFormReturnType<TData, TError, TVariables, TSelectData> => {
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<TData, TError, TSelectData>({
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<TData, TError, TVariables>({
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<TData, TError, TVariables>({
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<TData> | void>((resolve, reject) => {
421
- if (mutationMode !== "pessimistic") {
422
- resolve();
423
- }
454
+ return new Promise<CreateResponse<TResponse> | void>(
455
+ (resolve, reject) => {
456
+ if (mutationMode !== "pessimistic") {
457
+ resolve();
458
+ }
424
459
 
425
- if (!resource) return;
426
-
427
- return mutateCreate(
428
- {
429
- values,
430
- resource: resource.name,
431
- successNotification,
432
- errorNotification,
433
- meta: combinedMeta,
434
- metaData: combinedMeta,
435
- dataProviderName,
436
- invalidates,
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
- onError: (error: TError, _, context) => {
451
- if (onMutationError) {
452
- return onMutationError(error, values, context);
453
- }
454
- reject();
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<TData, TError, TVariables> = {
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<TData> | void>((resolve, reject) => {
498
- if (mutationMode !== "pessimistic") {
499
- resolve();
500
- }
501
- return setTimeout(() => {
502
- mutateUpdate(variables, {
503
- onSuccess: (data, _, context) => {
504
- if (onMutationSuccess) {
505
- onMutationSuccess(data, values, context);
506
- }
507
-
508
- if (mutationMode === "pessimistic") {
509
- onSuccess();
510
- }
511
-
512
- resolve(data);
513
- },
514
- onError: (error: TError, _, context) => {
515
- if (onMutationError) {
516
- return onMutationError(error, values, context);
517
- }
518
- reject();
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 = {