@refinedev/antd 5.37.4 → 5.37.5

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.
Files changed (162) hide show
  1. package/CHANGELOG.md +1760 -1778
  2. package/dist/components/autoSaveIndicator/index.d.ts.map +1 -1
  3. package/dist/components/breadcrumb/index.d.ts.map +1 -1
  4. package/dist/components/buttons/create/index.d.ts.map +1 -1
  5. package/dist/components/buttons/delete/index.d.ts.map +1 -1
  6. package/dist/components/buttons/import/index.d.ts.map +1 -1
  7. package/dist/components/buttons/types.d.ts.map +1 -1
  8. package/dist/components/crud/edit/index.d.ts.map +1 -1
  9. package/dist/components/crud/list/index.d.ts.map +1 -1
  10. package/dist/components/crud/show/index.d.ts.map +1 -1
  11. package/dist/components/crud/types.d.ts.map +1 -1
  12. package/dist/components/fields/types.d.ts.map +1 -1
  13. package/dist/components/layout/sider/index.d.ts.map +1 -1
  14. package/dist/components/layout/title/index.d.ts.map +1 -1
  15. package/dist/components/layout/types.d.ts.map +1 -1
  16. package/dist/components/pageHeader/index.d.ts.map +1 -1
  17. package/dist/components/pages/auth/components/forgotPassword/index.d.ts.map +1 -1
  18. package/dist/components/pages/auth/components/login/index.d.ts.map +1 -1
  19. package/dist/components/pages/auth/components/register/index.d.ts.map +1 -1
  20. package/dist/components/pages/auth/components/updatePassword/index.d.ts.map +1 -1
  21. package/dist/components/pages/auth/index.d.ts.map +1 -1
  22. package/dist/components/pages/login/index.d.ts.map +1 -1
  23. package/dist/components/pages/ready/index.d.ts.map +1 -1
  24. package/dist/components/table/components/filterDropdown/index.d.ts.map +1 -1
  25. package/dist/components/themedLayout/header/index.d.ts.map +1 -1
  26. package/dist/components/themedLayout/types.d.ts.map +1 -1
  27. package/dist/components/themedLayoutV2/header/index.d.ts.map +1 -1
  28. package/dist/components/themedLayoutV2/index.d.ts.map +1 -1
  29. package/dist/components/themedLayoutV2/sider/index.d.ts.map +1 -1
  30. package/dist/components/themedLayoutV2/types.d.ts.map +1 -1
  31. package/dist/components/undoableNotification/index.d.ts.map +1 -1
  32. package/dist/contexts/index.d.ts.map +1 -1
  33. package/dist/contexts/themedLayoutContext/IThemedLayoutContext.d.ts.map +1 -1
  34. package/dist/contexts/themedLayoutContext/index.d.ts.map +1 -1
  35. package/dist/definitions/table/index.d.ts.map +1 -1
  36. package/dist/definitions/themes/index.d.ts.map +1 -1
  37. package/dist/esm/index.js +1 -1
  38. package/dist/esm/index.js.map +1 -1
  39. package/dist/hooks/fields/useCheckboxGroup/index.d.ts.map +1 -1
  40. package/dist/hooks/fields/useRadioGroup/index.d.ts.map +1 -1
  41. package/dist/hooks/fields/useSelect/index.d.ts.map +1 -1
  42. package/dist/hooks/form/index.d.ts.map +1 -1
  43. package/dist/hooks/form/useDrawerForm/index.d.ts.map +1 -1
  44. package/dist/hooks/form/useDrawerForm/useDrawerForm.d.ts.map +1 -1
  45. package/dist/hooks/form/useForm.d.ts.map +1 -1
  46. package/dist/hooks/form/useModalForm/index.d.ts.map +1 -1
  47. package/dist/hooks/form/useModalForm/useModalForm.d.ts.map +1 -1
  48. package/dist/hooks/form/useStepsForm/index.d.ts.map +1 -1
  49. package/dist/hooks/form/useStepsForm/useStepsForm.d.ts.map +1 -1
  50. package/dist/hooks/import/index.d.ts.map +1 -1
  51. package/dist/hooks/list/useSimpleList/useSimpleList.d.ts.map +1 -1
  52. package/dist/hooks/modal/useModal/index.d.ts.map +1 -1
  53. package/dist/hooks/table/useEditableTable/useEditableTable.d.ts.map +1 -1
  54. package/dist/hooks/table/useTable/paginationLink.d.ts.map +1 -1
  55. package/dist/hooks/table/useTable/useTable.d.ts.map +1 -1
  56. package/dist/hooks/useFileUploadState/index.d.ts.map +1 -1
  57. package/dist/hooks/useSiderVisible/index.d.ts.map +1 -1
  58. package/dist/iife/index.js +10 -10
  59. package/dist/iife/index.js.map +1 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1 -1
  62. package/dist/index.js.map +1 -1
  63. package/dist/interfaces/field.d.ts.map +1 -1
  64. package/dist/interfaces/index.d.ts.map +1 -1
  65. package/dist/interfaces/upload.d.ts.map +1 -1
  66. package/package.json +32 -32
  67. package/refine.config.js +497 -524
  68. package/src/components/autoSaveIndicator/index.tsx +69 -69
  69. package/src/components/breadcrumb/index.tsx +63 -65
  70. package/src/components/buttons/clone/index.tsx +86 -86
  71. package/src/components/buttons/create/index.tsx +85 -86
  72. package/src/components/buttons/delete/index.tsx +114 -119
  73. package/src/components/buttons/edit/index.tsx +86 -86
  74. package/src/components/buttons/export/index.tsx +17 -17
  75. package/src/components/buttons/import/index.tsx +19 -20
  76. package/src/components/buttons/list/index.tsx +105 -105
  77. package/src/components/buttons/refresh/index.tsx +50 -50
  78. package/src/components/buttons/save/index.tsx +17 -17
  79. package/src/components/buttons/show/index.tsx +86 -86
  80. package/src/components/buttons/types.ts +20 -20
  81. package/src/components/crud/create/index.tsx +120 -120
  82. package/src/components/crud/edit/index.tsx +205 -207
  83. package/src/components/crud/list/index.tsx +88 -90
  84. package/src/components/crud/show/index.tsx +175 -185
  85. package/src/components/crud/types.ts +41 -56
  86. package/src/components/fields/boolean/index.tsx +11 -11
  87. package/src/components/fields/date/index.tsx +13 -13
  88. package/src/components/fields/email/index.tsx +5 -5
  89. package/src/components/fields/file/index.tsx +8 -8
  90. package/src/components/fields/image/index.tsx +4 -4
  91. package/src/components/fields/markdown/index.tsx +9 -9
  92. package/src/components/fields/number/index.tsx +17 -17
  93. package/src/components/fields/tag/index.tsx +1 -1
  94. package/src/components/fields/text/index.tsx +1 -1
  95. package/src/components/fields/types.ts +18 -18
  96. package/src/components/fields/url/index.tsx +8 -8
  97. package/src/components/layout/header/index.tsx +25 -25
  98. package/src/components/layout/index.tsx +30 -30
  99. package/src/components/layout/sider/index.tsx +238 -246
  100. package/src/components/layout/sider/styles.ts +5 -5
  101. package/src/components/layout/title/index.tsx +40 -40
  102. package/src/components/layout/types.ts +6 -6
  103. package/src/components/pageHeader/index.tsx +44 -44
  104. package/src/components/pages/auth/components/forgotPassword/index.tsx +177 -180
  105. package/src/components/pages/auth/components/login/index.tsx +258 -271
  106. package/src/components/pages/auth/components/register/index.tsx +247 -263
  107. package/src/components/pages/auth/components/styles.ts +16 -16
  108. package/src/components/pages/auth/components/updatePassword/index.tsx +160 -174
  109. package/src/components/pages/auth/index.tsx +23 -23
  110. package/src/components/pages/error/index.tsx +57 -57
  111. package/src/components/pages/login/index.tsx +120 -146
  112. package/src/components/pages/login/styles.ts +12 -12
  113. package/src/components/pages/ready/index.tsx +72 -80
  114. package/src/components/pages/welcome/index.tsx +1 -1
  115. package/src/components/table/components/filterDropdown/index.tsx +89 -92
  116. package/src/components/themedLayout/header/index.tsx +28 -32
  117. package/src/components/themedLayout/index.tsx +30 -30
  118. package/src/components/themedLayout/sider/index.tsx +279 -279
  119. package/src/components/themedLayout/sider/styles.ts +5 -5
  120. package/src/components/themedLayout/title/index.tsx +66 -66
  121. package/src/components/themedLayout/types.ts +8 -8
  122. package/src/components/themedLayoutV2/header/index.tsx +37 -41
  123. package/src/components/themedLayoutV2/index.tsx +34 -36
  124. package/src/components/themedLayoutV2/sider/index.tsx +309 -313
  125. package/src/components/themedLayoutV2/sider/styles.ts +5 -5
  126. package/src/components/themedLayoutV2/title/index.tsx +66 -66
  127. package/src/components/themedLayoutV2/types.ts +9 -9
  128. package/src/components/undoableNotification/index.tsx +31 -31
  129. package/src/contexts/index.ts +2 -2
  130. package/src/contexts/themedLayoutContext/IThemedLayoutContext.ts +4 -4
  131. package/src/contexts/themedLayoutContext/index.tsx +22 -22
  132. package/src/definitions/table/index.ts +81 -82
  133. package/src/definitions/themes/index.ts +35 -35
  134. package/src/definitions/upload/index.ts +17 -17
  135. package/src/hooks/fields/useCheckboxGroup/index.ts +64 -64
  136. package/src/hooks/fields/useRadioGroup/index.ts +60 -63
  137. package/src/hooks/fields/useSelect/index.ts +30 -30
  138. package/src/hooks/form/index.ts +10 -10
  139. package/src/hooks/form/useDrawerForm/index.ts +4 -4
  140. package/src/hooks/form/useDrawerForm/useDrawerForm.ts +257 -261
  141. package/src/hooks/form/useForm.ts +256 -259
  142. package/src/hooks/form/useModalForm/index.ts +3 -3
  143. package/src/hooks/form/useModalForm/useModalForm.ts +289 -295
  144. package/src/hooks/form/useStepsForm/index.ts +3 -3
  145. package/src/hooks/form/useStepsForm/useStepsForm.ts +96 -96
  146. package/src/hooks/import/index.tsx +104 -106
  147. package/src/hooks/list/useSimpleList/useSimpleList.ts +179 -185
  148. package/src/hooks/modal/useModal/index.tsx +24 -24
  149. package/src/hooks/table/useEditableTable/useEditableTable.ts +85 -85
  150. package/src/hooks/table/useTable/paginationLink.tsx +17 -17
  151. package/src/hooks/table/useTable/useTable.ts +199 -205
  152. package/src/hooks/useFileUploadState/index.ts +20 -20
  153. package/src/hooks/useSiderVisible/index.ts +16 -16
  154. package/src/hooks/useThemedLayoutContext/index.ts +12 -12
  155. package/src/index.tsx +4 -4
  156. package/src/interfaces/field.ts +1 -1
  157. package/src/interfaces/index.ts +7 -8
  158. package/src/interfaces/upload.ts +7 -7
  159. package/src/providers/notificationProvider/index.tsx +78 -78
  160. package/src/types/index.d.ts +2 -2
  161. package/src/types/sunflower.d.ts +68 -68
  162. package/tsconfig.json +26 -26
