@refinedev/antd 5.37.4 → 5.37.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/CHANGELOG.md +1760 -1778
  2. package/dist/components/autoSaveIndicator/index.d.ts.map +1 -1
  3. package/dist/components/breadcrumb/index.d.ts.map +1 -1
  4. package/dist/components/buttons/create/index.d.ts.map +1 -1
  5. package/dist/components/buttons/delete/index.d.ts.map +1 -1
  6. package/dist/components/buttons/import/index.d.ts.map +1 -1
  7. package/dist/components/buttons/types.d.ts.map +1 -1
  8. package/dist/components/crud/edit/index.d.ts.map +1 -1
  9. package/dist/components/crud/list/index.d.ts.map +1 -1
  10. package/dist/components/crud/show/index.d.ts.map +1 -1
  11. package/dist/components/crud/types.d.ts.map +1 -1
  12. package/dist/components/fields/types.d.ts.map +1 -1
  13. package/dist/components/layout/sider/index.d.ts.map +1 -1
  14. package/dist/components/layout/title/index.d.ts.map +1 -1
  15. package/dist/components/layout/types.d.ts.map +1 -1
  16. package/dist/components/pageHeader/index.d.ts.map +1 -1
  17. package/dist/components/pages/auth/components/forgotPassword/index.d.ts.map +1 -1
  18. package/dist/components/pages/auth/components/login/index.d.ts.map +1 -1
  19. package/dist/components/pages/auth/components/register/index.d.ts.map +1 -1
  20. package/dist/components/pages/auth/components/updatePassword/index.d.ts.map +1 -1
  21. package/dist/components/pages/auth/index.d.ts.map +1 -1
  22. package/dist/components/pages/login/index.d.ts.map +1 -1
  23. package/dist/components/pages/ready/index.d.ts.map +1 -1
  24. package/dist/components/table/components/filterDropdown/index.d.ts.map +1 -1
  25. package/dist/components/themedLayout/header/index.d.ts.map +1 -1
  26. package/dist/components/themedLayout/types.d.ts.map +1 -1
  27. package/dist/components/themedLayoutV2/header/index.d.ts.map +1 -1
  28. package/dist/components/themedLayoutV2/index.d.ts.map +1 -1
  29. package/dist/components/themedLayoutV2/sider/index.d.ts.map +1 -1
  30. package/dist/components/themedLayoutV2/types.d.ts.map +1 -1
  31. package/dist/components/undoableNotification/index.d.ts.map +1 -1
  32. package/dist/contexts/index.d.ts.map +1 -1
  33. package/dist/contexts/themedLayoutContext/IThemedLayoutContext.d.ts.map +1 -1
  34. package/dist/contexts/themedLayoutContext/index.d.ts.map +1 -1
  35. package/dist/definitions/table/index.d.ts.map +1 -1
  36. package/dist/definitions/themes/index.d.ts.map +1 -1
  37. package/dist/esm/index.js +1 -1
  38. package/dist/esm/index.js.map +1 -1
  39. package/dist/hooks/fields/useCheckboxGroup/index.d.ts.map +1 -1
  40. package/dist/hooks/fields/useRadioGroup/index.d.ts.map +1 -1
  41. package/dist/hooks/fields/useSelect/index.d.ts.map +1 -1
  42. package/dist/hooks/form/index.d.ts.map +1 -1
  43. package/dist/hooks/form/useDrawerForm/index.d.ts.map +1 -1
  44. package/dist/hooks/form/useDrawerForm/useDrawerForm.d.ts.map +1 -1
  45. package/dist/hooks/form/useForm.d.ts.map +1 -1
  46. package/dist/hooks/form/useModalForm/index.d.ts.map +1 -1
  47. package/dist/hooks/form/useModalForm/useModalForm.d.ts.map +1 -1
  48. package/dist/hooks/form/useStepsForm/index.d.ts.map +1 -1
  49. package/dist/hooks/form/useStepsForm/useStepsForm.d.ts.map +1 -1
  50. package/dist/hooks/import/index.d.ts.map +1 -1
  51. package/dist/hooks/list/useSimpleList/useSimpleList.d.ts.map +1 -1
  52. package/dist/hooks/modal/useModal/index.d.ts.map +1 -1
  53. package/dist/hooks/table/useEditableTable/useEditableTable.d.ts.map +1 -1
  54. package/dist/hooks/table/useTable/paginationLink.d.ts.map +1 -1
  55. package/dist/hooks/table/useTable/useTable.d.ts.map +1 -1
  56. package/dist/hooks/useFileUploadState/index.d.ts.map +1 -1
  57. package/dist/hooks/useSiderVisible/index.d.ts.map +1 -1
  58. package/dist/iife/index.js +10 -10
  59. package/dist/iife/index.js.map +1 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1 -1
  62. package/dist/index.js.map +1 -1
  63. package/dist/interfaces/field.d.ts.map +1 -1
  64. package/dist/interfaces/index.d.ts.map +1 -1
  65. package/dist/interfaces/upload.d.ts.map +1 -1
  66. package/package.json +32 -32
  67. package/refine.config.js +497 -524
  68. package/src/components/autoSaveIndicator/index.tsx +69 -69
  69. package/src/components/breadcrumb/index.tsx +63 -65
  70. package/src/components/buttons/clone/index.tsx +86 -86
  71. package/src/components/buttons/create/index.tsx +85 -86
  72. package/src/components/buttons/delete/index.tsx +114 -119
  73. package/src/components/buttons/edit/index.tsx +86 -86
  74. package/src/components/buttons/export/index.tsx +17 -17
  75. package/src/components/buttons/import/index.tsx +19 -20
  76. package/src/components/buttons/list/index.tsx +105 -105
  77. package/src/components/buttons/refresh/index.tsx +50 -50
  78. package/src/components/buttons/save/index.tsx +17 -17
  79. package/src/components/buttons/show/index.tsx +86 -86
  80. package/src/components/buttons/types.ts +20 -20
  81. package/src/components/crud/create/index.tsx +120 -120
  82. package/src/components/crud/edit/index.tsx +205 -207
  83. package/src/components/crud/list/index.tsx +88 -90
  84. package/src/components/crud/show/index.tsx +175 -185
  85. package/src/components/crud/types.ts +41 -56
  86. package/src/components/fields/boolean/index.tsx +11 -11
  87. package/src/components/fields/date/index.tsx +13 -13
  88. package/src/components/fields/email/index.tsx +5 -5
  89. package/src/components/fields/file/index.tsx +8 -8
  90. package/src/components/fields/image/index.tsx +4 -4
  91. package/src/components/fields/markdown/index.tsx +9 -9
  92. package/src/components/fields/number/index.tsx +17 -17
  93. package/src/components/fields/tag/index.tsx +1 -1
  94. package/src/components/fields/text/index.tsx +1 -1
  95. package/src/components/fields/types.ts +18 -18
  96. package/src/components/fields/url/index.tsx +8 -8
  97. package/src/components/layout/header/index.tsx +25 -25
  98. package/src/components/layout/index.tsx +30 -30
  99. package/src/components/layout/sider/index.tsx +238 -246
  100. package/src/components/layout/sider/styles.ts +5 -5
  101. package/src/components/layout/title/index.tsx +40 -40
  102. package/src/components/layout/types.ts +6 -6
  103. package/src/components/pageHeader/index.tsx +44 -44
  104. package/src/components/pages/auth/components/forgotPassword/index.tsx +177 -180
  105. package/src/components/pages/auth/components/login/index.tsx +258 -271
  106. package/src/components/pages/auth/components/register/index.tsx +247 -263
  107. package/src/components/pages/auth/components/styles.ts +16 -16
  108. package/src/components/pages/auth/components/updatePassword/index.tsx +160 -174
  109. package/src/components/pages/auth/index.tsx +23 -23
  110. package/src/components/pages/error/index.tsx +57 -57
  111. package/src/components/pages/login/index.tsx +120 -146
  112. package/src/components/pages/login/styles.ts +12 -12
  113. package/src/components/pages/ready/index.tsx +72 -80
  114. package/src/components/pages/welcome/index.tsx +1 -1
  115. package/src/components/table/components/filterDropdown/index.tsx +89 -92
  116. package/src/components/themedLayout/header/index.tsx +28 -32
  117. package/src/components/themedLayout/index.tsx +30 -30
  118. package/src/components/themedLayout/sider/index.tsx +279 -279
  119. package/src/components/themedLayout/sider/styles.ts +5 -5
  120. package/src/components/themedLayout/title/index.tsx +66 -66
  121. package/src/components/themedLayout/types.ts +8 -8
  122. package/src/components/themedLayoutV2/header/index.tsx +37 -41
  123. package/src/components/themedLayoutV2/index.tsx +34 -36
  124. package/src/components/themedLayoutV2/sider/index.tsx +309 -313
  125. package/src/components/themedLayoutV2/sider/styles.ts +5 -5
  126. package/src/components/themedLayoutV2/title/index.tsx +66 -66
  127. package/src/components/themedLayoutV2/types.ts +9 -9
  128. package/src/components/undoableNotification/index.tsx +31 -31
  129. package/src/contexts/index.ts +2 -2
  130. package/src/contexts/themedLayoutContext/IThemedLayoutContext.ts +4 -4
  131. package/src/contexts/themedLayoutContext/index.tsx +22 -22
  132. package/src/definitions/table/index.ts +81 -82
  133. package/src/definitions/themes/index.ts +35 -35
  134. package/src/definitions/upload/index.ts +17 -17
  135. package/src/hooks/fields/useCheckboxGroup/index.ts +64 -64
  136. package/src/hooks/fields/useRadioGroup/index.ts +60 -63
  137. package/src/hooks/fields/useSelect/index.ts +30 -30
  138. package/src/hooks/form/index.ts +10 -10
  139. package/src/hooks/form/useDrawerForm/index.ts +4 -4
  140. package/src/hooks/form/useDrawerForm/useDrawerForm.ts +257 -261
  141. package/src/hooks/form/useForm.ts +256 -259
  142. package/src/hooks/form/useModalForm/index.ts +3 -3
  143. package/src/hooks/form/useModalForm/useModalForm.ts +289 -295
  144. package/src/hooks/form/useStepsForm/index.ts +3 -3
  145. package/src/hooks/form/useStepsForm/useStepsForm.ts +96 -96
  146. package/src/hooks/import/index.tsx +104 -106
  147. package/src/hooks/list/useSimpleList/useSimpleList.ts +179 -185
  148. package/src/hooks/modal/useModal/index.tsx +24 -24
  149. package/src/hooks/table/useEditableTable/useEditableTable.ts +85 -85
  150. package/src/hooks/table/useTable/paginationLink.tsx +17 -17
  151. package/src/hooks/table/useTable/useTable.ts +199 -205
  152. package/src/hooks/useFileUploadState/index.ts +20 -20
  153. package/src/hooks/useSiderVisible/index.ts +16 -16
  154. package/src/hooks/useThemedLayoutContext/index.ts +12 -12
  155. package/src/index.tsx +4 -4
  156. package/src/interfaces/field.ts +1 -1
  157. package/src/interfaces/index.ts +7 -8
  158. package/src/interfaces/upload.ts +7 -7
  159. package/src/providers/notificationProvider/index.tsx +78 -78
  160. package/src/types/index.d.ts +2 -2
  161. package/src/types/sunflower.d.ts +68 -68
  162. package/tsconfig.json +26 -26
