@refinedev/antd 5.0.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.
Files changed (288) hide show
  1. package/CHANGELOG.md +1689 -0
  2. package/README.md +285 -0
  3. package/dist/components/breadcrumb/index.d.ts +6 -0
  4. package/dist/components/breadcrumb/index.d.ts.map +1 -0
  5. package/dist/components/buttons/clone/index.d.ts +11 -0
  6. package/dist/components/buttons/clone/index.d.ts.map +1 -0
  7. package/dist/components/buttons/create/index.d.ts +11 -0
  8. package/dist/components/buttons/create/index.d.ts.map +1 -0
  9. package/dist/components/buttons/delete/index.d.ts +10 -0
  10. package/dist/components/buttons/delete/index.d.ts.map +1 -0
  11. package/dist/components/buttons/edit/index.d.ts +11 -0
  12. package/dist/components/buttons/edit/index.d.ts.map +1 -0
  13. package/dist/components/buttons/export/index.d.ts +10 -0
  14. package/dist/components/buttons/export/index.d.ts.map +1 -0
  15. package/dist/components/buttons/import/index.d.ts +11 -0
  16. package/dist/components/buttons/import/index.d.ts.map +1 -0
  17. package/dist/components/buttons/index.d.ts +12 -0
  18. package/dist/components/buttons/index.d.ts.map +1 -0
  19. package/dist/components/buttons/list/index.d.ts +11 -0
  20. package/dist/components/buttons/list/index.d.ts.map +1 -0
  21. package/dist/components/buttons/refresh/index.d.ts +10 -0
  22. package/dist/components/buttons/refresh/index.d.ts.map +1 -0
  23. package/dist/components/buttons/save/index.d.ts +10 -0
  24. package/dist/components/buttons/save/index.d.ts.map +1 -0
  25. package/dist/components/buttons/show/index.d.ts +11 -0
  26. package/dist/components/buttons/show/index.d.ts.map +1 -0
  27. package/dist/components/buttons/types.d.ts +24 -0
  28. package/dist/components/buttons/types.d.ts.map +1 -0
  29. package/dist/components/crud/create/index.d.ts +10 -0
  30. package/dist/components/crud/create/index.d.ts.map +1 -0
  31. package/dist/components/crud/edit/index.d.ts +10 -0
  32. package/dist/components/crud/edit/index.d.ts.map +1 -0
  33. package/dist/components/crud/index.d.ts +6 -0
  34. package/dist/components/crud/index.d.ts.map +1 -0
  35. package/dist/components/crud/list/index.d.ts +10 -0
  36. package/dist/components/crud/list/index.d.ts.map +1 -0
  37. package/dist/components/crud/show/index.d.ts +10 -0
  38. package/dist/components/crud/show/index.d.ts.map +1 -0
  39. package/dist/components/crud/types.d.ts +10 -0
  40. package/dist/components/crud/types.d.ts.map +1 -0
  41. package/dist/components/fields/boolean/index.d.ts +9 -0
  42. package/dist/components/fields/boolean/index.d.ts.map +1 -0
  43. package/dist/components/fields/date/index.d.ts +9 -0
  44. package/dist/components/fields/date/index.d.ts.map +1 -0
  45. package/dist/components/fields/email/index.d.ts +10 -0
  46. package/dist/components/fields/email/index.d.ts.map +1 -0
  47. package/dist/components/fields/file/index.d.ts +9 -0
  48. package/dist/components/fields/file/index.d.ts.map +1 -0
  49. package/dist/components/fields/image/index.d.ts +9 -0
  50. package/dist/components/fields/image/index.d.ts.map +1 -0
  51. package/dist/components/fields/index.d.ts +12 -0
  52. package/dist/components/fields/index.d.ts.map +1 -0
  53. package/dist/components/fields/markdown/index.d.ts +9 -0
  54. package/dist/components/fields/markdown/index.d.ts.map +1 -0
  55. package/dist/components/fields/number/index.d.ts +9 -0
  56. package/dist/components/fields/number/index.d.ts.map +1 -0
  57. package/dist/components/fields/tag/index.d.ts +9 -0
  58. package/dist/components/fields/tag/index.d.ts.map +1 -0
  59. package/dist/components/fields/text/index.d.ts +9 -0
  60. package/dist/components/fields/text/index.d.ts.map +1 -0
  61. package/dist/components/fields/types.d.ts +20 -0
  62. package/dist/components/fields/types.d.ts.map +1 -0
  63. package/dist/components/fields/url/index.d.ts +10 -0
  64. package/dist/components/fields/url/index.d.ts.map +1 -0
  65. package/dist/components/index.d.ts +13 -0
  66. package/dist/components/index.d.ts.map +1 -0
  67. package/dist/components/layout/header/index.d.ts +4 -0
  68. package/dist/components/layout/header/index.d.ts.map +1 -0
  69. package/dist/components/layout/index.d.ts +4 -0
  70. package/dist/components/layout/index.d.ts.map +1 -0
  71. package/dist/components/layout/sider/index.d.ts +4 -0
  72. package/dist/components/layout/sider/index.d.ts.map +1 -0
  73. package/dist/components/layout/sider/styles.d.ts +3 -0
  74. package/dist/components/layout/sider/styles.d.ts.map +1 -0
  75. package/dist/components/layout/title/index.d.ts +4 -0
  76. package/dist/components/layout/title/index.d.ts.map +1 -0
  77. package/dist/components/layout/types.d.ts +3 -0
  78. package/dist/components/layout/types.d.ts.map +1 -0
  79. package/dist/components/pageHeader/index.d.ts +5 -0
  80. package/dist/components/pageHeader/index.d.ts.map +1 -0
  81. package/dist/components/pages/auth/components/forgotPassword/index.d.ts +12 -0
  82. package/dist/components/pages/auth/components/forgotPassword/index.d.ts.map +1 -0
  83. package/dist/components/pages/auth/components/index.d.ts +5 -0
  84. package/dist/components/pages/auth/components/index.d.ts.map +1 -0
  85. package/dist/components/pages/auth/components/login/index.d.ts +12 -0
  86. package/dist/components/pages/auth/components/login/index.d.ts.map +1 -0
  87. package/dist/components/pages/auth/components/register/index.d.ts +12 -0
  88. package/dist/components/pages/auth/components/register/index.d.ts.map +1 -0
  89. package/dist/components/pages/auth/components/styles.d.ts +5 -0
  90. package/dist/components/pages/auth/components/styles.d.ts.map +1 -0
  91. package/dist/components/pages/auth/components/updatePassword/index.d.ts +12 -0
  92. package/dist/components/pages/auth/components/updatePassword/index.d.ts.map +1 -0
  93. package/dist/components/pages/auth/index.d.ts +11 -0
  94. package/dist/components/pages/auth/index.d.ts.map +1 -0
  95. package/dist/components/pages/error/index.d.ts +10 -0
  96. package/dist/components/pages/error/index.d.ts.map +1 -0
  97. package/dist/components/pages/index.d.ts +7 -0
  98. package/dist/components/pages/index.d.ts.map +1 -0
  99. package/dist/components/pages/login/index.d.ts +15 -0
  100. package/dist/components/pages/login/index.d.ts.map +1 -0
  101. package/dist/components/pages/login/styles.d.ts +6 -0
  102. package/dist/components/pages/login/styles.d.ts.map +1 -0
  103. package/dist/components/pages/ready/index.d.ts +10 -0
  104. package/dist/components/pages/ready/index.d.ts.map +1 -0
  105. package/dist/components/pages/welcome/index.d.ts +6 -0
  106. package/dist/components/pages/welcome/index.d.ts.map +1 -0
  107. package/dist/components/table/components/filterDropdown/index.d.ts +13 -0
  108. package/dist/components/table/components/filterDropdown/index.d.ts.map +1 -0
  109. package/dist/components/table/components/index.d.ts +2 -0
  110. package/dist/components/table/components/index.d.ts.map +1 -0
  111. package/dist/components/table/index.d.ts +2 -0
  112. package/dist/components/table/index.d.ts.map +1 -0
  113. package/dist/components/undoableNotification/index.d.ts +10 -0
  114. package/dist/components/undoableNotification/index.d.ts.map +1 -0
  115. package/dist/definitions/index.d.ts +3 -0
  116. package/dist/definitions/index.d.ts.map +1 -0
  117. package/dist/definitions/table/index.d.ts +10 -0
  118. package/dist/definitions/table/index.d.ts.map +1 -0
  119. package/dist/definitions/upload/index.d.ts +4 -0
  120. package/dist/definitions/upload/index.d.ts.map +1 -0
  121. package/dist/esm/index.js +2 -0
  122. package/dist/esm/index.js.map +1 -0
  123. package/dist/hooks/fields/index.d.ts +4 -0
  124. package/dist/hooks/fields/index.d.ts.map +1 -0
  125. package/dist/hooks/fields/useCheckboxGroup/index.d.ts +24 -0
  126. package/dist/hooks/fields/useCheckboxGroup/index.d.ts.map +1 -0
  127. package/dist/hooks/fields/useRadioGroup/index.d.ts +24 -0
  128. package/dist/hooks/fields/useRadioGroup/index.d.ts.map +1 -0
  129. package/dist/hooks/fields/useSelect/index.d.ts +21 -0
  130. package/dist/hooks/fields/useSelect/index.d.ts.map +1 -0
  131. package/dist/hooks/form/index.d.ts +5 -0
  132. package/dist/hooks/form/index.d.ts.map +1 -0
  133. package/dist/hooks/form/useDrawerForm/index.d.ts +2 -0
  134. package/dist/hooks/form/useDrawerForm/index.d.ts.map +1 -0
  135. package/dist/hooks/form/useDrawerForm/useDrawerForm.d.ts +33 -0
  136. package/dist/hooks/form/useDrawerForm/useDrawerForm.d.ts.map +1 -0
  137. package/dist/hooks/form/useForm.d.ts +31 -0
  138. package/dist/hooks/form/useForm.d.ts.map +1 -0
  139. package/dist/hooks/form/useModalForm/index.d.ts +2 -0
  140. package/dist/hooks/form/useModalForm/index.d.ts.map +1 -0
  141. package/dist/hooks/form/useModalForm/useModalForm.d.ts +39 -0
  142. package/dist/hooks/form/useModalForm/useModalForm.d.ts.map +1 -0
  143. package/dist/hooks/form/useStepsForm/index.d.ts +2 -0
  144. package/dist/hooks/form/useStepsForm/index.d.ts.map +1 -0
  145. package/dist/hooks/form/useStepsForm/useStepsForm.d.ts +35 -0
  146. package/dist/hooks/form/useStepsForm/useStepsForm.d.ts.map +1 -0
  147. package/dist/hooks/import/index.d.ts +18 -0
  148. package/dist/hooks/import/index.d.ts.map +1 -0
  149. package/dist/hooks/index.d.ts +8 -0
  150. package/dist/hooks/index.d.ts.map +1 -0
  151. package/dist/hooks/list/index.d.ts +2 -0
  152. package/dist/hooks/list/index.d.ts.map +1 -0
  153. package/dist/hooks/list/useSimpleList/index.d.ts +2 -0
  154. package/dist/hooks/list/useSimpleList/index.d.ts.map +1 -0
  155. package/dist/hooks/list/useSimpleList/useSimpleList.d.ts +23 -0
  156. package/dist/hooks/list/useSimpleList/useSimpleList.d.ts.map +1 -0
  157. package/dist/hooks/modal/index.d.ts +2 -0
  158. package/dist/hooks/modal/index.d.ts.map +1 -0
  159. package/dist/hooks/modal/useModal/index.d.ts +18 -0
  160. package/dist/hooks/modal/useModal/index.d.ts.map +1 -0
  161. package/dist/hooks/table/index.d.ts +3 -0
  162. package/dist/hooks/table/index.d.ts.map +1 -0
  163. package/dist/hooks/table/useEditableTable/index.d.ts +2 -0
  164. package/dist/hooks/table/useEditableTable/index.d.ts.map +1 -0
  165. package/dist/hooks/table/useEditableTable/useEditableTable.d.ts +28 -0
  166. package/dist/hooks/table/useEditableTable/useEditableTable.d.ts.map +1 -0
  167. package/dist/hooks/table/useTable/index.d.ts +2 -0
  168. package/dist/hooks/table/useTable/index.d.ts.map +1 -0
  169. package/dist/hooks/table/useTable/paginationLink.d.ts +8 -0
  170. package/dist/hooks/table/useTable/paginationLink.d.ts.map +1 -0
  171. package/dist/hooks/table/useTable/useTable.d.ts +18 -0
  172. package/dist/hooks/table/useTable/useTable.d.ts.map +1 -0
  173. package/dist/hooks/useFileUploadState/index.d.ts +7 -0
  174. package/dist/hooks/useFileUploadState/index.d.ts.map +1 -0
  175. package/dist/iife/index.js +56 -0
  176. package/dist/iife/index.js.map +1 -0
  177. package/dist/index.d.ts +6 -0
  178. package/dist/index.d.ts.map +1 -0
  179. package/dist/index.js +2 -0
  180. package/dist/index.js.map +1 -0
  181. package/dist/interfaces/field.d.ts +4 -0
  182. package/dist/interfaces/field.d.ts.map +1 -0
  183. package/dist/interfaces/index.d.ts +19 -0
  184. package/dist/interfaces/index.d.ts.map +1 -0
  185. package/dist/interfaces/upload.d.ts +10 -0
  186. package/dist/interfaces/upload.d.ts.map +1 -0
  187. package/dist/providers/index.d.ts +2 -0
  188. package/dist/providers/index.d.ts.map +1 -0
  189. package/dist/providers/notificationProvider/index.d.ts +3 -0
  190. package/dist/providers/notificationProvider/index.d.ts.map +1 -0
  191. package/dist/reset.css +254 -0
  192. package/package.json +72 -0
  193. package/refine.config.js +604 -0
  194. package/src/assets/styles/reset.css +254 -0
  195. package/src/components/breadcrumb/index.tsx +70 -0
  196. package/src/components/buttons/clone/index.tsx +104 -0
  197. package/src/components/buttons/create/index.tsx +103 -0
  198. package/src/components/buttons/delete/index.tsx +122 -0
  199. package/src/components/buttons/edit/index.tsx +105 -0
  200. package/src/components/buttons/export/index.tsx +32 -0
  201. package/src/components/buttons/import/index.tsx +36 -0
  202. package/src/components/buttons/index.ts +11 -0
  203. package/src/components/buttons/list/index.tsx +122 -0
  204. package/src/components/buttons/refresh/index.tsx +61 -0
  205. package/src/components/buttons/save/index.tsx +32 -0
  206. package/src/components/buttons/show/index.tsx +104 -0
  207. package/src/components/buttons/types.ts +44 -0
  208. package/src/components/crud/create/index.tsx +135 -0
  209. package/src/components/crud/edit/index.tsx +221 -0
  210. package/src/components/crud/index.ts +6 -0
  211. package/src/components/crud/list/index.tsx +105 -0
  212. package/src/components/crud/show/index.tsx +215 -0
  213. package/src/components/crud/types.ts +63 -0
  214. package/src/components/fields/boolean/index.tsx +26 -0
  215. package/src/components/fields/date/index.tsx +33 -0
  216. package/src/components/fields/email/index.tsx +20 -0
  217. package/src/components/fields/file/index.tsx +21 -0
  218. package/src/components/fields/image/index.tsx +17 -0
  219. package/src/components/fields/index.ts +11 -0
  220. package/src/components/fields/markdown/index.tsx +16 -0
  221. package/src/components/fields/number/index.tsx +36 -0
  222. package/src/components/fields/tag/index.tsx +13 -0
  223. package/src/components/fields/text/index.tsx +15 -0
  224. package/src/components/fields/types.ts +49 -0
  225. package/src/components/fields/url/index.tsx +24 -0
  226. package/src/components/index.ts +14 -0
  227. package/src/components/layout/header/index.tsx +37 -0
  228. package/src/components/layout/index.tsx +41 -0
  229. package/src/components/layout/sider/index.tsx +261 -0
  230. package/src/components/layout/sider/styles.ts +9 -0
  231. package/src/components/layout/title/index.tsx +48 -0
  232. package/src/components/layout/types.ts +11 -0
  233. package/src/components/pageHeader/index.tsx +52 -0
  234. package/src/components/pages/auth/components/forgotPassword/index.tsx +167 -0
  235. package/src/components/pages/auth/components/index.tsx +4 -0
  236. package/src/components/pages/auth/components/login/index.tsx +239 -0
  237. package/src/components/pages/auth/components/register/index.tsx +210 -0
  238. package/src/components/pages/auth/components/styles.ts +23 -0
  239. package/src/components/pages/auth/components/updatePassword/index.tsx +158 -0
  240. package/src/components/pages/auth/index.tsx +35 -0
  241. package/src/components/pages/error/index.tsx +77 -0
  242. package/src/components/pages/index.tsx +6 -0
  243. package/src/components/pages/login/index.tsx +172 -0
  244. package/src/components/pages/login/styles.ts +25 -0
  245. package/src/components/pages/ready/index.tsx +96 -0
  246. package/src/components/pages/welcome/index.tsx +87 -0
  247. package/src/components/table/components/filterDropdown/index.tsx +112 -0
  248. package/src/components/table/components/index.ts +1 -0
  249. package/src/components/table/index.ts +1 -0
  250. package/src/components/undoableNotification/index.tsx +46 -0
  251. package/src/definitions/index.ts +2 -0
  252. package/src/definitions/table/index.ts +113 -0
  253. package/src/definitions/upload/index.ts +29 -0
  254. package/src/hooks/fields/index.ts +3 -0
  255. package/src/hooks/fields/useCheckboxGroup/index.ts +85 -0
  256. package/src/hooks/fields/useRadioGroup/index.ts +85 -0
  257. package/src/hooks/fields/useSelect/index.ts +47 -0
  258. package/src/hooks/form/index.ts +17 -0
  259. package/src/hooks/form/useDrawerForm/index.ts +6 -0
  260. package/src/hooks/form/useDrawerForm/useDrawerForm.ts +241 -0
  261. package/src/hooks/form/useForm.ts +168 -0
  262. package/src/hooks/form/useModalForm/index.ts +5 -0
  263. package/src/hooks/form/useModalForm/useModalForm.ts +286 -0
  264. package/src/hooks/form/useStepsForm/index.ts +5 -0
  265. package/src/hooks/form/useStepsForm/useStepsForm.ts +91 -0
  266. package/src/hooks/import/index.tsx +134 -0
  267. package/src/hooks/index.ts +7 -0
  268. package/src/hooks/list/index.ts +1 -0
  269. package/src/hooks/list/useSimpleList/index.ts +1 -0
  270. package/src/hooks/list/useSimpleList/useSimpleList.ts +229 -0
  271. package/src/hooks/modal/index.ts +1 -0
  272. package/src/hooks/modal/useModal/index.tsx +43 -0
  273. package/src/hooks/table/index.ts +2 -0
  274. package/src/hooks/table/useEditableTable/index.ts +1 -0
  275. package/src/hooks/table/useEditableTable/useEditableTable.ts +87 -0
  276. package/src/hooks/table/useTable/index.ts +1 -0
  277. package/src/hooks/table/useTable/paginationLink.tsx +27 -0
  278. package/src/hooks/table/useTable/useTable.ts +267 -0
  279. package/src/hooks/useFileUploadState/index.ts +34 -0
  280. package/src/index.tsx +11 -0
  281. package/src/interfaces/field.ts +3 -0
  282. package/src/interfaces/index.ts +23 -0
  283. package/src/interfaces/upload.ts +9 -0
  284. package/src/providers/index.ts +1 -0
  285. package/src/providers/notificationProvider/index.tsx +41 -0
  286. package/src/types/index.d.ts +4 -0
  287. package/src/types/sunflower.d.ts +86 -0
  288. package/tsconfig.json +28 -0
