@refinedev/antd 5.37.3 → 5.37.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/CHANGELOG.md +1766 -1776
  2. package/dist/components/autoSaveIndicator/index.d.ts.map +1 -1
  3. package/dist/components/breadcrumb/index.d.ts.map +1 -1
  4. package/dist/components/buttons/create/index.d.ts.map +1 -1
  5. package/dist/components/buttons/delete/index.d.ts.map +1 -1
  6. package/dist/components/buttons/import/index.d.ts.map +1 -1
  7. package/dist/components/buttons/types.d.ts.map +1 -1
  8. package/dist/components/crud/edit/index.d.ts.map +1 -1
  9. package/dist/components/crud/list/index.d.ts.map +1 -1
  10. package/dist/components/crud/show/index.d.ts.map +1 -1
  11. package/dist/components/crud/types.d.ts.map +1 -1
  12. package/dist/components/fields/date/index.d.ts.map +1 -1
  13. package/dist/components/fields/email/index.d.ts.map +1 -1
  14. package/dist/components/fields/number/index.d.ts.map +1 -1
  15. package/dist/components/fields/text/index.d.ts.map +1 -1
  16. package/dist/components/fields/types.d.ts.map +1 -1
  17. package/dist/components/fields/url/index.d.ts.map +1 -1
  18. package/dist/components/layout/header/index.d.ts.map +1 -1
  19. package/dist/components/layout/sider/index.d.ts.map +1 -1
  20. package/dist/components/layout/title/index.d.ts.map +1 -1
  21. package/dist/components/layout/types.d.ts.map +1 -1
  22. package/dist/components/pageHeader/index.d.ts.map +1 -1
  23. package/dist/components/pages/auth/components/forgotPassword/index.d.ts.map +1 -1
  24. package/dist/components/pages/auth/components/login/index.d.ts.map +1 -1
  25. package/dist/components/pages/auth/components/register/index.d.ts.map +1 -1
  26. package/dist/components/pages/auth/components/updatePassword/index.d.ts.map +1 -1
  27. package/dist/components/pages/auth/index.d.ts.map +1 -1
  28. package/dist/components/pages/error/index.d.ts.map +1 -1
  29. package/dist/components/pages/login/index.d.ts.map +1 -1
  30. package/dist/components/pages/ready/index.d.ts.map +1 -1
  31. package/dist/components/table/components/filterDropdown/index.d.ts.map +1 -1
  32. package/dist/components/themedLayout/header/index.d.ts.map +1 -1
  33. package/dist/components/themedLayout/sider/index.d.ts.map +1 -1
  34. package/dist/components/themedLayout/title/index.d.ts.map +1 -1
  35. package/dist/components/themedLayout/types.d.ts.map +1 -1
  36. package/dist/components/themedLayoutV2/header/index.d.ts.map +1 -1
  37. package/dist/components/themedLayoutV2/index.d.ts.map +1 -1
  38. package/dist/components/themedLayoutV2/sider/index.d.ts.map +1 -1
  39. package/dist/components/themedLayoutV2/title/index.d.ts.map +1 -1
  40. package/dist/components/themedLayoutV2/types.d.ts.map +1 -1
  41. package/dist/components/undoableNotification/index.d.ts.map +1 -1
  42. package/dist/contexts/index.d.ts.map +1 -1
  43. package/dist/contexts/themedLayoutContext/IThemedLayoutContext.d.ts.map +1 -1
  44. package/dist/contexts/themedLayoutContext/index.d.ts.map +1 -1
  45. package/dist/definitions/table/index.d.ts.map +1 -1
  46. package/dist/definitions/themes/index.d.ts.map +1 -1
  47. package/dist/esm/index.js +2 -1
  48. package/dist/esm/index.js.map +1 -1
  49. package/dist/hooks/fields/useCheckboxGroup/index.d.ts.map +1 -1
  50. package/dist/hooks/fields/useRadioGroup/index.d.ts.map +1 -1
  51. package/dist/hooks/fields/useSelect/index.d.ts.map +1 -1
  52. package/dist/hooks/form/index.d.ts.map +1 -1
  53. package/dist/hooks/form/useDrawerForm/index.d.ts.map +1 -1
  54. package/dist/hooks/form/useDrawerForm/useDrawerForm.d.ts.map +1 -1
  55. package/dist/hooks/form/useForm.d.ts.map +1 -1
  56. package/dist/hooks/form/useModalForm/index.d.ts.map +1 -1
  57. package/dist/hooks/form/useModalForm/useModalForm.d.ts.map +1 -1
  58. package/dist/hooks/form/useStepsForm/index.d.ts.map +1 -1
  59. package/dist/hooks/form/useStepsForm/useStepsForm.d.ts.map +1 -1
  60. package/dist/hooks/import/index.d.ts.map +1 -1
  61. package/dist/hooks/list/useSimpleList/useSimpleList.d.ts.map +1 -1
  62. package/dist/hooks/modal/useModal/index.d.ts.map +1 -1
  63. package/dist/hooks/table/useEditableTable/useEditableTable.d.ts.map +1 -1
  64. package/dist/hooks/table/useTable/paginationLink.d.ts.map +1 -1
  65. package/dist/hooks/table/useTable/useTable.d.ts.map +1 -1
  66. package/dist/hooks/useFileUploadState/index.d.ts.map +1 -1
  67. package/dist/hooks/useSiderVisible/index.d.ts.map +1 -1
  68. package/dist/iife/index.js +11 -10
  69. package/dist/iife/index.js.map +1 -1
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +2 -1
  72. package/dist/index.js.map +1 -1
  73. package/dist/interfaces/field.d.ts.map +1 -1
  74. package/dist/interfaces/index.d.ts.map +1 -1
  75. package/dist/interfaces/upload.d.ts.map +1 -1
  76. package/package.json +32 -32
  77. package/refine.config.js +497 -524
  78. package/src/components/autoSaveIndicator/index.tsx +69 -70
  79. package/src/components/breadcrumb/index.tsx +63 -65
  80. package/src/components/buttons/clone/index.tsx +86 -86
  81. package/src/components/buttons/create/index.tsx +85 -86
  82. package/src/components/buttons/delete/index.tsx +114 -119
  83. package/src/components/buttons/edit/index.tsx +86 -86
  84. package/src/components/buttons/export/index.tsx +17 -17
  85. package/src/components/buttons/import/index.tsx +19 -20
  86. package/src/components/buttons/list/index.tsx +105 -105
  87. package/src/components/buttons/refresh/index.tsx +50 -50
  88. package/src/components/buttons/save/index.tsx +17 -17
  89. package/src/components/buttons/show/index.tsx +86 -86
  90. package/src/components/buttons/types.ts +20 -20
  91. package/src/components/crud/create/index.tsx +120 -120
  92. package/src/components/crud/edit/index.tsx +205 -207
  93. package/src/components/crud/list/index.tsx +88 -90
  94. package/src/components/crud/show/index.tsx +175 -185
  95. package/src/components/crud/types.ts +41 -56
  96. package/src/components/fields/boolean/index.tsx +11 -11
  97. package/src/components/fields/date/index.tsx +13 -15
  98. package/src/components/fields/email/index.tsx +5 -7
  99. package/src/components/fields/file/index.tsx +8 -8
  100. package/src/components/fields/image/index.tsx +4 -4
  101. package/src/components/fields/markdown/index.tsx +9 -9
  102. package/src/components/fields/number/index.tsx +17 -19
  103. package/src/components/fields/tag/index.tsx +1 -1
  104. package/src/components/fields/text/index.tsx +1 -3
  105. package/src/components/fields/types.ts +18 -18
  106. package/src/components/fields/url/index.tsx +8 -10
  107. package/src/components/layout/header/index.tsx +25 -26
  108. package/src/components/layout/index.tsx +30 -30
  109. package/src/components/layout/sider/index.tsx +238 -248
  110. package/src/components/layout/sider/styles.ts +5 -5
  111. package/src/components/layout/title/index.tsx +40 -40
  112. package/src/components/layout/types.ts +6 -6
  113. package/src/components/pageHeader/index.tsx +44 -44
  114. package/src/components/pages/auth/components/forgotPassword/index.tsx +177 -183
  115. package/src/components/pages/auth/components/login/index.tsx +258 -274
  116. package/src/components/pages/auth/components/register/index.tsx +247 -266
  117. package/src/components/pages/auth/components/styles.ts +16 -16
  118. package/src/components/pages/auth/components/updatePassword/index.tsx +160 -177
  119. package/src/components/pages/auth/index.tsx +23 -23
  120. package/src/components/pages/error/index.tsx +57 -59
  121. package/src/components/pages/login/index.tsx +120 -147
  122. package/src/components/pages/login/styles.ts +12 -12
  123. package/src/components/pages/ready/index.tsx +72 -80
  124. package/src/components/pages/welcome/index.tsx +1 -1
  125. package/src/components/table/components/filterDropdown/index.tsx +89 -92
  126. package/src/components/themedLayout/header/index.tsx +28 -33
  127. package/src/components/themedLayout/index.tsx +30 -30
  128. package/src/components/themedLayout/sider/index.tsx +279 -282
  129. package/src/components/themedLayout/sider/styles.ts +5 -5
  130. package/src/components/themedLayout/title/index.tsx +66 -68
  131. package/src/components/themedLayout/types.ts +8 -8
  132. package/src/components/themedLayoutV2/header/index.tsx +43 -48
  133. package/src/components/themedLayoutV2/index.tsx +34 -36
  134. package/src/components/themedLayoutV2/sider/index.tsx +309 -316
  135. package/src/components/themedLayoutV2/sider/styles.ts +5 -5
  136. package/src/components/themedLayoutV2/title/index.tsx +66 -68
  137. package/src/components/themedLayoutV2/types.ts +9 -9
  138. package/src/components/undoableNotification/index.tsx +31 -31
  139. package/src/contexts/index.ts +2 -2
  140. package/src/contexts/themedLayoutContext/IThemedLayoutContext.ts +4 -4
  141. package/src/contexts/themedLayoutContext/index.tsx +22 -22
  142. package/src/definitions/table/index.ts +81 -82
  143. package/src/definitions/themes/index.ts +35 -35
  144. package/src/definitions/upload/index.ts +17 -17
  145. package/src/hooks/fields/useCheckboxGroup/index.ts +64 -64
  146. package/src/hooks/fields/useRadioGroup/index.ts +60 -63
  147. package/src/hooks/fields/useSelect/index.ts +30 -30
  148. package/src/hooks/form/index.ts +10 -10
  149. package/src/hooks/form/useDrawerForm/index.ts +4 -4
  150. package/src/hooks/form/useDrawerForm/useDrawerForm.ts +257 -261
  151. package/src/hooks/form/useForm.ts +256 -259
  152. package/src/hooks/form/useModalForm/index.ts +3 -3
  153. package/src/hooks/form/useModalForm/useModalForm.ts +289 -295
  154. package/src/hooks/form/useStepsForm/index.ts +3 -3
  155. package/src/hooks/form/useStepsForm/useStepsForm.ts +96 -96
  156. package/src/hooks/import/index.tsx +104 -106
  157. package/src/hooks/list/useSimpleList/useSimpleList.ts +179 -185
  158. package/src/hooks/modal/useModal/index.tsx +24 -24
  159. package/src/hooks/table/useEditableTable/useEditableTable.ts +85 -85
  160. package/src/hooks/table/useTable/paginationLink.tsx +17 -17
  161. package/src/hooks/table/useTable/useTable.ts +199 -205
  162. package/src/hooks/useFileUploadState/index.ts +20 -20
  163. package/src/hooks/useSiderVisible/index.ts +16 -16
  164. package/src/hooks/useThemedLayoutContext/index.ts +12 -12
  165. package/src/index.tsx +4 -4
  166. package/src/interfaces/field.ts +1 -1
  167. package/src/interfaces/index.ts +7 -8
  168. package/src/interfaces/upload.ts +7 -7
  169. package/src/providers/notificationProvider/index.tsx +78 -78
  170. package/src/types/index.d.ts +2 -2
  171. package/src/types/sunflower.d.ts +68 -68
  172. package/tsconfig.json +26 -26