@@ -2,83 +2,83 @@ import React, { useCallback } from "react";
2
2
  import { UseFormConfig } from "sunflower-antd";
3
3
  import { FormInstance, FormProps, DrawerProps, ButtonProps } from "antd";
4
4
  import {
5
- useTranslate,
6
- useWarnAboutChange,
7
- UseFormProps as UseFormPropsCore,
8
- HttpError,
9
- LiveModeProps,
10
- BaseRecord,
11
- FormWithSyncWithLocationParams,
12
- BaseKey,
13
- useResource,
14
- useParsed,
15
- useGo,
16
- useModal,
17
- useInvalidate,
5
+ useTranslate,
6
+ useWarnAboutChange,
7
+ UseFormProps as UseFormPropsCore,
8
+ HttpError,
9
+ LiveModeProps,
10
+ BaseRecord,
11
+ FormWithSyncWithLocationParams,
12
+ BaseKey,
13
+ useResource,
14
+ useParsed,
15
+ useGo,
16
+ useModal,
17
+ useInvalidate,
18
18
  } from "@refinedev/core";
19
19
 
20
20
  import { useForm, UseFormProps, UseFormReturnType } from "../useForm";
21
21
  import { DeleteButtonProps } from "../../../components";
22
22
 
23
23
  export interface UseDrawerFormConfig extends UseFormConfig {
24
- action: "show" | "edit" | "create" | "clone";
24
+ action: "show" | "edit" | "create" | "clone";
25
25
  }