@@ -0,0 +1,91 @@
1
+ import {
2
+ useStepsForm as useStepsFormSF,
3
+ UseStepsFormConfig,
4
+ } from "sunflower-antd";
5
+ import { FormInstance, FormProps } from "antd";
6
+
7
+ import {
8
+ HttpError,
9
+ UseFormProps as UseFormPropsCore,
10
+ BaseRecord,
11
+ } from "@refinedev/core";
12
+
13
+ import { useForm, UseFormProps, UseFormReturnType } from "../useForm";
14
+
15
+ export type UseStepsFormFromSFReturnType<TData, TVariables> = {
16
+ current: number;
17
+ gotoStep: (step: number) => void;
18
+ stepsProps: {
19
+ current: number;
20
+ onChange: (currentStep: number) => void;
21
+ };
22
+ formProps: FormProps<TVariables>;
23
+ formLoading: boolean;
24
+ defaultFormValuesLoading: boolean;
25
+ formValues: {};
26
+ initialValues: {};
27
+ formResult: undefined;
28
+ form: FormInstance<TVariables>;
29
+ submit: (values?: TVariables) => Promise<TData>;
30
+ };
31
+
32
+ export type UseStepsFormReturnType<
33
+ TData extends BaseRecord = BaseRecord,
34
+ TError extends HttpError = HttpError,
35
+ TVariables = {},
36
+ > = UseFormReturnType<TData, TError, TVariables> &
37
+ UseStepsFormFromSFReturnType<TData, TVariables>;
38
+
39
+ export type UseStepsFormProps<
40
+ TData extends BaseRecord = BaseRecord,
41
+ TError extends HttpError = HttpError,
42
+ TVariables = {},
43
+ > = UseFormPropsCore<TData, TError, TVariables> &
44
+ UseFormProps<TData, TError, TVariables> &
45
+ UseStepsFormConfig;
46
+
47
+ /**
48
+ * `useStepsForm` hook allows you to split your form under an Ant Design based {@link https://ant.design/components/steps/ Steps} component and provides you with a few useful functionalities that will help you manage your form.
49
+ *
50
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/form/useStepsForm} for more details.
51
+ *
52
+ * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}
53
+ * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-references/interfaceReferences#httperror `HttpError`}
54
+ * @typeParam TVariables - Values for params. default `{}`
55
+ *
56
+ *
57
+ */
58
+ export const useStepsForm = <
59
+ TData extends BaseRecord = BaseRecord,
60
+ TError extends HttpError = HttpError,
61
+ TVariables = {},
62
+ >(
63
+ props: UseStepsFormProps<TData, TError, TVariables> = {},
64
+ ): UseStepsFormReturnType<TData, TError, TVariables> => {
65
+ const useFormProps = useForm<TData, TError, TVariables>({ ...props });
66
+ const { form, formProps } = useFormProps;
67
+
68
+ const stepsPropsSunflower = useStepsFormSF<TData, TVariables>({
69
+ isBackValidate: false,
70
+ form: form,
71
+ submit: (values: any) => {
72
+ formProps?.onFinish?.(values);
73
+ },
74
+ ...props,
75
+ });
76
+
77
+ return {
78
+ ...useFormProps,
79
+ ...stepsPropsSunflower,
80
+ formProps: {
81
+ ...stepsPropsSunflower.formProps,
82
+ ...useFormProps.formProps,
83
+ onValuesChange: formProps?.onValuesChange,
84
+ onKeyUp: formProps?.onKeyUp,
85
+ },
86
+ saveButtonProps: {
87
+ ...useFormProps.saveButtonProps,
88
+ onClick: () => stepsPropsSunflower.submit(),
89
+ },
90
+ };
91
+ };
@@ -0,0 +1,134 @@
1
+ import React from "react";
2
+ import { ButtonProps, notification, UploadProps, Progress } from "antd";
3
+ import {
4
+ useTranslate,
5
+ useResource,
6
+ BaseRecord,
7
+ HttpError,
8
+ useImport as useImportCore,
9
+ UseImportReturnType,
10
+ ImportOptions,
11
+ pickNotDeprecated,
12
+ } from "@refinedev/core";
13
+
14
+ /**
15
+ * `useImport` hook allows you to handle your csv import logic easily.
16
+ *
17
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/import/useImport} for more details.
18
+ *
19
+ * @typeParam TItem - Interface of parsed csv data
20
+ * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}
21
+ * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-references/interfaceReferences#httperror `HttpError`}
22
+ * @typeParam TVariables - Values for mutation function
23
+ *
24
+ */
25
+ export const useImport = <
26
+ TItem = any,
27
+ TData extends BaseRecord = BaseRecord,
28
+ TError extends HttpError = HttpError,
29
+ TVariables = any,
30
+ >({
31
+ resource: resourceFromProp,
32
+ resourceName,
33
+ mapData = (item) => item as unknown as TVariables,
34
+ paparseOptions,
35
+ batchSize = Number.MAX_SAFE_INTEGER,
36
+ onFinish,
37
+ meta,
38
+ metaData,
39
+ dataProviderName,
40
+ onProgress: onProgressFromProp,
41
+ }: ImportOptions<TItem, TVariables, TData> = {}): Omit<
42
+ UseImportReturnType<TData, TVariables, TError>,
43
+ "handleChange" | "inputProps"
44
+ > & {
45
+ uploadProps: UploadProps;
46
+ buttonProps: ButtonProps;
47
+ } => {
48
+ const t = useTranslate();
49
+
50
+ const { resource } = useResource(resourceFromProp ?? resourceName);
51
+
52
+ const { mutationResult, isLoading, handleChange } = useImportCore<
53
+ TItem,
54
+ TData,
55
+ TError,
56
+ TVariables
57
+ >({
58
+ resource: resource?.identifier ?? resource?.name,
59
+ mapData,
60
+ paparseOptions,
61
+ batchSize,
62
+ meta: pickNotDeprecated(meta, metaData),
63
+ metaData: pickNotDeprecated(meta, metaData),
64
+ dataProviderName,
65
+ onFinish,
66
+ onProgress:
67
+ onProgressFromProp ??
68
+ (({ totalAmount, processedAmount }) => {
69
+ if (totalAmount > 0 && processedAmount > 0) {
70
+ const description = (
71
+ <div
72
+ style={{
73
+ display: "flex",
74
+ alignItems: "center",
75
+ justifyContent: "space-between",
76
+ marginTop: "-7px",
77
+ }}
78
+ >
79
+ <Progress
80
+ type="circle"
81
+ percent={Math.floor(
82
+ (processedAmount / totalAmount) * 100,
83
+ )}
84
+ width={50}
85
+ strokeColor="#1890ff"
86
+ status="normal"
87
+ />
88
+ <span style={{ marginLeft: 8, width: "100%" }}>
89
+ {t(
90
+ "notifications.importProgress",
91
+ {
92
+ processed: processedAmount,
93
+ total: totalAmount,
94
+ },
95
+ `Importing: ${processedAmount}/${totalAmount}`,
96
+ )}
97
+ </span>
98
+ </div>
99
+ );
100
+
101
+ notification.open({
102
+ description,
103
+ message: null,
104
+ key: `${resource}-import`,
105
+ duration: 0,
106
+ });
107
+
108
+ if (processedAmount >= totalAmount) {
109
+ }
110
+
111
+ if (processedAmount === totalAmount) {
112
+ setTimeout(() => {
113
+ notification.destroy(`${resource}-import`);
114
+ }, 4500);
115
+ }
116
+ }
117
+ }),
118
+ });
119
+
120
+ return {
121
+ uploadProps: {
122
+ onChange: handleChange,
123
+ beforeUpload: () => false,
124
+ showUploadList: false,
125
+ accept: ".csv",
126
+ },
127
+ buttonProps: {
128
+ type: "default",
129
+ loading: isLoading,
130
+ },
131
+ mutationResult,
132
+ isLoading,
133
+ };
134
+ };
@@ -0,0 +1,7 @@
1
+ export * from "./form";
2
+ export * from "./table";
3
+ export * from "./fields";
4
+ export * from "./import";
5
+ export * from "./list";
6
+ export * from "./useFileUploadState";
7
+ export * from "./modal";
@@ -0,0 +1 @@
1
+ export * from "./useSimpleList";
@@ -0,0 +1 @@
1
+ export { useSimpleList } from "./useSimpleList";
@@ -0,0 +1,229 @@
1
+ import { Children, createElement, Fragment } from "react";
2
+ import { ListProps, FormProps, Form, Grid } from "antd";
3
+
4
+ import {
5
+ BaseRecord,
6
+ CrudFilters,
7
+ SuccessErrorNotification,
8
+ HttpError,
9
+ LiveModeProps,
10
+ useTable as useTableCore,
11
+ useTableProps as useTablePropsCore,
12
+ useTableReturnType,
13
+ pickNotDeprecated,
14
+ } from "@refinedev/core";
15
+ import { useLiveMode } from "@refinedev/core";
16
+ import { PaginationLink } from "@hooks/table/useTable/paginationLink";
17
+ import { PaginationConfig } from "antd/lib/pagination";
18
+
19
+ export type useSimpleListProps<TData, TError, TSearchVariables> =
20
+ useTablePropsCore<TData, TError> & {
21
+ onSearch?: (
22
+ data: TSearchVariables,
23
+ ) => CrudFilters | Promise<CrudFilters>;
24
+ } & SuccessErrorNotification &
25
+ LiveModeProps;
26
+
27
+ export type useSimpleListReturnType<
28
+ TData extends BaseRecord = BaseRecord,
29
+ TSearchVariables = unknown,
30
+ > = Omit<useTableReturnType<TData>, "tableQueryResult"> & {
31
+ listProps: ListProps<TData>;
32
+ queryResult: useTableReturnType["tableQueryResult"];
33
+ searchFormProps: FormProps<TSearchVariables>;
34
+ };
35
+
36
+ /**
37
+ * By using `useSimpleList` you get props for your records from API in accordance with Ant Design {@link https://ant.design/components/list/ `<List>`} component.
38
+ * All features such as pagination, sorting come out of the box.
39
+ *
40
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/list/useSimpleList} for more details.
41
+ *
42
+ * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}
43
+ * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-references/interfaceReferences#httperror `HttpError`}
44
+ * @typeParam TSearchVariables - Antd form values
45
+ *
46
+ */
47
+
48
+ export const useSimpleList = <
49
+ TData extends BaseRecord = BaseRecord,
50
+ TError extends HttpError = HttpError,
51
+ TSearchVariables = unknown,
52
+ >({
53
+ resource,
54
+ initialCurrent,
55
+ initialPageSize,
56
+ pagination,
57
+ hasPagination = true,
58
+ initialSorter,
59
+ permanentSorter,
60
+ initialFilter,
61
+ permanentFilter,
62
+ defaultSetFilterBehavior,
63
+ filters: filtersFromProp,
64
+ sorters: sortersFromProp,
65
+ onSearch,
66
+ queryOptions,
67
+ syncWithLocation,
68
+ successNotification,
69
+ errorNotification,
70
+ liveMode: liveModeFromProp,
71
+ onLiveEvent,
72
+ liveParams,
73
+ meta,
74
+ metaData,
75
+ dataProviderName,
76
+ }: useSimpleListProps<
77
+ TData,
78
+ TError,
79
+ TSearchVariables
80
+ > = {}): useSimpleListReturnType<TData, TSearchVariables> => {
81
+ const {
82
+ sorters,
83
+ sorter,
84
+ filters,
85
+ current,
86
+ pageSize,
87
+ pageCount,
88
+ setFilters,
89
+ setCurrent,
90
+ setPageSize,
91
+ setSorter,
92
+ setSorters,
93
+ createLinkForSyncWithLocation,
94
+ tableQueryResult: queryResult,
95
+ } = useTableCore({
96
+ resource,
97
+ initialSorter,
98
+ permanentSorter,
99
+ initialFilter,
100
+ permanentFilter,
101
+ filters: filtersFromProp,
102
+ sorters: sortersFromProp,
103
+ defaultSetFilterBehavior,
104
+ initialCurrent,
105
+ initialPageSize,
106
+ queryOptions,
107
+ successNotification,
108
+ errorNotification,
109
+ liveMode: liveModeFromProp,
110
+ onLiveEvent,
111
+ liveParams,
112
+ meta: pickNotDeprecated(meta, metaData),
113
+ metaData: pickNotDeprecated(meta, metaData),
114
+ syncWithLocation,
115
+ dataProviderName,
116
+ pagination,
117
+ hasPagination,
118
+ });
119
+
120
+ const hasPaginationString = hasPagination === false ? "off" : "server";
121
+ const isPaginationEnabled =
122
+ (pagination?.mode ?? hasPaginationString) !== "off";
123
+
124
+ const breakpoint = Grid.useBreakpoint();
125
+
126
+ const liveMode = useLiveMode(liveModeFromProp);
127
+
128
+ const [form] = Form.useForm<TSearchVariables>();
129
+
130
+ const { data, isFetched, isLoading } = queryResult;
131
+
132
+ const onChange = (page: number, pageSize?: number): void => {
133
+ if (isPaginationEnabled) {
134
+ setCurrent(page);
135
+ setPageSize(pageSize || 10);
136
+ }
137
+ };
138
+
139
+ const onFinish = async (values: TSearchVariables) => {
140
+ if (onSearch) {
141
+ const searchFilters = await onSearch(values);
142
+ if (isPaginationEnabled) {
143
+ setCurrent?.(1);
144
+ }
145
+ return setFilters(searchFilters);
146
+ }
147
+ };
148
+
149
+ const antdPagination = (): false | PaginationConfig => {
150
+ if (isPaginationEnabled) {
151
+ return {
152
+ itemRender: (page, type, element) => {
153
+ const link = createLinkForSyncWithLocation({
154
+ pagination: {
155
+ pageSize,
156
+ current: page,
157
+ },
158
+ sorters,
159
+ filters,
160
+ });
161
+
162
+ if (type === "page") {
163
+ return createElement(PaginationLink, {
164
+ to: link,
165
+ element: `${page}`,
166
+ });
167
+ }
168
+ if (type === "next" || type === "prev") {
169
+ return createElement(PaginationLink, {
170
+ to: link,
171
+ element: element,
172
+ });
173
+ }
174
+
175
+ if (type === "jump-next" || type === "jump-prev") {
176
+ const elementChildren = (element as React.ReactElement)
177
+ ?.props?.children;
178
+
179
+ return createElement(PaginationLink, {
180
+ to: link,
181
+ element:
182
+ Children.count(elementChildren) > 1
183
+ ? createElement(
184
+ Fragment,
185
+ {},
186
+ elementChildren,
187
+ )
188
+ : elementChildren,
189
+ });
190
+ }
191
+
192
+ return element;
193
+ },
194
+ pageSize,
195
+ current,
196
+ simple: !breakpoint.sm,
197
+ total: data?.total,
198
+ onChange,
199
+ };
200
+ }
201
+
202
+ return false;
203
+ };
204
+
205
+ return {
206
+ searchFormProps: {
207
+ form,
208
+ onFinish,
209
+ },
210
+ listProps: {
211
+ dataSource: data?.data,
212
+ loading: liveMode === "auto" ? isLoading : !isFetched,
213
+ pagination: antdPagination(),
214
+ },
215
+ queryResult,
216
+ filters,
217
+ setFilters,
218
+ sorter,
219
+ setSorter,
220
+ sorters,
221
+ setSorters,
222
+ current,
223
+ setCurrent,
224
+ pageSize,
225
+ setPageSize,
226
+ pageCount,
227
+ createLinkForSyncWithLocation,
228
+ };
229
+ };
@@ -0,0 +1 @@
1
+ export * from "./useModal";
@@ -0,0 +1,43 @@
1
+ import { ModalProps } from "antd";
2
+ import {
3
+ useModal as useCoreModal,
4
+ useModalReturnType as useCoreModelReturnType,
5
+ } from "@refinedev/core";
6
+
7
+ export type useModalReturnType = {
8
+ modalProps: ModalProps;
9
+ } & Omit<useCoreModelReturnType, "visible">;
10
+
11
+ export type useModalProps = {
12
+ /**
13
+ * Default props for Ant Design {@link https://ant.design/components/modal/ `<Modal>`} component.
14
+ */
15
+ modalProps?: ModalProps;
16
+ };
17
+
18
+ /**
19
+ * By using `useModal` you get props for your records from API in accordance with Ant Design {@link https://ant.design/components/modal/ `<Modal>`} component.
20
+ *
21
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/ui/useModal} for more details.
22
+ */
23
+ export const useModal = ({
24
+ modalProps = {},
25
+ }: useModalProps = {}): useModalReturnType => {
26
+ const { show, close, visible } = useCoreModal({
27
+ defaultVisible: modalProps.open,
28
+ });
29
+
30
+ return {
31
+ modalProps: {
32
+ ...modalProps,
33
+ onCancel: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
34
+ modalProps.onCancel?.(e);
35
+ close();
36
+ },
37
+ open: visible,
38
+ visible,
39
+ },
40
+ show,
41
+ close,
42
+ };
43
+ };
@@ -0,0 +1,2 @@
1
+ export * from "./useTable";
2
+ export * from "./useEditableTable";
@@ -0,0 +1 @@
1
+ export { useEditableTable } from "./useEditableTable";
@@ -0,0 +1,87 @@
1
+ import { useTable } from "@hooks";
2
+ import { BaseKey, BaseRecord, HttpError, UseFormProps } from "@refinedev/core";
3
+ import { ButtonProps } from "antd";
4
+
5
+ import { useTableProps, useTableReturnType } from "../useTable";
6
+ import { UseFormReturnType, useForm } from "../../form/useForm";
7
+
8
+ export type useEditableTableReturnType<
9
+ TData extends BaseRecord = BaseRecord,
10
+ TError extends HttpError = HttpError,
11
+ TVariables = {},
12
+ TSearchVariables = unknown,
13
+ > = useTableReturnType<TData, TError, TSearchVariables> &
14
+ UseFormReturnType<TData, TError, TVariables> & {
15
+ saveButtonProps: ButtonProps & {
16
+ onClick: () => void;
17
+ };
18
+ cancelButtonProps: ButtonProps & {
19
+ onClick: () => void;
20
+ };
21
+ editButtonProps: (id: BaseKey) => ButtonProps & {
22
+ onClick: () => void;
23
+ };
24
+ isEditing: (id: BaseKey) => boolean;
25
+ };
26
+
27
+ type useEditableTableProps<
28
+ TData extends BaseRecord = BaseRecord,
29
+ TError extends HttpError = HttpError,
30
+ TVariables = {},
31
+ TSearchVariables = unknown,
32
+ > = useTableProps<TData, TError, TSearchVariables> &
33
+ UseFormProps<TData, TError, TVariables>;
34
+
35
+ /**
36
+ * `useEditeableTable` allows you to implement edit feature on the table with ease,
37
+ * on top of all the features that {@link https://refine.dev/docs/api-references/hooks/table/useTable `useTable`} provides.
38
+ * `useEditableTable` return properties that can be used on Ant Design's {@link https://ant.design/components/table/ `<Table>`}
39
+ * and {@link https://ant.design/components/form/ `<Form>`} components.
40
+ *
41
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/table/useEditableTable} for more details.
42
+ */
43
+ export const useEditableTable = <
44
+ TData extends BaseRecord = BaseRecord,
45
+ TError extends HttpError = HttpError,
46
+ TVariables = {},
47
+ TSearchVariables = unknown,
48
+ >(
49
+ props: useEditableTableProps<
50
+ TData,
51
+ TError,
52
+ TVariables,
53
+ TSearchVariables
54
+ > = {},
55
+ ): useEditableTableReturnType<TData, TError, TVariables, TSearchVariables> => {
56
+ const table = useTable<TData, TError, TSearchVariables>({ ...props });
57
+ const edit = useForm<TData, TError, TVariables>({
58
+ ...props,
59
+ action: "edit",
60
+ redirect: false,
61
+ });
62
+
63
+ const { id: editId, setId, saveButtonProps } = edit;
64
+
65
+ const cancelButtonProps = {
66
+ onClick: () => {
67
+ setId(undefined);
68
+ },
69
+ };
70
+
71
+ const editButtonProps = (id: BaseKey) => {
72
+ return {
73
+ onClick: () => setId(id),
74
+ };
75
+ };
76
+
77
+ const isEditing = (id: BaseKey) => id === editId;
78
+
79
+ return {
80
+ ...table,
81
+ ...edit,
82
+ saveButtonProps,
83
+ cancelButtonProps,
84
+ editButtonProps,
85
+ isEditing,
86
+ };
87
+ };
@@ -0,0 +1 @@
1
+ export { useTable, useTableProps, useTableReturnType } from "./useTable";
@@ -0,0 +1,27 @@
1
+ import { useLink, useRouterContext, useRouterType } from "@refinedev/core";
2
+ import React, { ReactNode } from "react";
3
+
4
+ interface PaginationLinkProps {
5
+ to: string;
6
+ element: ReactNode;
7
+ }
8
+
9
+ export const PaginationLink = ({ to, element }: PaginationLinkProps) => {
10
+ const { Link: LegacyLink } = useRouterContext();
11
+ const routerType = useRouterType();
12
+ const Link = useLink();
13
+
14
+ const ActiveLink = routerType === "legacy" ? LegacyLink : Link;
15
+
16
+ return (
17
+ <ActiveLink
18
+ to={to}
19
+ replace={false}
20
+ onClick={(e: React.PointerEvent<HTMLButtonElement>) => {
21
+ e.preventDefault();
22
+ }}
23
+ >
24
+ {element}
25
+ </ActiveLink>
26
+ );
27
+ };