@@ -1,86 +1,85 @@
1
1
  import React from "react";
2
2
  import {
3
- AutoSaveIndicatorProps,
4
- useTranslate,
5
- AutoSaveIndicator as AutoSaveIndicatorCore,
3
+ AutoSaveIndicatorProps,
4
+ useTranslate,
5
+ AutoSaveIndicator as AutoSaveIndicatorCore,
6
6
  } from "@refinedev/core";
7
7
  import { Typography, theme } from "antd";
8
8
  import {
9
- EllipsisOutlined,
10
- SyncOutlined,
11
- CheckCircleOutlined,
12
- ExclamationCircleOutlined,
9
+ EllipsisOutlined,
10
+ SyncOutlined,
11
+ CheckCircleOutlined,
12
+ ExclamationCircleOutlined,
13
13
  } from "@ant-design/icons";
14
14
 
15
15
  export const AutoSaveIndicator: React.FC<AutoSaveIndicatorProps> = ({
16
- status,
17
- elements: {
18
- success = (
19
- <Message
20
- key="autoSave.success"
21
- defaultMessage="saved"
22
- icon={<CheckCircleOutlined />}
23
- />
24
- ),
25
- error = (
26
- <Message
27
- key="autoSave.error"
28
- defaultMessage="auto save failure"
29
- icon={<ExclamationCircleOutlined />}
30
- />
31
- ),
32
- loading = (
33
- <Message
34
- key="autoSave.loading"
35
- defaultMessage="saving..."
36
- icon={<SyncOutlined />}
37
- />
38
- ),
39
- idle = (
40
- <Message
41
- key="autoSave.idle"
42
- defaultMessage="waiting for changes"
43
- icon={<EllipsisOutlined />}
44
- />
45
- ),
46
- } = {},
16
+ status,
17
+ elements: {
18
+ success = (
19
+ <Message
20
+ key="autoSave.success"
21
+ defaultMessage="saved"
22
+ icon={<CheckCircleOutlined />}
23
+ />
24
+ ),
25
+ error = (
26
+ <Message
27
+ key="autoSave.error"
28
+ defaultMessage="auto save failure"
29
+ icon={<ExclamationCircleOutlined />}
30
+ />
31
+ ),
32
+ loading = (
33
+ <Message
34
+ key="autoSave.loading"
35
+ defaultMessage="saving..."
36
+ icon={<SyncOutlined />}
37
+ />
38
+ ),
39
+ idle = (
40
+ <Message
41
+ key="autoSave.idle"
42
+ defaultMessage="waiting for changes"
43
+ icon={<EllipsisOutlined />}
44
+ />
45
+ ),
46
+ } = {},
47
47
  }) => {
48
- return (
49
- <AutoSaveIndicatorCore
50
- status={status}
51
- elements={{
52
- success,
53
- error,
54
- loading,
55
- idle,
56
- }}
57
- />
58
- );
48
+ return (
49
+ <AutoSaveIndicatorCore
50
+ status={status}
51
+ elements={{
52
+ success,
53
+ error,
54
+ loading,
55
+ idle,
56
+ }}
57
+ />
58
+ );
59
59
  };