26
26
 
27
27
  export type UseDrawerFormProps<
28
- TQueryFnData extends BaseRecord = BaseRecord,
29
- TError extends HttpError = HttpError,
30
- TVariables = {},
31
- TData extends BaseRecord = TQueryFnData,
32
- TResponse extends BaseRecord = TData,
33
- TResponseError extends HttpError = TError,
28
+ TQueryFnData extends BaseRecord = BaseRecord,
29
+ TError extends HttpError = HttpError,
30
+ TVariables = {},
31
+ TData extends BaseRecord = TQueryFnData,
32
+ TResponse extends BaseRecord = TData,
33
+ TResponseError extends HttpError = TError,
34
34
  > = UseFormPropsCore<
35
+ TQueryFnData,
36
+ TError,
37
+ TVariables,
38
+ TData,
39
+ TResponse,
40
+ TResponseError
41
+ > &
42
+ UseFormProps<
35
43
  TQueryFnData,
36
44
  TError,
37
45
  TVariables,
38
46
  TData,
39
47
  TResponse,
40
48
  TResponseError
41
- > &
42
- UseFormProps<
43
- TQueryFnData,
44
- TError,
45
- TVariables,
46
- TData,
47
- TResponse,
48
- TResponseError
49
- > &
50
- UseDrawerFormConfig &
51
- LiveModeProps &
52
- FormWithSyncWithLocationParams & {
53
- defaultVisible?: boolean;
54
- autoSubmitClose?: boolean;
55
- autoResetForm?: boolean;
56
- };
49
+ > &
50
+ UseDrawerFormConfig &
51
+ LiveModeProps &
52
+ FormWithSyncWithLocationParams & {
53
+ defaultVisible?: boolean;
54
+ autoSubmitClose?: boolean;
55
+ autoResetForm?: boolean;
56
+ };
57
57
 
