@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,21 @@
1
+ import React from "react";
2
+
3
+ import { UrlField } from "@components";
4
+ import { FileFieldProps } from "../types";
5
+
6
+ /**
7
+ * This field is used to display files and uses {@link https://ant.design/components/typography `<Typography.Link>`} from Ant Design.
8
+ *
9
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/file} for more details.
10
+ */
11
+ export const FileField: React.FC<FileFieldProps> = ({
12
+ title,
13
+ src,
14
+ ...rest
15
+ }) => {
16
+ return (
17
+ <UrlField value={src} title={title} {...rest}>
18
+ {title ?? src}
19
+ </UrlField>
20
+ );
21
+ };
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import { Image } from "antd";
3
+
4
+ import { ImageFieldProps } from "../types";
5
+
6
+ /**
7
+ * This field is used to display images and uses {@link https://ant.design/components/image/#header `<Image>`} from Ant Design.
8
+ *
9
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/image} for more details.
10
+ */
11
+ export const ImageField: React.FC<ImageFieldProps> = ({
12
+ value,
13
+ imageTitle,
14
+ ...rest
15
+ }) => {
16
+ return <Image {...rest} src={value} title={imageTitle} />;
17
+ };
@@ -0,0 +1,11 @@
1
+ export { TextField } from "./text";
2
+ export { TagField } from "./tag";
3
+ export { EmailField } from "./email";
4
+ export { ImageField } from "./image";
5
+ export { BooleanField } from "./boolean";
6
+ export { DateField } from "./date";
7
+ export { FileField } from "./file";
8
+ export { UrlField } from "./url";
9
+ export { NumberField } from "./number";
10
+ export { MarkdownField } from "./markdown";
11
+ export * from "./types";
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ import ReactMarkdown from "react-markdown";
3
+ import gfm from "remark-gfm";
4
+
5
+ import { RefineFieldMarkdownProps } from "../types";
6
+
7
+ /**
8
+ * This field lets you display markdown content. It supports {@link https://github.github.com/gfm/ GitHub Flavored Markdown}.
9
+ *
10
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/markdown} for more details.
11
+ */
12
+ export const MarkdownField: React.FC<RefineFieldMarkdownProps> = ({
13
+ value = "",
14
+ }) => {
15
+ return <ReactMarkdown plugins={[gfm]}>{value}</ReactMarkdown>;
16
+ };
@@ -0,0 +1,36 @@
1
+ import React from "react";
2
+ import { Typography } from "antd";
3
+
4
+ const { Text } = Typography;
5
+
6
+ function toLocaleStringSupportsOptions() {
7
+ return !!(
8
+ typeof Intl == "object" &&
9
+ Intl &&
10
+ typeof Intl.NumberFormat == "function"
11
+ );
12
+ }
13
+
14
+ import { NumberFieldProps } from "../types";
15
+
16
+ /**
17
+ * This field is used to display a number formatted according to the browser locale, right aligned. and uses {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl `Intl`} to display date format.
18
+ *
19
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/number} for more details.
20
+ */
21
+ export const NumberField: React.FC<NumberFieldProps> = ({
22
+ value,
23
+ locale,
24
+ options,
25
+ ...rest
26
+ }) => {
27
+ const number = parseFloat(value.toString());
28
+
29
+ return (
30
+ <Text {...rest}>
31
+ {toLocaleStringSupportsOptions()
32
+ ? number.toLocaleString(locale, options)
33
+ : number}
34
+ </Text>
35
+ );
36
+ };
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ import { Tag } from "antd";
3
+
4
+ import { TagFieldProps } from "../types";
5
+
6
+ /**
7
+ * This field lets you display a value in a tag. It uses Ant Design's {@link https://ant.design/components/tag/ `<Tag>`} component.
8
+ *
9
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/tag} for more details.
10
+ */
11
+ export const TagField: React.FC<TagFieldProps> = ({ value, ...rest }) => {
12
+ return <Tag {...rest}>{value?.toString()}</Tag>;
13
+ };
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+ import { Typography } from "antd";
3
+
4
+ const { Text } = Typography;
5
+
6
+ import { TextFieldProps } from "../types";
7
+
8
+ /**
9
+ * This field lets you show basic text. It uses Ant Design's {@link https://ant.design/components/typography/#Typography.Text `<Typography.Text>`} component.
10
+ *
11
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/text} for more details.
12
+ */
13
+ export const TextField: React.FC<TextFieldProps> = ({ value, ...rest }) => {
14
+ return <Text {...rest}>{value}</Text>;
15
+ };
@@ -0,0 +1,49 @@
1
+ import { ReactChild, ReactNode } from "react";
2
+ import { ConfigType } from "dayjs";
3
+ import {
4
+ RefineFieldBooleanProps,
5
+ RefineFieldDateProps,
6
+ RefineFieldEmailProps,
7
+ RefineFieldFileProps,
8
+ RefineFieldImageProps,
9
+ RefineFieldMarkdownProps as BaseRefineFieldMarkdownProps,
10
+ RefineFieldNumberProps,
11
+ RefineFieldTagProps,
12
+ RefineFieldTextProps,
13
+ RefineFieldUrlProps,
14
+ } from "@refinedev/ui-types";
15
+ import { ImageProps, TagProps } from "antd";
16
+ import { AbstractTooltipProps } from "antd/lib/tooltip";
17
+ import { TextProps } from "antd/lib/typography/Text";
18
+ import { LinkProps } from "antd/lib/typography/Link";
19
+
20
+ export type BooleanFieldProps = RefineFieldBooleanProps<
21
+ unknown,
22
+ AbstractTooltipProps
23
+ >;
24
+
25
+ export type DateFieldProps = RefineFieldDateProps<ConfigType, TextProps>;
26
+
27
+ export type EmailFieldProps = RefineFieldEmailProps<ReactNode, LinkProps>;
28
+
29
+ export type FileFieldProps = RefineFieldFileProps<LinkProps>;
30
+
31
+ export type ImageFieldProps = RefineFieldImageProps<
32
+ string | undefined,
33
+ ImageProps,
34
+ {
35
+ imageTitle?: string;
36
+ }
37
+ >;
38
+
39
+ export type RefineFieldMarkdownProps = BaseRefineFieldMarkdownProps<
40
+ string | undefined
41
+ >;
42
+
43
+ export type NumberFieldProps = RefineFieldNumberProps<ReactChild, TextProps>;
44
+
45
+ export type TagFieldProps = RefineFieldTagProps<ReactNode, TagProps>;
46
+
47
+ export type TextFieldProps = RefineFieldTextProps<ReactNode, TextProps>;
48
+
49
+ export type UrlFieldProps = RefineFieldUrlProps<string | undefined, LinkProps>;
@@ -0,0 +1,24 @@
1
+ import React from "react";
2
+ import { Typography } from "antd";
3
+
4
+ const { Link } = Typography;
5
+
6
+ import { UrlFieldProps } from "../types";
7
+
8
+ /**
9
+ * This field lets you embed a link. It uses Ant Design's {@link https://ant.design/components/typography/ `<Typography.Link>`} component.
10
+ * You can pass a URL in its `value` property and you can show a text in its place by passing any `children`.
11
+ *
12
+ * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/url} for more details.
13
+ */
14
+ export const UrlField: React.FC<UrlFieldProps> = ({
15
+ children,
16
+ value,
17
+ ...rest
18
+ }) => {
19
+ return (
20
+ <Link href={value} {...rest}>
21
+ {children ?? value}
22
+ </Link>
23
+ );
24
+ };
@@ -0,0 +1,14 @@
1
+ // Layout
2
+ export { Layout } from "./layout";
3
+ export { Header } from "./layout/header";
4
+ export { Sider } from "./layout/sider";
5
+ export { Title } from "./layout/title";
6
+ export * from "./layout/types";
7
+
8
+ export * from "./buttons";
9
+ export * from "./crud";
10
+ export * from "./fields";
11
+ export * from "./table";
12
+ export * from "./pages";
13
+ export * from "./breadcrumb";
14
+ export * from "./pageHeader";
@@ -0,0 +1,37 @@
1
+ import React from "react";
2
+ import { Layout as AntdLayout, Typography, Avatar, Space } from "antd";
3
+ import { useGetIdentity, useActiveAuthProvider } from "@refinedev/core";
4
+ import { RefineLayoutHeaderProps } from "../types";
5
+ const { Text } = Typography;
6
+
7
+ export const Header: React.FC<RefineLayoutHeaderProps> = () => {
8
+ const authProvider = useActiveAuthProvider();
9
+ const { data: user } = useGetIdentity({
10
+ v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),
11
+ });
12
+
13
+ const shouldRenderHeader = user && (user.name || user.avatar);
14
+
15
+ return shouldRenderHeader ? (
16
+ <AntdLayout.Header
17
+ style={{
18
+ display: "flex",
19
+ justifyContent: "flex-end",
20
+ alignItems: "center",
21
+ padding: "0px 24px",
22
+ height: "64px",
23
+ }}
24
+ >
25
+ <Space>
26
+ {user.name && (
27
+ <Text ellipsis strong>
28
+ {user.name}
29
+ </Text>
30
+ )}
31
+ {user.avatar && (
32
+ <Avatar size="large" src={user?.avatar} alt={user?.name} />
33
+ )}
34
+ </Space>
35
+ </AntdLayout.Header>
36
+ ) : null;
37
+ };
@@ -0,0 +1,41 @@
1
+ import React from "react";
2
+ import { Grid, Layout as AntdLayout } from "antd";
3
+
4
+ import { Sider as DefaultSider } from "./sider";
5
+ import { Header as DefaultHeader } from "./header";
6
+ import { RefineLayoutLayoutProps } from "./types";
7
+
8
+ export const Layout: React.FC<RefineLayoutLayoutProps> = ({
9
+ children,
10
+ Header,
11
+ Sider,
12
+ Title,
13
+ Footer,
14
+ OffLayoutArea,
15
+ }) => {
16
+ const breakpoint = Grid.useBreakpoint();
17
+ const SiderToRender = Sider ?? DefaultSider;
18
+ const HeaderToRender = Header ?? DefaultHeader;
19
+ const isSmall = typeof breakpoint.sm === "undefined" ? true : breakpoint.sm;
20
+
21
+ return (
22
+ <AntdLayout style={{ minHeight: "100vh" }}>
23
+ <SiderToRender Title={Title} />
24
+ <AntdLayout>
25
+ <HeaderToRender />
26
+ <AntdLayout.Content>
27
+ <div
28
+ style={{
29
+ minHeight: 360,
30
+ padding: isSmall ? 24 : 12,
31
+ }}
32
+ >
33
+ {children}
34
+ </div>
35
+ {OffLayoutArea && <OffLayoutArea />}
36
+ </AntdLayout.Content>
37
+ {Footer && <Footer />}
38
+ </AntdLayout>
39
+ </AntdLayout>
40
+ );
41
+ };
@@ -0,0 +1,261 @@
1
+ import React, { useState } from "react";
2
+ import { Layout, Menu, Grid, ConfigProvider, Drawer, Button } from "antd";
3
+ import {
4
+ DashboardOutlined,
5
+ LogoutOutlined,
6
+ UnorderedListOutlined,
7
+ BarsOutlined,
8
+ } from "@ant-design/icons";
9
+ import {
10
+ useTranslate,
11
+ useLogout,
12
+ useTitle,
13
+ CanAccess,
14
+ ITreeMenu,
15
+ useIsExistAuthentication,
16
+ useRouterContext,
17
+ useMenu,
18
+ useRefineContext,
19
+ useLink,
20
+ useRouterType,
21
+ useActiveAuthProvider,
22
+ pickNotDeprecated,
23
+ } from "@refinedev/core";
24
+
25
+ import { Title as DefaultTitle } from "@components";
26
+
27
+ import { drawerButtonStyles } from "./styles";
28
+ import { RefineLayoutSiderProps } from "../types";
29
+
30
+ const { SubMenu } = Menu;
31
+
32
+ export const Sider: React.FC<RefineLayoutSiderProps> = ({
33
+ Title: TitleFromProps,
34
+ render,
35
+ meta,
36
+ }) => {
37
+ const [collapsed, setCollapsed] = useState<boolean>(false);
38
+ const [drawerOpen, setDrawerOpen] = useState<boolean>(false);
39
+ const isExistAuthentication = useIsExistAuthentication();
40
+ const routerType = useRouterType();
41
+ const NewLink = useLink();
42
+ const { Link: LegacyLink } = useRouterContext();
43
+ const Link = routerType === "legacy" ? LegacyLink : NewLink;
44
+ const TitleFromContext = useTitle();
45
+ const translate = useTranslate();
46
+ const { menuItems, selectedKey, defaultOpenKeys } = useMenu({ meta });
47
+ const breakpoint = Grid.useBreakpoint();
48
+ const { hasDashboard } = useRefineContext();
49
+ const authProvider = useActiveAuthProvider();
50
+ const { mutate: mutateLogout } = useLogout({
51
+ v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),
52
+ });
53
+
54
+ const isMobile =
55
+ typeof breakpoint.lg === "undefined" ? false : !breakpoint.lg;
56
+
57
+ const RenderToTitle = TitleFromProps ?? TitleFromContext ?? DefaultTitle;
58
+
59
+ const renderTreeView = (tree: ITreeMenu[], selectedKey?: string) => {
60
+ return tree.map((item: ITreeMenu) => {
61
+ const {
62
+ icon,
63
+ label,
64
+ route,
65
+ key,
66
+ name,
67
+ children,
68
+ parentName,
69
+ meta,
70
+ options,
71
+ } = item;
72
+
73
+ if (children.length > 0) {
74
+ return (
75
+ <CanAccess
76
+ key={item.key}
77
+ resource={name.toLowerCase()}
78
+ action="list"
79
+ params={{
80
+ resource: item,
81
+ }}
82
+ >
83
+ <SubMenu
84
+ key={item.key}
85
+ icon={icon ?? <UnorderedListOutlined />}
86
+ title={label}
87
+ >
88
+ {renderTreeView(children, selectedKey)}
89
+ </SubMenu>
90
+ </CanAccess>
91
+ );
92
+ }
93
+ const isSelected = key === selectedKey;
94
+ const isRoute = !(
95
+ pickNotDeprecated(meta?.parent, options?.parent, parentName) !==
96
+ undefined && children.length === 0
97
+ );
98
+ return (
99
+ <CanAccess
100
+ key={item.key}
101
+ resource={name.toLowerCase()}
102
+ action="list"
103
+ params={{
104
+ resource: item,
105
+ }}
106
+ >
107
+ <Menu.Item
108
+ key={item.key}
109
+ style={{
110
+ fontWeight: isSelected ? "bold" : "normal",
111
+ }}
112
+ icon={icon ?? (isRoute && <UnorderedListOutlined />)}
113
+ >
114
+ <Link to={route ?? ""}>{label}</Link>
115
+ {!collapsed && isSelected && (
116
+ <div className="ant-menu-tree-arrow" />
117
+ )}
118
+ </Menu.Item>
119
+ </CanAccess>
120
+ );
121
+ });
122
+ };
123
+
124
+ const logout = isExistAuthentication && (
125
+ <Menu.Item
126
+ key="logout"
127
+ onClick={() => mutateLogout()}
128
+ icon={<LogoutOutlined />}
129
+ >
130
+ {translate("buttons.logout", "Logout")}
131
+ </Menu.Item>
132
+ );
133
+
134
+ const dashboard = hasDashboard ? (
135
+ <Menu.Item
136
+ key="dashboard"
137
+ style={{
138
+ fontWeight: selectedKey === "/" ? "bold" : "normal",
139
+ }}
140
+ icon={<DashboardOutlined />}
141
+ >
142
+ <Link to="/">{translate("dashboard.title", "Dashboard")}</Link>
143
+ {!collapsed && selectedKey === "/" && (
144
+ <div className="ant-menu-tree-arrow" />
145
+ )}
146
+ </Menu.Item>
147
+ ) : null;
148
+
149
+ const items = renderTreeView(menuItems, selectedKey);
150
+
151
+ const renderSider = () => {
152
+ if (render) {
153
+ return render({
154
+ dashboard,
155
+ items,
156
+ logout,
157
+ collapsed,
158
+ });
159
+ }
160
+ return (
161
+ <>
162
+ {dashboard}
163
+ {items}
164
+ {logout}
165
+ </>
166
+ );
167
+ };
168
+
169
+ const renderMenu = () => {
170
+ return (
171
+ <>
172
+ <Menu
173
+ theme="dark"
174
+ selectedKeys={selectedKey ? [selectedKey] : []}
175
+ defaultOpenKeys={defaultOpenKeys}
176
+ mode="inline"
177
+ onClick={() => {
178
+ setDrawerOpen(false);
179
+ if (!breakpoint.lg) {
180
+ setCollapsed(true);
181
+ }
182
+ }}
183
+ >
184
+ {renderSider()}
185
+ </Menu>
186
+ </>
187
+ );
188
+ };
189
+
190
+ const renderDrawerSider = () => {
191
+ return (
192
+ <>
193
+ <Drawer
194
+ open={drawerOpen}
195
+ onClose={() => setDrawerOpen(false)}
196
+ placement="left"
197
+ closable={false}
198
+ width={200}
199
+ bodyStyle={{
200
+ padding: 0,
201
+ }}
202
+ maskClosable={true}
203
+ >
204
+ <Layout>
205
+ <Layout.Sider
206
+ style={{ height: "100vh", overflow: "hidden" }}
207
+ >
208
+ <RenderToTitle collapsed={false} />
209
+ {renderMenu()}
210
+ </Layout.Sider>
211
+ </Layout>
212
+ </Drawer>
213
+ <Button
214
+ style={drawerButtonStyles}
215
+ size="large"
216
+ onClick={() => setDrawerOpen(true)}
217
+ icon={<BarsOutlined />}
218
+ ></Button>
219
+ </>
220
+ );
221
+ };
222
+
223
+ const renderContent = () => {
224
+ if (isMobile) {
225
+ return renderDrawerSider();
226
+ }
227
+
228
+ return (
229
+ <Layout.Sider
230
+ collapsible
231
+ collapsed={collapsed}
232
+ onCollapse={(collapsed: boolean): void =>
233
+ setCollapsed(collapsed)
234
+ }
235
+ collapsedWidth={80}
236
+ breakpoint="lg"
237
+ >
238
+ <RenderToTitle collapsed={collapsed} />
239
+ {renderMenu()}
240
+ </Layout.Sider>
241
+ );
242
+ };
243
+
244
+ return (
245
+ <ConfigProvider
246
+ theme={{
247
+ components: {
248
+ Menu: {
249
+ colorItemBg: "transparent",
250
+ colorItemText: "#fff",
251
+ colorItemTextSelected: "#fff",
252
+ colorItemBgSelected: "transparent",
253
+ colorItemTextHover: "#fff",
254
+ },
255
+ },
256
+ }}
257
+ >
258
+ {renderContent()}
259
+ </ConfigProvider>
260
+ );
261
+ };
@@ -0,0 +1,9 @@
1
+ import { CSSProperties } from "react";
2
+
3
+ export const drawerButtonStyles: CSSProperties = {
4
+ borderTopLeftRadius: 0,
5
+ borderBottomLeftRadius: 0,
6
+ position: "fixed",
7
+ top: 64,
8
+ zIndex: 999,
9
+ };
@@ -0,0 +1,48 @@
1
+ import React from "react";
2
+ import {
3
+ TitleProps,
4
+ useRouterContext,
5
+ useRouterType,
6
+ useLink,
7
+ } from "@refinedev/core";
8
+
9
+ export const Title: React.FC<TitleProps> = ({ collapsed }) => {
10
+ const routerType = useRouterType();
11
+ const Link = useLink();
12
+ const { Link: LegacyLink } = useRouterContext();
13
+
14
+ const ActiveLink = routerType === "legacy" ? LegacyLink : Link;
15
+
16
+ return (
17
+ <ActiveLink to="/">
18
+ {collapsed ? (
19
+ <div
20
+ style={{
21
+ display: "flex",
22
+ alignItems: "center",
23
+ justifyContent: "center",
24
+ }}
25
+ >
26
+ <img
27
+ src="https://refine.ams3.cdn.digitaloceanspaces.com/logo/refine-mini.svg"
28
+ alt="Refine"
29
+ style={{
30
+ margin: "0 auto",
31
+ padding: "12px 0",
32
+ maxHeight: "65.5px",
33
+ }}
34
+ />
35
+ </div>
36
+ ) : (
37
+ <img
38
+ src="https://refine.ams3.cdn.digitaloceanspaces.com/logo/refine.svg"
39
+ alt="Refine"
40
+ style={{
41
+ width: "200px",
42
+ padding: "12px 24px",
43
+ }}
44
+ />
45
+ )}
46
+ </ActiveLink>
47
+ );
48
+ };
@@ -0,0 +1,11 @@
1
+ import type {
2
+ RefineLayoutSiderProps,
3
+ RefineLayoutHeaderProps,
4
+ RefineLayoutLayoutProps,
5
+ } from "@refinedev/ui-types";
6
+
7
+ export type {
8
+ RefineLayoutSiderProps,
9
+ RefineLayoutHeaderProps,
10
+ RefineLayoutLayoutProps,
11
+ };