60
60
 
61
61
  const Message = ({
62
- key,
63
- defaultMessage,
64
- icon,
62
+ key,
63
+ defaultMessage,
64
+ icon,
65
65
  }: {
66
- key: string;
67
- defaultMessage: string;
68
- icon: React.ReactNode;
66
+ key: string;
67
+ defaultMessage: string;
68
+ icon: React.ReactNode;
69
69
  }) => {
70
- const translate = useTranslate();
71
- const { useToken } = theme;
72
- const { token } = useToken();
70
+ const translate = useTranslate();
71
+ const { token } = theme.useToken();
73
72
 
74
- return (
75
- <Typography.Text
76
- style={{
77
- marginRight: 5,
78
- color: token.colorTextTertiary,
79
- fontSize: ".8rem",
80
- }}
81
- >
82
- {translate(key, defaultMessage)}
83
- <span style={{ marginLeft: ".2rem" }}>{icon}</span>
84
- </Typography.Text>
85
- );
73
+ return (
74
+ <Typography.Text
75
+ style={{
76
+ marginRight: 5,
77
+ color: token.colorTextTertiary,
78
+ fontSize: ".8rem",
79
+ }}
80
+ >
81
+ {translate(key, defaultMessage)}
82
+ <span style={{ marginLeft: ".2rem" }}>{icon}</span>
83
+ </Typography.Text>
84
+ );
86
85
  };