58
58
  export type UseDrawerFormReturnType<
59
- TQueryFnData extends BaseRecord = BaseRecord,
60
- TError extends HttpError = HttpError,
61
- TVariables = {},
62
- TData extends BaseRecord = TQueryFnData,
63
- TResponse extends BaseRecord = TData,
64
- TResponseError extends HttpError = TError,
59
+ TQueryFnData extends BaseRecord = BaseRecord,
60
+ TError extends HttpError = HttpError,
61
+ TVariables = {},
62
+ TData extends BaseRecord = TQueryFnData,
63
+ TResponse extends BaseRecord = TData,
64
+ TResponseError extends HttpError = TError,
65
65
  > = UseFormReturnType<
66
- TQueryFnData,
67
- TError,
68
- TVariables,
69
- TData,
70
- TResponse,
71
- TResponseError
66
+ TQueryFnData,
67
+ TError,
68
+ TVariables,
69
+ TData,
70
+ TResponse,
71
+ TResponseError
72
72
  > & {
73
- formProps: FormProps<TVariables> & {
74
- form: FormInstance<TVariables>;
75
- };
76
- show: (id?: BaseKey) => void;
77
- close: () => void;
78
- drawerProps: DrawerProps;
79
- saveButtonProps: ButtonProps;
80
- deleteButtonProps: DeleteButtonProps;
81
- formLoading: boolean;
73
+ formProps: FormProps<TVariables> & {
74
+ form: FormInstance<TVariables>;
75
+ };
76
+ show: (id?: BaseKey) => void;
77
+ close: () => void;
78
+ drawerProps: DrawerProps;
79
+ saveButtonProps: ButtonProps;
80
+ deleteButtonProps: DeleteButtonProps;
81
+ formLoading: boolean;
82
82
  };
83
83
 
84
84
  /**
@@ -94,236 +94,232 @@ export type UseDrawerFormReturnType<
94
94
  */
95
95
 
96
96
  export const useDrawerForm = <