@@ -2,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
- useNavigation,
6
- useTranslate,
7
- useCan,
8
- useResource,
9
- useRouterContext,
10
- useRouterType,
11
- useLink,
12
- AccessControlContext,
5
+ useNavigation,
6
+ useTranslate,
7
+ useCan,
8
+ useResource,
9
+ useRouterContext,
10
+ useRouterType,
11
+ useLink,
12
+ AccessControlContext,
13
13
  } from "@refinedev/core";
14
14
  import {
15
- RefineButtonClassNames,
16
- RefineButtonTestIds,
15
+ RefineButtonClassNames,
16
+ RefineButtonTestIds,
17
17
  } from "@refinedev/ui-types";
18
18
 
19
19
  import { CreateButtonProps } from "../types";
@@ -26,92 +26,91 @@ import { CreateButtonProps } from "../types";
26
26
  * @see {@link https://refine.dev/docs/api-reference/antd/components/buttons/create-button} for more details.
27
27
  */
28
28
  export const CreateButton: React.FC<CreateButtonProps> = ({
29
- resource: resourceNameFromProps,
30
- resourceNameOrRouteName: propResourceNameOrRouteName,
31
- hideText = false,
32
- accessControl,
33
- meta,
34
- children,
35
- onClick,
36
- ...rest
29
+ resource: resourceNameFromProps,
30
+ resourceNameOrRouteName: propResourceNameOrRouteName,
31
+ hideText = false,
32
+ accessControl,
33
+ meta,
34
+ children,
35
+ onClick,
36
+ ...rest
37
37
  }) => {
38
- const accessControlContext = useContext(AccessControlContext);
38
+ const accessControlContext = useContext(AccessControlContext);
39
39
 
40
- const accessControlEnabled =
41
- accessControl?.enabled ??
42
- accessControlContext.options.buttons.enableAccessControl;
40
+ const accessControlEnabled =
41
+ accessControl?.enabled ??
42
+ accessControlContext.options.buttons.enableAccessControl;
43
43
 
44
- const hideIfUnauthorized =
45
- accessControl?.hideIfUnauthorized ??
46
- accessControlContext.options.buttons.hideIfUnauthorized;
44
+ const hideIfUnauthorized =
45
+ accessControl?.hideIfUnauthorized ??
46
+ accessControlContext.options.buttons.hideIfUnauthorized;
47
47
 
48
- const translate = useTranslate();
49
- const routerType = useRouterType();
50
- const Link = useLink();
51
- const { Link: LegacyLink } = useRouterContext();
48
+ const translate = useTranslate();
49
+ const routerType = useRouterType();
50
+ const Link = useLink();
51
+ const { Link: LegacyLink } = useRouterContext();
52
52
 
53
- const ActiveLink = routerType === "legacy" ? LegacyLink : Link;
53
+ const ActiveLink = routerType === "legacy" ? LegacyLink : Link;
54
54
 
55
- const { createUrl: generateCreateUrl } = useNavigation();
55
+ const { createUrl: generateCreateUrl } = useNavigation();
56
56
 
57
- const { resource } = useResource(
58
- resourceNameFromProps ?? propResourceNameOrRouteName,
59
- );
57
+ const { resource } = useResource(
58
+ resourceNameFromProps ?? propResourceNameOrRouteName,
59
+ );
60
+
61
+ const { data } = useCan({
62
+ resource: resource?.name,
63
+ action: "create",
64
+ queryOptions: {
65
+ enabled: accessControlEnabled,
66
+ },
67
+ params: {
68
+ resource,
69
+ },
70
+ });
60
71
 
61
- const { data } = useCan({
62
- resource: resource?.name,
63
- action: "create",
64
- queryOptions: {
65
- enabled: accessControlEnabled,
66
- },
67
- params: {
68
- resource,
69
- },
70
- });
72
+ const createButtonDisabledTitle = () => {
73
+ if (data?.can) return "";
74
+ if (data?.reason) return data.reason;
71
75
 
72
- const createButtonDisabledTitle = () => {
73
- if (data?.can) return "";
74
- else if (data?.reason) return data.reason;
75
- else
76
- return translate(
77
- "buttons.notAccessTitle",
78
- "You don't have permission to access",
79
- );
80
- };
76
+ return translate(
77
+ "buttons.notAccessTitle",
78
+ "You don't have permission to access",
79
+ );
80
+ };
81
81
 
82
- const createUrl = resource ? generateCreateUrl(resource, meta) : "";
82
+ const createUrl = resource ? generateCreateUrl(resource, meta) : "";
83
83
 
84
- if (accessControlEnabled && hideIfUnauthorized && !data?.can) {
85
- return null;
86
- }
84
+ if (accessControlEnabled && hideIfUnauthorized && !data?.can) {
85
+ return null;
86
+ }
87
87
 
88
- return (
89
- <ActiveLink
90
- to={createUrl}
91
- replace={false}
92
- onClick={(e: React.PointerEvent<HTMLButtonElement>) => {
93
- if (data?.can === false) {
94
- e.preventDefault();
95
- return;
96
- }
97
- if (onClick) {
98
- e.preventDefault();
99
- onClick(e);
100
- }
101
- }}
102
- >
103
- <Button
104
- icon={<PlusSquareOutlined />}
105
- disabled={data?.can === false}
106
- title={createButtonDisabledTitle()}
107
- data-testid={RefineButtonTestIds.CreateButton}
108
- className={RefineButtonClassNames.CreateButton}
109
- type="primary"
110
- {...rest}
111
- >
112
- {!hideText &&
113
- (children ?? translate("buttons.create", "Create"))}
114
- </Button>
115
- </ActiveLink>
116
- );
88
+ return (
89
+ <ActiveLink
90
+ to={createUrl}
91
+ replace={false}
92
+ onClick={(e: React.PointerEvent<HTMLButtonElement>) => {
93
+ if (data?.can === false) {
94
+ e.preventDefault();
95
+ return;
96
+ }
97
+ if (onClick) {
98
+ e.preventDefault();
99
+ onClick(e);
100
+ }
101
+ }}
102
+ >
103
+ <Button
104
+ icon={<PlusSquareOutlined />}
105
+ disabled={data?.can === false}
106
+ title={createButtonDisabledTitle()}
107
+ data-testid={RefineButtonTestIds.CreateButton}
108
+ className={RefineButtonClassNames.CreateButton}
109
+ type="primary"
110
+ {...rest}
111
+ >
112
+ {!hideText && (children ?? translate("buttons.create", "Create"))}
113
+ </Button>
114
+ </ActiveLink>
115
+ );
117
116
  };
@@ -2,18 +2,18 @@ import React, { useContext } from "react";
2
2
  import { Button, Popconfirm } from "antd";
3
3
  import { DeleteOutlined } from "@ant-design/icons";
4
4
  import {
5
- useDelete,
6
- useTranslate,
7
- useMutationMode,
8
- useCan,
9
- useResource,
10
- pickNotDeprecated,
11
- useWarnAboutChange,
12
- AccessControlContext,
5
+ useDelete,
6
+ useTranslate,
7
+ useMutationMode,
8
+ useCan,
9
+ useResource,
10
+ pickNotDeprecated,
11
+ useWarnAboutChange,
12
+ AccessControlContext,
13
13
  } from "@refinedev/core";
14
14
  import {
15
- RefineButtonClassNames,
16
- RefineButtonTestIds,
15
+ RefineButtonClassNames,
16
+ RefineButtonTestIds,
17
17
  } from "@refinedev/ui-types";
18
18
 
19
19
  import { DeleteButtonProps } from "../types";
@@ -25,126 +25,121 @@ import { DeleteButtonProps } from "../types";
25
25
  * @see {@link https://refine.dev/docs/api-reference/antd/components/buttons/delete-button} for more details.
26
26
  */
27
27
  export const DeleteButton: React.FC<DeleteButtonProps> = ({
28
- resource: resourceNameFromProps,
29
- resourceNameOrRouteName: propResourceNameOrRouteName,
30
- recordItemId,
31
- onSuccess,
32
- mutationMode: mutationModeProp,
33
- children,
34
- successNotification,
35
- errorNotification,
36
- hideText = false,
37
- accessControl,
38
- metaData,
39
- meta,
40
- dataProviderName,
41
- confirmTitle,
42
- confirmOkText,
43
- confirmCancelText,
44
- invalidates,
45
- ...rest
28
+ resource: resourceNameFromProps,
29
+ resourceNameOrRouteName: propResourceNameOrRouteName,
30
+ recordItemId,
31
+ onSuccess,
32
+ mutationMode: mutationModeProp,
33
+ children,
34
+ successNotification,
35
+ errorNotification,
36
+ hideText = false,
37
+ accessControl,
38
+ metaData,
39
+ meta,
40
+ dataProviderName,
41
+ confirmTitle,
42
+ confirmOkText,
43
+ confirmCancelText,
44
+ invalidates,
45
+ ...rest
46
46
  }) => {
47
- const accessControlContext = useContext(AccessControlContext);
47
+ const accessControlContext = useContext(AccessControlContext);
48
48
 
49
- const accessControlEnabled =
50
- accessControl?.enabled ??
51
- accessControlContext.options.buttons.enableAccessControl;
49
+ const accessControlEnabled =
50
+ accessControl?.enabled ??
51
+ accessControlContext.options.buttons.enableAccessControl;
52
52
 
53
- const hideIfUnauthorized =
54
- accessControl?.hideIfUnauthorized ??
55
- accessControlContext.options.buttons.hideIfUnauthorized;
53
+ const hideIfUnauthorized =
54
+ accessControl?.hideIfUnauthorized ??
55
+ accessControlContext.options.buttons.hideIfUnauthorized;
56
56
 
57
- const translate = useTranslate();
57
+ const translate = useTranslate();
58
58
 
59
- const { id, resource, identifier } = useResource(
60
- resourceNameFromProps ?? propResourceNameOrRouteName,
61
- );
59
+ const { id, resource, identifier } = useResource(
60
+ resourceNameFromProps ?? propResourceNameOrRouteName,
61
+ );
62
+
63
+ const { mutationMode: mutationModeContext } = useMutationMode();
62
64
 
63
- const { mutationMode: mutationModeContext } = useMutationMode();
65
+ const mutationMode = mutationModeProp ?? mutationModeContext;
64
66
 
65
- const mutationMode = mutationModeProp ?? mutationModeContext;
67
+ const { mutate, isLoading, variables } = useDelete();
66
68
 
67
- const { mutate, isLoading, variables } = useDelete();
69
+ const { data } = useCan({
70
+ resource: resource?.name,
71
+ action: "delete",
72
+ params: { id: recordItemId ?? id, resource },
73
+ queryOptions: {
74
+ enabled: accessControlEnabled,
75
+ },
76
+ });
68
77
 
69
- const { data } = useCan({
70
- resource: resource?.name,
71
- action: "delete",
72
- params: { id: recordItemId ?? id, resource },
73
- queryOptions: {
74
- enabled: accessControlEnabled,
75
- },
76
- });
78
+ const disabledTitle = () => {
79
+ if (data?.can) return "";
80
+ if (data?.reason) return data.reason;
77
81
 
78
- const disabledTitle = () => {
79
- if (data?.can) return "";
80
- else if (data?.reason) return data.reason;
81
- else
82
- return translate(
83
- "buttons.notAccessTitle",
84
- "You don't have permission to access",
85
- );
86
- };
82
+ return translate(
83
+ "buttons.notAccessTitle",
84
+ "You don't have permission to access",
85
+ );
86
+ };
87
87
 
88
- const { setWarnWhen } = useWarnAboutChange();
88
+ const { setWarnWhen } = useWarnAboutChange();
89
89
 
90
- if (accessControlEnabled && hideIfUnauthorized && !data?.can) {
91
- return null;
92
- }
90
+ if (accessControlEnabled && hideIfUnauthorized && !data?.can) {
91
+ return null;
92
+ }
93
93
 
94
- return (
95
- <Popconfirm
96
- key="delete"
97
- okText={confirmOkText ?? translate("buttons.delete", "Delete")}
98
- cancelText={
99
- confirmCancelText ?? translate("buttons.cancel", "Cancel")
100
- }
101
- okType="danger"
102
- title={
103
- confirmTitle ?? translate("buttons.confirm", "Are you sure?")
104
- }
105
- okButtonProps={{ disabled: isLoading }}
106
- onConfirm={(): void => {
107
- if ((recordItemId ?? id) && identifier) {
108
- setWarnWhen(false);
109
- mutate(
110
- {
111
- id: recordItemId ?? id ?? "",
112
- resource: identifier,
113
- mutationMode,
114
- successNotification,
115
- errorNotification,
116
- meta: pickNotDeprecated(meta, metaData),
117
- metaData: pickNotDeprecated(meta, metaData),
118
- dataProviderName,
119
- invalidates,
120
- },
121
- {
122
- onSuccess: (value) => {
123
- onSuccess && onSuccess(value);
124
- },
125
- },
126
- );
127
- }
128
- }}
129
- disabled={
130
- typeof rest?.disabled !== "undefined"
131
- ? rest.disabled
132
- : data?.can === false
133
- }
134
- >
135
- <Button
136
- danger
137
- loading={(recordItemId ?? id) === variables?.id && isLoading}
138
- icon={<DeleteOutlined />}
139
- title={disabledTitle()}
140
- disabled={data?.can === false}
141
- data-testid={RefineButtonTestIds.DeleteButton}
142
- className={RefineButtonClassNames.DeleteButton}
143
- {...rest}
144
- >
145
- {!hideText &&
146
- (children ?? translate("buttons.delete", "Delete"))}
147
- </Button>
148
- </Popconfirm>
149
- );
94
+ return (
95
+ <Popconfirm
96
+ key="delete"
97
+ okText={confirmOkText ?? translate("buttons.delete", "Delete")}
98
+ cancelText={confirmCancelText ?? translate("buttons.cancel", "Cancel")}
99
+ okType="danger"
100
+ title={confirmTitle ?? translate("buttons.confirm", "Are you sure?")}
101
+ okButtonProps={{ disabled: isLoading }}
102
+ onConfirm={(): void => {
103
+ if ((recordItemId ?? id) && identifier) {
104
+ setWarnWhen(false);
105
+ mutate(
106
+ {
107
+ id: recordItemId ?? id ?? "",
108
+ resource: identifier,
109
+ mutationMode,
110
+ successNotification,
111
+ errorNotification,
112
+ meta: pickNotDeprecated(meta, metaData),
113
+ metaData: pickNotDeprecated(meta, metaData),
114
+ dataProviderName,
115
+ invalidates,
116
+ },
117
+ {
118
+ onSuccess: (value) => {
119
+ onSuccess?.(value);
120
+ },
121
+ },
122
+ );
123
+ }
124
+ }}
125
+ disabled={
126
+ typeof rest?.disabled !== "undefined"
127
+ ? rest.disabled
128
+ : data?.can === false
129
+ }
130
+ >
131
+ <Button
132
+ danger
133
+ loading={(recordItemId ?? id) === variables?.id && isLoading}
134
+ icon={<DeleteOutlined />}
135
+ title={disabledTitle()}
136
+ disabled={data?.can === false}
137
+ data-testid={RefineButtonTestIds.DeleteButton}
138
+ className={RefineButtonClassNames.DeleteButton}
139
+ {...rest}
140
+ >
141
+ {!hideText && (children ?? translate("buttons.delete", "Delete"))}
142
+ </Button>
143
+ </Popconfirm>
144
+ );
150
145
  };
@@ -2,18 +2,18 @@ import React, { useContext } from "react";
2
2
  import { Button } from "antd";
3
3
  import { EditOutlined } 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
- RefineButtonClassNames,
16
- RefineButtonTestIds,
15
+ RefineButtonClassNames,
16
+ RefineButtonTestIds,
17
17
  } from "@refinedev/ui-types";
18
18
 
19
19
  import { EditButtonProps } from "../types";
@@ -26,93 +26,93 @@ import { EditButtonProps } from "../types";
26
26
  * @see {@link https://refine.dev/docs/api-reference/antd/components/buttons/edit-button} for more details.
27
27
  */
28
28
  export const EditButton: React.FC<EditButtonProps> = ({
29
- resource: resourceNameFromProps,
30
- resourceNameOrRouteName: propResourceNameOrRouteName,
31
- recordItemId,
32
- hideText = false,
33
- accessControl,
34
- meta,
35
- children,
36
- onClick,
37
- ...rest
29
+ resource: resourceNameFromProps,
30
+ resourceNameOrRouteName: propResourceNameOrRouteName,
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 translate = useTranslate();
49
+ const translate = useTranslate();
50
50
 
51
- const routerType = useRouterType();
52
- const Link = useLink();
53
- const { Link: LegacyLink } = useRouterContext();
51
+ const routerType = useRouterType();
52
+ const Link = useLink();
53
+ const { Link: LegacyLink } = useRouterContext();
54
54
 
55
- const ActiveLink = routerType === "legacy" ? LegacyLink : Link;
55
+ const ActiveLink = routerType === "legacy" ? LegacyLink : Link;
56
56
 
57
- const { editUrl: generateEditUrl } = useNavigation();
57
+ const { editUrl: generateEditUrl } = useNavigation();
58
58
 
59
- const { id, resource } = useResource(
60
- resourceNameFromProps ?? propResourceNameOrRouteName,
61
- );
59
+ const { id, resource } = useResource(
60
+ resourceNameFromProps ?? propResourceNameOrRouteName,
61
+ );
62
+
63
+ const { data } = useCan({
64
+ resource: resource?.name,
65
+ action: "edit",
66
+ params: { id: recordItemId ?? id, resource },
67
+ queryOptions: {
68
+ enabled: accessControlEnabled,
69
+ },
70
+ });
62
71
 
63
- const { data } = useCan({
64
- resource: resource?.name,
65
- action: "edit",
66
- params: { id: recordItemId ?? id, resource },
67
- queryOptions: {
68
- enabled: accessControlEnabled,
69
- },
70
- });
72
+ const createButtonDisabledTitle = () => {
73
+ if (data?.can) return "";
74
+ if (data?.reason) return data.reason;
71
75
 
72
- const createButtonDisabledTitle = () => {
73
- if (data?.can) return "";
74
- else if (data?.reason) return data.reason;
75
- else
76
- return translate(
77
- "buttons.notAccessTitle",
78
- "You don't have permission to access",
79
- );
80
- };
76
+ return translate(
77
+ "buttons.notAccessTitle",
78
+ "You don't have permission to access",
79
+ );
80
+ };
81
81
 
82
- const editUrl =
83
- resource && (recordItemId ?? id)
84
- ? generateEditUrl(resource, recordItemId! ?? id!, meta)
85
- : "";
82
+ const editUrl =
83
+ resource && (recordItemId ?? id)
84
+ ? generateEditUrl(resource, recordItemId! ?? id!, meta)
85
+ : "";
86
86
 
87
- if (accessControlEnabled && hideIfUnauthorized && !data?.can) {
88
- return null;
89
- }
87
+ if (accessControlEnabled && hideIfUnauthorized && !data?.can) {
88
+ return null;
89
+ }
90
90
 
91
- return (
92
- <ActiveLink
93
- to={editUrl}
94
- replace={false}
95
- onClick={(e: React.PointerEvent<HTMLButtonElement>) => {
96
- if (data?.can === false) {
97
- e.preventDefault();
98
- return;
99
- }
100
- if (onClick) {
101
- e.preventDefault();
102
- onClick(e);
103
- }
104
- }}
105
- >
106
- <Button
107
- icon={<EditOutlined />}
108
- disabled={data?.can === false}
109
- title={createButtonDisabledTitle()}
110
- data-testid={RefineButtonTestIds.EditButton}
111
- className={RefineButtonClassNames.EditButton}
112
- {...rest}
113
- >
114
- {!hideText && (children ?? translate("buttons.edit", "Edit"))}
115
- </Button>
116
- </ActiveLink>
117
- );
91
+ return (
92
+ <ActiveLink
93
+ to={editUrl}
94
+ replace={false}
95
+ onClick={(e: React.PointerEvent<HTMLButtonElement>) => {
96
+ if (data?.can === false) {
97
+ e.preventDefault();
98
+ return;
99
+ }
100
+ if (onClick) {
101
+ e.preventDefault();
102
+ onClick(e);
103
+ }
104
+ }}
105
+ >
106
+ <Button
107
+ icon={<EditOutlined />}
108
+ disabled={data?.can === false}
109
+ title={createButtonDisabledTitle()}
110
+ data-testid={RefineButtonTestIds.EditButton}
111
+ className={RefineButtonClassNames.EditButton}
112
+ {...rest}
113
+ >
114
+ {!hideText && (children ?? translate("buttons.edit", "Edit"))}
115
+ </Button>
116
+ </ActiveLink>
117
+ );
118
118
  };