@@ -1,87 +1,85 @@
1
1
  import React from "react";
2
2
  import {
3
- useBreadcrumb,
4
- useLink,
5
- useRefineContext,
6
- useRouterContext,
7
- useRouterType,
8
- useResource,
9
- matchResourceFromRoute,
3
+ useBreadcrumb,
4
+ useLink,
5
+ useRefineContext,
6
+ useRouterContext,
7
+ useRouterType,
8
+ useResource,
9
+ matchResourceFromRoute,
10
10
  } from "@refinedev/core";
11
11
  import { RefineBreadcrumbProps } from "@refinedev/ui-types";
12
12
 
13
13
  import {
14
- Breadcrumb as AntdBreadcrumb,
15
- BreadcrumbProps as AntdBreadcrumbProps,
14
+ Breadcrumb as AntdBreadcrumb,
15
+ BreadcrumbProps as AntdBreadcrumbProps,
16
16
  } from "antd";
17
17
  import { HomeOutlined } from "@ant-design/icons";
18
18
 
19
19
  export type BreadcrumbProps = RefineBreadcrumbProps<AntdBreadcrumbProps>;
20
20
 
21
21
  export const Breadcrumb: React.FC<BreadcrumbProps> = ({
22
- breadcrumbProps,
23
- showHome = true,
24
- hideIcons = false,
25
- meta,
22
+ breadcrumbProps,
23
+ showHome = true,
24
+ hideIcons = false,
25
+ meta,
26
26
  }) => {
27
- const routerType = useRouterType();
28
- const { breadcrumbs } = useBreadcrumb({
29
- meta,
30
- });
31
- const Link = useLink();
32
- const { Link: LegacyLink } = useRouterContext();
33
- const { hasDashboard } = useRefineContext();
27
+ const routerType = useRouterType();
28
+ const { breadcrumbs } = useBreadcrumb({
29
+ meta,
30
+ });
31
+ const Link = useLink();
32
+ const { Link: LegacyLink } = useRouterContext();
33
+ const { hasDashboard } = useRefineContext();
34
34
 
35
- const { resources } = useResource();
35
+ const { resources } = useResource();
36
36
 
37
- const rootRouteResource = matchResourceFromRoute("/", resources);
37
+ const rootRouteResource = matchResourceFromRoute("/", resources);
38
38
 
39
- const ActiveLink = routerType === "legacy" ? LegacyLink : Link;
39
+ const ActiveLink = routerType === "legacy" ? LegacyLink : Link;
40
40
 
41
- if (breadcrumbs.length === 1) {
42
- return null;
43
- }
41
+ if (breadcrumbs.length === 1) {
42
+ return null;
43
+ }
44
44
 
45
- const breadCrumbItems = breadcrumbs.map(({ label, icon, href }) => ({
46
- key: `breadcrumb-item-${label}`,
47
- title: (
48
- <div
49
- style={{
50
- display: "flex",
51
- alignItems: "center",
52
- justifyContent: "center",
53
- gap: 4,
54
- }}
55
- >
56
- {!hideIcons && icon}
57
- {href ? (
58
- <ActiveLink to={href}>{label}</ActiveLink>
59
- ) : (
60
- <span>{label}</span>
61
- )}
62
- </div>
63
- ),
64
- }));
45
+ const breadCrumbItems = breadcrumbs.map(({ label, icon, href }) => ({
46
+ key: `breadcrumb-item-${label}`,
47
+ title: (
48
+ <div
49
+ style={{
50
+ display: "flex",
51
+ alignItems: "center",
52
+ justifyContent: "center",
53
+ gap: 4,
54
+ }}
55
+ >
56
+ {!hideIcons && icon}
57
+ {href ? (
58
+ <ActiveLink to={href}>{label}</ActiveLink>
59
+ ) : (
60
+ <span>{label}</span>
61
+ )}
62
+ </div>
63
+ ),
64
+ }));
65
65
 
66
- const getBreadcrumbItems = () => {
67
- if (showHome && (hasDashboard || rootRouteResource.found)) {
68
- return [
69
- {
70
- key: "breadcrumb-item-home",
71
- title: (
72
- <ActiveLink to="/">
73
- {rootRouteResource?.resource?.meta?.icon ?? (
74
- <HomeOutlined />
75
- )}
76
- </ActiveLink>
77
- ),
78
- },
79
- ...breadCrumbItems,
80
- ];
81
- }
66
+ const getBreadcrumbItems = () => {
67
+ if (showHome && (hasDashboard || rootRouteResource.found)) {
68
+ return [
69
+ {
70
+ key: "breadcrumb-item-home",
71
+ title: (
72
+ <ActiveLink to="/">
73
+ {rootRouteResource?.resource?.meta?.icon ?? <HomeOutlined />}
74
+ </ActiveLink>
75
+ ),
76
+ },
77
+ ...breadCrumbItems,
78
+ ];
79
+ }
82
80
 
83
- return breadCrumbItems;
84
- };
81
+ return breadCrumbItems;
82
+ };
85
83
 
86
- return <AntdBreadcrumb items={getBreadcrumbItems()} {...breadcrumbProps} />;
84
+ return <AntdBreadcrumb items={getBreadcrumbItems()} {...breadcrumbProps} />;
87
85
  };