97
- TQueryFnData extends BaseRecord = BaseRecord,
98
- TError extends HttpError = HttpError,
99
- TVariables = {},
100
- TData extends BaseRecord = TQueryFnData,
101
- TResponse extends BaseRecord = TData,
102
- TResponseError extends HttpError = TError,
97
+ TQueryFnData extends BaseRecord = BaseRecord,
98
+ TError extends HttpError = HttpError,
99
+ TVariables = {},
100
+ TData extends BaseRecord = TQueryFnData,
101
+ TResponse extends BaseRecord = TData,
102
+ TResponseError extends HttpError = TError,
103
103
  >({
104
- syncWithLocation,
105
- defaultVisible = false,
106
- autoSubmitClose = true,
107
- autoResetForm = true,
108
- autoSave,
109
- invalidates,
110
- ...rest
104
+ syncWithLocation,
105
+ defaultVisible = false,
106
+ autoSubmitClose = true,
107
+ autoResetForm = true,
108
+ autoSave,
109
+ invalidates,
110
+ ...rest
111
111
  }: UseDrawerFormProps<
112
- TQueryFnData,
113
- TError,
114
- TVariables,
115
- TData,
116
- TResponse,
117
- TResponseError
112
+ TQueryFnData,
113
+ TError,
114
+ TVariables,
115
+ TData,
116
+ TResponse,
117
+ TResponseError
118
118
  >): UseDrawerFormReturnType<
