@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,221 @@
1
+ import React from "react";
2
+
3
+ import { Card, Space, Spin } from "antd";
4
+ import {
5
+ useMutationMode,
6
+ useNavigation,
7
+ useTranslate,
8
+ userFriendlyResourceName,
9
+ useRefineContext,
10
+ useRouterType,
11
+ useBack,
12
+ useResource,
13
+ useGo,
14
+ useToPath,
15
+ } from "@refinedev/core";
16
+
17
+ import {
18
+ DeleteButton,
19
+ RefreshButton,
20
+ ListButton,
21
+ SaveButton,
22
+ Breadcrumb,
23
+ PageHeader,
24
+ } from "@components";
25
+ import { EditProps } from "../types";
26
+
27
+ /**
28
+ * `<Edit>` provides us a layout for displaying the page.
29
+ * It does not contain any logic but adds extra functionalities like a refresh button.
30
+ *
31
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/edit} for more details.
32
+ */
33
+ export const Edit: React.FC<EditProps> = ({
34
+ title,
35
+ saveButtonProps,
36
+ mutationMode: mutationModeProp,
37
+ recordItemId,
38
+ children,
39
+ deleteButtonProps,
40
+ canDelete,
41
+ resource: resourceFromProps,
42
+ isLoading = false,
43
+ dataProviderName,
44
+ breadcrumb: breadcrumbFromProps,
45
+ wrapperProps,
46
+ headerProps,
47
+ contentProps,
48
+ headerButtonProps,
49
+ headerButtons,
50
+ footerButtonProps,
51
+ footerButtons,
52
+ goBack: goBackFromProps,
53
+ }) => {
54
+ const translate = useTranslate();
55
+ const { options: { breadcrumb: globalBreadcrumb } = {} } =
56
+ useRefineContext();
57
+ const { mutationMode: mutationModeContext } = useMutationMode();
58
+ const mutationMode = mutationModeProp ?? mutationModeContext;
59
+
60
+ const routerType = useRouterType();
61
+ const back = useBack();
62
+ const go = useGo();
63
+ const { goBack, list: legacyGoList } = useNavigation();
64
+
65
+ const {
66
+ resource,
67
+ action,
68
+ id: idFromParams,
69
+ } = useResource(resourceFromProps);
70
+
71
+ const goListPath = useToPath({
72
+ resource,
73
+ action: "list",
74
+ });
75
+
76
+ const id = recordItemId ?? idFromParams;
77
+
78
+ const breadcrumb =
79
+ typeof breadcrumbFromProps === "undefined"
80
+ ? globalBreadcrumb
81
+ : breadcrumbFromProps;
82
+
83
+ const isDeleteButtonVisible =
84
+ canDelete ??
85
+ ((resource?.meta?.canDelete ?? resource?.canDelete) ||
86
+ deleteButtonProps);
87
+
88
+ const defaultHeaderButtons = (
89
+ <>
90
+ {!recordItemId && (
91
+ <ListButton
92
+ {...(isLoading ? { disabled: true } : {})}
93
+ resource={
94
+ routerType === "legacy"
95
+ ? resource?.route
96
+ : resource?.identifier ?? resource?.name
97
+ }
98
+ />
99
+ )}
100
+ <RefreshButton
101
+ {...(isLoading ? { disabled: true } : {})}
102
+ resource={
103
+ routerType === "legacy"
104
+ ? resource?.route
105
+ : resource?.identifier ?? resource?.name
106
+ }
107
+ recordItemId={id}
108
+ dataProviderName={dataProviderName}
109
+ />
110
+ </>
111
+ );
112
+
113
+ const defaultFooterButtons = (
114
+ <>
115
+ {isDeleteButtonVisible && (
116
+ <DeleteButton
117
+ {...(isLoading ? { disabled: true } : {})}
118
+ resource={
119
+ routerType === "legacy"
120
+ ? resource?.route
121
+ : resource?.identifier ?? resource?.name
122
+ }
123
+ mutationMode={mutationMode}
124
+ onSuccess={() => {
125
+ if (routerType === "legacy") {
126
+ legacyGoList(
127
+ resource?.route ?? resource?.name ?? "",
128
+ );
129
+ } else {
130
+ go({ to: goListPath });
131
+ }
132
+ }}
133
+ recordItemId={id}
134
+ dataProviderName={dataProviderName}
135
+ {...deleteButtonProps}
136
+ />
137
+ )}
138
+ <SaveButton
139
+ {...(isLoading ? { disabled: true } : {})}
140
+ {...saveButtonProps}
141
+ />
142
+ </>
143
+ );
144
+
145
+ return (
146
+ <div {...(wrapperProps ?? {})}>
147
+ <PageHeader
148
+ ghost={false}
149
+ backIcon={goBackFromProps}
150
+ onBack={
151
+ action !== "list" && typeof action !== "undefined"
152
+ ? routerType === "legacy"
153
+ ? goBack
154
+ : back
155
+ : undefined
156
+ }
157
+ title={
158
+ title ??
159
+ translate(
160
+ `${resource?.name}.titles.edit`,
161
+ `Edit ${userFriendlyResourceName(
162
+ resource?.meta?.label ??
163
+ resource?.options?.label ??
164
+ resource?.label ??
165
+ resource?.name,
166
+ "singular",
167
+ )}`,
168
+ )
169
+ }
170
+ extra={
171
+ <Space wrap {...(headerButtonProps ?? {})}>
172
+ {headerButtons
173
+ ? typeof headerButtons === "function"
174
+ ? headerButtons({
175
+ defaultButtons: defaultHeaderButtons,
176
+ })
177
+ : headerButtons
178
+ : defaultHeaderButtons}
179
+ </Space>
180
+ }
181
+ breadcrumb={
182
+ typeof breadcrumb !== "undefined" ? (
183
+ <>{breadcrumb}</> ?? undefined
184
+ ) : (
185
+ <Breadcrumb />
186
+ )
187
+ }
188
+ {...(headerProps ?? {})}
189
+ >
190
+ <Spin spinning={isLoading}>
191
+ <Card
192
+ bordered={false}
193
+ actions={[
194
+ <Space
195
+ key="footer-buttons"
196
+ wrap
197
+ style={{
198
+ float: "right",
199
+ marginRight: 24,
200
+ }}
201
+ {...(footerButtonProps ?? {})}
202
+ >
203
+ {footerButtons
204
+ ? typeof footerButtons === "function"
205
+ ? footerButtons({
206
+ defaultButtons:
207
+ defaultFooterButtons,
208
+ })
209
+ : footerButtons
210
+ : defaultFooterButtons}
211
+ </Space>,
212
+ ]}
213
+ {...(contentProps ?? {})}
214
+ >
215
+ {children}
216
+ </Card>
217
+ </Spin>
218
+ </PageHeader>
219
+ </div>
220
+ );
221
+ };
@@ -0,0 +1,6 @@
1
+ export { List } from "./list";
2
+ export { Create } from "./create";
3
+ export { Edit } from "./edit";
4
+ export { Show } from "./show";
5
+
6
+ export * from "./types";
@@ -0,0 +1,105 @@
1
+ import React from "react";
2
+ import { Space } from "antd";
3
+ import {
4
+ useTranslate,
5
+ userFriendlyResourceName,
6
+ useRefineContext,
7
+ useRouterType,
8
+ useResource,
9
+ } from "@refinedev/core";
10
+
11
+ import { Breadcrumb, CreateButton, PageHeader } from "@components";
12
+ import { ListProps } from "../types";
13
+
14
+ /**
15
+ * `<List>` provides us a layout for displaying the page.
16
+ * It does not contain any logic but adds extra functionalities like a refresh button.
17
+ *
18
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/list} for more details.
19
+ */
20
+ export const List: React.FC<ListProps> = ({
21
+ canCreate,
22
+ title,
23
+ children,
24
+ createButtonProps,
25
+ resource: resourceFromProps,
26
+ wrapperProps,
27
+ contentProps,
28
+ headerProps,
29
+ breadcrumb: breadcrumbFromProps,
30
+ headerButtonProps,
31
+ headerButtons,
32
+ }) => {
33
+ const translate = useTranslate();
34
+ const { options: { breadcrumb: globalBreadcrumb } = {} } =
35
+ useRefineContext();
36
+
37
+ const routerType = useRouterType();
38
+
39
+ const { resource } = useResource(resourceFromProps);
40
+
41
+ const isCreateButtonVisible =
42
+ canCreate ??
43
+ ((resource?.canCreate ?? !!resource?.create) || createButtonProps);
44
+
45
+ const breadcrumb =
46
+ typeof breadcrumbFromProps === "undefined"
47
+ ? globalBreadcrumb
48
+ : breadcrumbFromProps;
49
+
50
+ const defaultExtra = isCreateButtonVisible ? (
51
+ <CreateButton
52
+ size="middle"
53
+ resource={
54
+ routerType === "legacy"
55
+ ? resource?.route
56
+ : resource?.identifier ?? resource?.name
57
+ }
58
+ {...createButtonProps}
59
+ />
60
+ ) : null;
61
+
62
+ return (
63
+ <div {...(wrapperProps ?? {})}>
64
+ <PageHeader
65
+ ghost={false}
66
+ title={
67
+ title ??
68
+ translate(
69
+ `${resource?.name}.titles.list`,
70
+ userFriendlyResourceName(
71
+ resource?.meta?.label ??
72
+ resource?.options?.label ??
73
+ resource?.label ??
74
+ resource?.name,
75
+ "plural",
76
+ ),
77
+ )
78
+ }
79
+ extra={
80
+ headerButtons ? (
81
+ <Space wrap {...headerButtonProps}>
82
+ {typeof headerButtons === "function"
83
+ ? headerButtons({
84
+ defaultButtons: defaultExtra,
85
+ })
86
+ : headerButtons}
87
+ </Space>
88
+ ) : (
89
+ defaultExtra
90
+ )
91
+ }
92
+ breadcrumb={
93
+ typeof breadcrumb !== "undefined" ? (
94
+ <>{breadcrumb}</> ?? undefined
95
+ ) : (
96
+ <Breadcrumb />
97
+ )
98
+ }
99
+ {...(headerProps ?? {})}
100
+ >
101
+ <div {...(contentProps ?? {})}>{children}</div>
102
+ </PageHeader>
103
+ </div>
104
+ );
105
+ };
@@ -0,0 +1,215 @@
1
+ import React from "react";
2
+ import { Card, Space, Spin } from "antd";
3
+ import {
4
+ useNavigation,
5
+ useTranslate,
6
+ userFriendlyResourceName,
7
+ useRefineContext,
8
+ useResource,
9
+ useToPath,
10
+ useRouterType,
11
+ useBack,
12
+ useGo,
13
+ } from "@refinedev/core";
14
+
15
+ import {
16
+ EditButton,
17
+ DeleteButton,
18
+ RefreshButton,
19
+ ListButton,
20
+ Breadcrumb,
21
+ PageHeader,
22
+ } from "@components";
23
+ import { ShowProps } from "../types";
24
+
25
+ /**
26
+ * `<Show>` provides us a layout for displaying the page.
27
+ * It does not contain any logic but adds extra functionalities like a refresh button.
28
+ *
29
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/show} for more details.
30
+ */
31
+ export const Show: React.FC<ShowProps> = ({
32
+ title,
33
+ canEdit,
34
+ canDelete,
35
+ isLoading = false,
36
+ children,
37
+ resource: resourceFromProps,
38
+ recordItemId,
39
+ dataProviderName,
40
+ breadcrumb: breadcrumbFromProps,
41
+ contentProps,
42
+ headerProps,
43
+ wrapperProps,
44
+ headerButtons,
45
+ footerButtons,
46
+ footerButtonProps,
47
+ headerButtonProps,
48
+ goBack: goBackFromProps,
49
+ }) => {
50
+ const translate = useTranslate();
51
+ const { options: { breadcrumb: globalBreadcrumb } = {} } =
52
+ useRefineContext();
53
+
54
+ const routerType = useRouterType();
55
+ const back = useBack();
56
+ const go = useGo();
57
+ const { goBack, list: legacyGoList } = useNavigation();
58
+
59
+ const {
60
+ resource,
61
+ action,
62
+ id: idFromParams,
63
+ } = useResource(resourceFromProps);
64
+
65
+ const goListPath = useToPath({
66
+ resource,
67
+ action: "list",
68
+ });
69
+
70
+ const id = recordItemId ?? idFromParams;
71
+
72
+ const breadcrumb =
73
+ typeof breadcrumbFromProps === "undefined"
74
+ ? globalBreadcrumb
75
+ : breadcrumbFromProps;
76
+
77
+ const isDeleteButtonVisible =
78
+ canDelete ?? resource?.meta?.canDelete ?? resource?.canDelete;
79
+ const isEditButtonVisible =
80
+ canEdit ?? resource?.canEdit ?? !!resource?.edit;
81
+
82
+ const defaultHeaderButtons = (
83
+ <>
84
+ {!recordItemId && (
85
+ <ListButton
86
+ resource={
87
+ routerType === "legacy"
88
+ ? resource?.route
89
+ : resource?.identifier ?? resource?.name
90
+ }
91
+ />
92
+ )}
93
+ {isEditButtonVisible && (
94
+ <EditButton
95
+ {...(isLoading ? { disabled: true } : {})}
96
+ resource={
97
+ routerType === "legacy"
98
+ ? resource?.route
99
+ : resource?.identifier ?? resource?.name
100
+ }
101
+ recordItemId={id}
102
+ />
103
+ )}
104
+ {isDeleteButtonVisible && (
105
+ <DeleteButton
106
+ {...(isLoading ? { disabled: true } : {})}
107
+ resource={
108
+ routerType === "legacy"
109
+ ? resource?.route
110
+ : resource?.identifier ?? resource?.name
111
+ }
112
+ recordItemId={id}
113
+ onSuccess={() => {
114
+ if (routerType === "legacy") {
115
+ legacyGoList(
116
+ resource?.route ?? resource?.name ?? "",
117
+ );
118
+ } else {
119
+ go({ to: goListPath });
120
+ }
121
+ }}
122
+ dataProviderName={dataProviderName}
123
+ />
124
+ )}
125
+ <RefreshButton
126
+ {...(isLoading ? { disabled: true } : {})}
127
+ resource={
128
+ routerType === "legacy"
129
+ ? resource?.route
130
+ : resource?.identifier ?? resource?.name
131
+ }
132
+ recordItemId={id}
133
+ dataProviderName={dataProviderName}
134
+ />
135
+ </>
136
+ );
137
+
138
+ return (
139
+ <div {...(wrapperProps ?? {})}>
140
+ <PageHeader
141
+ ghost={false}
142
+ backIcon={goBackFromProps}
143
+ onBack={
144
+ action !== "list" && typeof action !== "undefined"
145
+ ? routerType === "legacy"
146
+ ? goBack
147
+ : back
148
+ : undefined
149
+ }
150
+ title={
151
+ title ??
152
+ translate(
153
+ `${resource?.name}.titles.show`,
154
+ `Show ${userFriendlyResourceName(
155
+ resource?.meta?.label ??
156
+ resource?.options?.label ??
157
+ resource?.label ??
158
+ resource?.name,
159
+ "singular",
160
+ )}`,
161
+ )
162
+ }
163
+ extra={
164
+ <Space
165
+ key="extra-buttons"
166
+ wrap
167
+ {...(headerButtonProps ?? {})}
168
+ >
169
+ {headerButtons
170
+ ? typeof headerButtons === "function"
171
+ ? headerButtons({
172
+ defaultButtons: defaultHeaderButtons,
173
+ })
174
+ : headerButtons
175
+ : defaultHeaderButtons}
176
+ </Space>
177
+ }
178
+ breadcrumb={
179
+ typeof breadcrumb !== "undefined" ? (
180
+ <>{breadcrumb}</> ?? undefined
181
+ ) : (
182
+ <Breadcrumb />
183
+ )
184
+ }
185
+ {...(headerProps ?? {})}
186
+ >
187
+ <Spin spinning={isLoading}>
188
+ <Card
189
+ bordered={false}
190
+ actions={
191
+ footerButtons
192
+ ? [
193
+ <Space
194
+ key="footer-buttons"
195
+ wrap
196
+ {...footerButtonProps}
197
+ >
198
+ {typeof footerButtons === "function"
199
+ ? footerButtons({
200
+ defaultButtons: null,
201
+ })
202
+ : footerButtons}
203
+ </Space>,
204
+ ]
205
+ : undefined
206
+ }
207
+ {...(contentProps ?? {})}
208
+ >
209
+ {children}
210
+ </Card>
211
+ </Spin>
212
+ </PageHeader>
213
+ </div>
214
+ );
215
+ };
@@ -0,0 +1,63 @@
1
+ import { CardProps, SpaceProps } from "antd";
2
+ import {
3
+ CreateButtonProps,
4
+ DeleteButtonProps,
5
+ SaveButtonProps,
6
+ } from "@components/buttons";
7
+ import {
8
+ RefineCrudCreateProps,
9
+ RefineCrudEditProps,
10
+ RefineCrudListProps,
11
+ RefineCrudShowProps,
12
+ } from "@refinedev/ui-types";
13
+ import { PageHeaderProps } from "../pageHeader";
14
+
15
+ export type CreateProps = RefineCrudCreateProps<
16
+ SaveButtonProps,
17
+ SpaceProps,
18
+ SpaceProps,
19
+ React.DetailedHTMLProps<
20
+ React.HTMLAttributes<HTMLDivElement>,
21
+ HTMLDivElement
22
+ >,
23
+ PageHeaderProps,
24
+ CardProps
25
+ >;
26
+
27
+ export type EditProps = RefineCrudEditProps<
28
+ SaveButtonProps,
29
+ DeleteButtonProps,
30
+ SpaceProps,
31
+ SpaceProps,
32
+ React.DetailedHTMLProps<
33
+ React.HTMLAttributes<HTMLDivElement>,
34
+ HTMLDivElement
35
+ >,
36
+ PageHeaderProps,
37
+ CardProps
38
+ >;
39
+
40
+ export type ListProps = RefineCrudListProps<
41
+ CreateButtonProps,
42
+ SpaceProps,
43
+ React.DetailedHTMLProps<
44
+ React.HTMLAttributes<HTMLDivElement>,
45
+ HTMLDivElement
46
+ >,
47
+ PageHeaderProps,
48
+ React.DetailedHTMLProps<
49
+ React.HTMLAttributes<HTMLDivElement>,
50
+ HTMLDivElement
51
+ >
52
+ >;
53
+
54
+ export type ShowProps = RefineCrudShowProps<
55
+ SpaceProps,
56
+ SpaceProps,
57
+ React.DetailedHTMLProps<
58
+ React.HTMLAttributes<HTMLDivElement>,
59
+ HTMLDivElement
60
+ >,
61
+ PageHeaderProps,
62
+ CardProps
63
+ >;
@@ -0,0 +1,26 @@
1
+ import React from "react";
2
+ import { Tooltip } from "antd";
3
+
4
+ import { CheckOutlined, CloseOutlined } from "@ant-design/icons";
5
+
6
+ import { BooleanFieldProps } from "../types";
7
+
8
+ /**
9
+ * This field is used to display boolean values. It uses the {@link https://ant.design/components/tooltip/#header `<Tooltip>`} values from Ant Design.
10
+ *
11
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/boolean} for more details.
12
+ */
13
+ export const BooleanField: React.FC<BooleanFieldProps> = ({
14
+ value,
15
+ valueLabelTrue = "true",
16
+ valueLabelFalse = "false",
17
+ trueIcon = <CheckOutlined />,
18
+ falseIcon = <CloseOutlined />,
19
+ ...rest
20
+ }) => {
21
+ return (
22
+ <Tooltip title={value ? valueLabelTrue : valueLabelFalse} {...rest}>
23
+ {value ? <span>{trueIcon}</span> : <span>{falseIcon}</span>}
24
+ </Tooltip>
25
+ );
26
+ };
@@ -0,0 +1,33 @@
1
+ import React from "react";
2
+ import dayjs from "dayjs";
3
+ import { Typography } from "antd";
4
+
5
+ import LocalizedFormat from "dayjs/plugin/localizedFormat";
6
+
7
+ dayjs.extend(LocalizedFormat);
8
+
9
+ const defaultLocale = dayjs.locale();
10
+
11
+ import { DateFieldProps } from "../types";
12
+
13
+ /**
14
+ * This field is used to display dates. It uses {@link https://day.js.org/docs/en/display/format `Day.js`} to display date format.
15
+ *
16
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/date} for more details.
17
+ */
18
+ export const DateField: React.FC<DateFieldProps> = ({
19
+ value,
20
+ locales,
21
+ format: dateFormat = "L",
22
+ ...rest
23
+ }) => {
24
+ const { Text } = Typography;
25
+
26
+ return (
27
+ <Text {...rest}>
28
+ {dayjs(value)
29
+ .locale(locales || defaultLocale)
30
+ .format(dateFormat)}
31
+ </Text>
32
+ );
33
+ };
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ import { Typography } from "antd";
3
+
4
+ const { Link } = Typography;
5
+
6
+ import { EmailFieldProps } from "../types";
7
+
8
+ /**
9
+ * This field is used to display email values. It uses the {@link https://ant.design/components/typography/#FAQ `<Link>`} component
10
+ * of {@link https://ant.design/components/typography `<Typography>`} from Ant Design.
11
+ *
12
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/email} for more details.
13
+ */
14
+ export const EmailField: React.FC<EmailFieldProps> = ({ value, ...rest }) => {
15
+ return (
16
+ <Link href={`mailto:${value}`} {...rest}>
17
+ {value}
18
+ </Link>
19
+ );
20
+ };