@@ -2,18 +2,18 @@ import React, { useContext } from "react";
2
2
  import { Button } from "antd";
3
3
  import { PlusSquareOutlined } from "@ant-design/icons";
4
4
  import {
5
- useCan,
6
- useNavigation,
7
- useTranslate,
8
- useResource,
9
- useRouterContext,
10
- useRouterType,
11
- useLink,
12
- AccessControlContext,
5
+ useCan,
6
+ useNavigation,
7
+ useTranslate,
8
+ useResource,
9
+ useRouterContext,
10
+ useRouterType,
11
+ useLink,
12
+ AccessControlContext,
13
13
  } from "@refinedev/core";
14
14
  import {
15
- RefineButtonTestIds,
16
- RefineButtonClassNames,
15
+ RefineButtonTestIds,
16
+ RefineButtonClassNames,
17
17
  } from "@refinedev/ui-types";
18
18
 
19
19
  import { CloneButtonProps } from "../types";
@@ -26,92 +26,92 @@ import { CloneButtonProps } from "../types";
26
26
  * @see {@link https://refine.dev/docs/api-reference/antd/components/buttons/clone-button} for more details.
27
27
  */
28
28
  export const CloneButton: React.FC<CloneButtonProps> = ({
29
- resourceNameOrRouteName: propResourceNameOrRouteName,
30
- resource: resourceNameFromProps,
31
- recordItemId,
32
- hideText = false,
33
- accessControl,
34
- meta,
35
- children,
36
- onClick,
37
- ...rest
29
+ resourceNameOrRouteName: propResourceNameOrRouteName,
30
+ resource: resourceNameFromProps,
31
+ recordItemId,
32
+ hideText = false,
33
+ accessControl,
34
+ meta,
35
+ children,
36
+ onClick,
37
+ ...rest
38
38
  }) => {
39
- const accessControlContext = useContext(AccessControlContext);
39
+ const accessControlContext = useContext(AccessControlContext);
40
40
 
41
- const accessControlEnabled =
42
- accessControl?.enabled ??
43
- accessControlContext.options.buttons.enableAccessControl;
41
+ const accessControlEnabled =
42
+ accessControl?.enabled ??
43
+ accessControlContext.options.buttons.enableAccessControl;
44
44
 
45
- const hideIfUnauthorized =
46
- accessControl?.hideIfUnauthorized ??
47
- accessControlContext.options.buttons.hideIfUnauthorized;
45
+ const hideIfUnauthorized =
46
+ accessControl?.hideIfUnauthorized ??
47
+ accessControlContext.options.buttons.hideIfUnauthorized;
48
48
 
49
- const { cloneUrl: generateCloneUrl } = useNavigation();
50
- const routerType = useRouterType();
51
- const Link = useLink();
52
- const { Link: LegacyLink } = useRouterContext();
49
+ const { cloneUrl: generateCloneUrl } = useNavigation();
50
+ const routerType = useRouterType();
51
+ const Link = useLink();
52
+ const { Link: LegacyLink } = useRouterContext();
53
53
 
54
- const ActiveLink = routerType === "legacy" ? LegacyLink : Link;
54
+ const ActiveLink = routerType === "legacy" ? LegacyLink : Link;
55
55
 
56
- const translate = useTranslate();
56
+ const translate = useTranslate();
57
57
 
58
- const { id, resource } = useResource(
59
- resourceNameFromProps ?? propResourceNameOrRouteName,
60
- );
58
+ const { id, resource } = useResource(
59
+ resourceNameFromProps ?? propResourceNameOrRouteName,
60
+ );
61
+
62
+ const { data } = useCan({
63
+ resource: resource?.name,
64
+ action: "create",
65
+ params: { id: recordItemId ?? id, resource },
66
+ queryOptions: {
67
+ enabled: accessControlEnabled,
68
+ },
69
+ });
61
70
 
62
- const { data } = useCan({
63
- resource: resource?.name,
64
- action: "create",
65
- params: { id: recordItemId ?? id, resource },
66
- queryOptions: {
67
- enabled: accessControlEnabled,
68
- },
69
- });
71
+ const createButtonDisabledTitle = () => {
72
+ if (data?.can) return "";
73
+ if (data?.reason) return data.reason;
70
74
 
71
- const createButtonDisabledTitle = () => {
72
- if (data?.can) return "";
73
- else if (data?.reason) return data.reason;
74
- else
75
- return translate(
76
- "buttons.notAccessTitle",
77
- "You don't have permission to access",
78
- );
79
- };
75
+ return translate(
76
+ "buttons.notAccessTitle",
77
+ "You don't have permission to access",
78
+ );
79
+ };
80
80
 
81
- const cloneUrl =
82
- resource && (recordItemId || id)
83
- ? generateCloneUrl(resource, recordItemId! ?? id!, meta)
84
- : "";
81
+ const cloneUrl =
82
+ resource && (recordItemId || id)
83
+ ? generateCloneUrl(resource, recordItemId! ?? id!, meta)
84
+ : "";
85
85
 
86
- if (accessControlEnabled && hideIfUnauthorized && !data?.can) {
87
- return null;
88
- }
86
+ if (accessControlEnabled && hideIfUnauthorized && !data?.can) {
87
+ return null;
88
+ }
89
89
 
90
- return (
91
- <ActiveLink
92
- to={cloneUrl}
93
- replace={false}
94
- onClick={(e: React.PointerEvent<HTMLButtonElement>) => {
95
- if (data?.can === false) {
96
- e.preventDefault();
97
- return;
98
- }
99
- if (onClick) {
100
- e.preventDefault();
101
- onClick(e);
102
- }
103
- }}
104
- >
105
- <Button
106
- icon={<PlusSquareOutlined />}
107
- disabled={data?.can === false}
108
- title={createButtonDisabledTitle()}
109
- data-testid={RefineButtonTestIds.CloneButton}
110
- className={RefineButtonClassNames.CloneButton}
111
- {...rest}
112
- >
113
- {!hideText && (children ?? translate("buttons.clone", "Clone"))}
114
- </Button>
115
- </ActiveLink>
116
- );
90
+ return (
91
+ <ActiveLink
92
+ to={cloneUrl}
93
+ replace={false}
94
+ onClick={(e: React.PointerEvent<HTMLButtonElement>) => {
95
+ if (data?.can === false) {
96
+ e.preventDefault();
97
+ return;
98
+ }
99
+ if (onClick) {
100
+ e.preventDefault();
101
+ onClick(e);
102
+ }
103
+ }}
104
+ >
105
+ <Button
106
+ icon={<PlusSquareOutlined />}
107
+ disabled={data?.can === false}
108
+ title={createButtonDisabledTitle()}
109
+ data-testid={RefineButtonTestIds.CloneButton}
110
+ className={RefineButtonClassNames.CloneButton}
111
+ {...rest}
112
+ >
113
+ {!hideText && (children ?? translate("buttons.clone", "Clone"))}
114
+ </Button>
115
+ </ActiveLink>
116
+ );
117
117
  };