119
- TQueryFnData,
120
- TError,
121
- TVariables,
122
- TData,
123
- TResponse,
124
- TResponseError
119
+ TQueryFnData,
120
+ TError,
121
+ TVariables,
122
+ TData,
123
+ TResponse,
124
+ TResponseError
125
125
  > => {
126
- const invalidate = useInvalidate();
127
- const [initiallySynced, setInitiallySynced] = React.useState(false);
128
-
129
- const { visible, show, close } = useModal({
130
- defaultVisible,
131
- });
132
-
133
- const {
134
- resource,
135
- action: actionFromParams,
136
- identifier,
137
- } = useResource(rest.resource);
126
+ const invalidate = useInvalidate();
127
+ const [initiallySynced, setInitiallySynced] = React.useState(false);
138
128
 
139
- const parsed = useParsed();
140
- const go = useGo();
129
+ const { visible, show, close } = useModal({
130
+ defaultVisible,
131
+ });
141
132
 
142
- const action = rest.action ?? actionFromParams ?? "";
133
+ const {
134
+ resource,
135
+ action: actionFromParams,
136
+ identifier,
137
+ } = useResource(rest.resource);
143
138
 
144
- const syncingId = !(
145
- typeof syncWithLocation === "object" &&
146
- syncWithLocation?.syncId === false
147
- );
139
+ const parsed = useParsed();
140
+ const go = useGo();
148
141
 
149
- const syncWithLocationKey =
150
- typeof syncWithLocation === "object" && "key" in syncWithLocation
151
- ? syncWithLocation.key
152
- : resource && action && syncWithLocation
153
- ? `drawer-${resource?.identifier ?? resource?.name}-${action}`
154
- : undefined;
142
+ const action = rest.action ?? actionFromParams ?? "";
155
143
 
156
- const useFormProps = useForm<
157
- TQueryFnData,
158
- TError,
159
- TVariables,
160
- TData,
161
- TResponse,
162
- TResponseError
163
- >({
164
- meta: {
165
- ...(syncWithLocationKey
166
- ? { [syncWithLocationKey]: undefined }
167
- : {}),
168
- ...rest.meta,
169
- },
170
- autoSave,
171
- invalidates,
172
- ...rest,
173
- });
144
+ const syncingId = !(
145
+ typeof syncWithLocation === "object" && syncWithLocation?.syncId === false
146
+ );
174
147
 
175
- const { form, formProps, formLoading, id, setId, onFinish, autoSaveProps } =
176
- useFormProps;
148
+ const syncWithLocationKey =
149
+ typeof syncWithLocation === "object" && "key" in syncWithLocation
150
+ ? syncWithLocation.key
151
+ : resource && action && syncWithLocation
152
+ ? `drawer-${resource?.identifier ?? resource?.name}-${action}`
153
+ : undefined;
177
154
 
178
- React.useEffect(() => {
179
- if (initiallySynced === false && syncWithLocationKey) {
180
- const openStatus = parsed?.params?.[syncWithLocationKey]?.open;
181
- if (typeof openStatus === "boolean") {
182
- openStatus ? show() : close();
183
- } else if (typeof openStatus === "string") {
184
- if (openStatus === "true") {
185
- show();
186
- }
187
- }
155
+ const useFormProps = useForm<
156
+ TQueryFnData,
157
+ TError,
158
+ TVariables,
159
+ TData,
160
+ TResponse,
161
+ TResponseError
162
+ >({
163
+ meta: {
164
+ ...(syncWithLocationKey ? { [syncWithLocationKey]: undefined } : {}),
165
+ ...rest.meta,
166
+ },
167
+ autoSave,
168
+ invalidates,
169
+ ...rest,
170
+ });
188
171
 
189
- if (syncingId) {
190
- const idFromParams = parsed?.params?.[syncWithLocationKey]?.id;
191
- if (idFromParams) {
192
- setId?.(idFromParams);
193
- }
194
- }
172
+ const { form, formProps, formLoading, id, setId, onFinish, autoSaveProps } =
173
+ useFormProps;
195
174
 
196
- setInitiallySynced(true);
175
+ React.useEffect(() => {
176
+ if (initiallySynced === false && syncWithLocationKey) {
177
+ const openStatus = parsed?.params?.[syncWithLocationKey]?.open;
178
+ if (typeof openStatus === "boolean") {
179
+ openStatus ? show() : close();
180
+ } else if (typeof openStatus === "string") {
181
+ if (openStatus === "true") {
182
+ show();
197
183
  }
198
- }, [syncWithLocationKey, parsed, syncingId, setId, initiallySynced]);
184
+ }
199
185
 
200
- React.useEffect(() => {
201
- if (initiallySynced === true) {
202
- if (visible && syncWithLocationKey) {
203
- go({
204
- query: {
205
- [syncWithLocationKey]: {
206
- ...parsed?.params?.[syncWithLocationKey],
207
- open: true,
208
- ...(syncingId && id && { id }),
209
- },
210
- },
211
- options: { keepQuery: true },
212
- type: "replace",
213
- });
214
- } else if (syncWithLocationKey && !visible) {
215
- go({
216
- query: {
217
- [syncWithLocationKey]: undefined,
218
- },
219
- options: { keepQuery: true },
220
- type: "replace",
221
- });
222
- }
186
+ if (syncingId) {
187
+ const idFromParams = parsed?.params?.[syncWithLocationKey]?.id;
188
+ if (idFromParams) {
189
+ setId?.(idFromParams);
223
190
  }
224
- }, [
225
- id,
226
- visible,
227
- show,
228
- close,
229
- syncWithLocationKey,
230
- syncingId,
231
- initiallySynced,
232
- ]);
191
+ }
233
192
 
234
- const translate = useTranslate();
193
+ setInitiallySynced(true);
194
+ }
195
+ }, [syncWithLocationKey, parsed, syncingId, setId, initiallySynced]);
235
196
 
236
- const { warnWhen, setWarnWhen } = useWarnAboutChange();
197
+ React.useEffect(() => {
198
+ if (initiallySynced === true) {
199
+ if (visible && syncWithLocationKey) {
200
+ go({
201
+ query: {
202
+ [syncWithLocationKey]: {
203
+ ...parsed?.params?.[syncWithLocationKey],
204
+ open: true,
205
+ ...(syncingId && id && { id }),
206
+ },
207
+ },
208
+ options: { keepQuery: true },
209
+ type: "replace",
210
+ });
211
+ } else if (syncWithLocationKey && !visible) {
212
+ go({
213
+ query: {
214
+ [syncWithLocationKey]: undefined,
215
+ },
216
+ options: { keepQuery: true },
217
+ type: "replace",
218
+ });
219
+ }
220
+ }
221
+ }, [
222
+ id,
223
+ visible,
224
+ show,
225
+ close,
226
+ syncWithLocationKey,
227
+ syncingId,
228
+ initiallySynced,
229
+ ]);
237
230
 
238
- const saveButtonProps = {
239
- disabled: formLoading,
240
- onClick: () => {
241
- form.submit();
242
- },
243
- loading: formLoading,
244
- };
231
+ const translate = useTranslate();
245
232
 
246
- const deleteButtonProps = {
247
- recordItemId: id,
248
- onSuccess: () => {
249
- setId?.(undefined);
250
- close();
251
- },
252
- };
233
+ const { warnWhen, setWarnWhen } = useWarnAboutChange();
253
234
 
254
- const handleClose = useCallback(() => {
255
- if (autoSaveProps.status === "success" && autoSave?.invalidateOnClose) {
256
- invalidate({
257
- id,
258
- invalidates: invalidates || ["list", "many", "detail"],
259
- dataProviderName: rest.dataProviderName,
260
- resource: identifier,
261
- });
262
- }
235
+ const saveButtonProps = {
236
+ disabled: formLoading,
237
+ onClick: () => {
238
+ form.submit();
239
+ },
240
+ loading: formLoading,
241
+ };
263
242
 
264
- if (warnWhen) {
265
- const warnWhenConfirm = window.confirm(
266
- translate(
267
- "warnWhenUnsavedChanges",
268
- "Are you sure you want to leave? You have unsaved changes.",
269
- ),
270
- );
243
+ const deleteButtonProps = {
244
+ recordItemId: id,
245
+ onSuccess: () => {
246
+ setId?.(undefined);
247
+ close();
248
+ },
249
+ };
271
250
 
272
- if (warnWhenConfirm) {
273
- setWarnWhen(false);
274
- } else {
275
- return;
276
- }
277
- }
251
+ const handleClose = useCallback(() => {
252
+ if (autoSaveProps.status === "success" && autoSave?.invalidateOnClose) {
253
+ invalidate({
254
+ id,
255
+ invalidates: invalidates || ["list", "many", "detail"],
256
+ dataProviderName: rest.dataProviderName,
257
+ resource: identifier,
258
+ });
259
+ }
278
260
 
279
- close();
280
- setId?.(undefined);
281
- }, [warnWhen]);
261
+ if (warnWhen) {
262
+ const warnWhenConfirm = window.confirm(
263
+ translate(
264
+ "warnWhenUnsavedChanges",
265
+ "Are you sure you want to leave? You have unsaved changes.",
266
+ ),
267
+ );
282
268
 
283
- const handleShow = useCallback(
284
- (showId?: BaseKey) => {
285
- if (typeof showId !== "undefined") {
286
- setId?.(showId);
287
- }
288
- const needsIdToOpen = action === "edit" || action === "clone";
289
- const hasId =
290
- typeof showId !== "undefined" || typeof id !== "undefined";
291
- if (needsIdToOpen ? hasId : true) {
292
- show();
293
- }
294
- },
295
- [id],
296
- );
269
+ if (warnWhenConfirm) {
270
+ setWarnWhen(false);
271
+ } else {
272
+ return;
273
+ }
274
+ }
297
275
 
298
- return {
299
- ...useFormProps,
300
- show: handleShow,
301
- close: handleClose,
302
- formProps: {
303
- form,
304
- ...useFormProps.formProps,
305
- onValuesChange: formProps?.onValuesChange,
306
- onKeyUp: formProps?.onKeyUp,
307
- onFinish: async (values) => {
308
- await onFinish(values);
276
+ close();
277
+ setId?.(undefined);
278
+ }, [warnWhen]);
309
279
 
310
- if (autoSubmitClose) {
311
- close();
312
- }
280
+ const handleShow = useCallback(
281
+ (showId?: BaseKey) => {
282
+ if (typeof showId !== "undefined") {
283
+ setId?.(showId);
284
+ }
285
+ const needsIdToOpen = action === "edit" || action === "clone";
286
+ const hasId = typeof showId !== "undefined" || typeof id !== "undefined";
287
+ if (needsIdToOpen ? hasId : true) {
288
+ show();
289
+ }
290
+ },
291
+ [id],
292
+ );
313
293
 
314
- if (autoResetForm) {
315
- form.resetFields();
316
- }
317
- },
318
- },
319
- drawerProps: {
320
- width: "500px",
321
- onClose: handleClose,
322
- open: visible,
323
- forceRender: true,
324
- },
325
- saveButtonProps,
326
- deleteButtonProps,
327
- formLoading,
328
- };
294
+ return {
295
+ ...useFormProps,
296
+ show: handleShow,
297
+ close: handleClose,
298
+ formProps: {
299
+ form,
300
+ ...useFormProps.formProps,
301
+ onValuesChange: formProps?.onValuesChange,
302
+ onKeyUp: formProps?.onKeyUp,
303
+ onFinish: async (values) => {
304
+ await onFinish(values);
305
+
306
+ if (autoSubmitClose) {
307
+ close();
308
+ }
309
+
310
+ if (autoResetForm) {
311
+ form.resetFields();
312
+ }
313
+ },
314
+ },
315
+ drawerProps: {
316
+ width: "500px",
317
+ onClose: handleClose,
318
+ open: visible,
319
+ forceRender: true,
320
+ },
321
+ saveButtonProps,
322
+ deleteButtonProps,
323
+ formLoading,
324
+ };
329
325
  };