@refinedev/antd 5.16.1 → 5.17.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 (45) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/dist/components/buttons/clone/index.d.ts.map +1 -1
  3. package/dist/components/buttons/create/index.d.ts.map +1 -1
  4. package/dist/components/buttons/delete/index.d.ts.map +1 -1
  5. package/dist/components/buttons/edit/index.d.ts.map +1 -1
  6. package/dist/components/buttons/export/index.d.ts.map +1 -1
  7. package/dist/components/buttons/import/index.d.ts.map +1 -1
  8. package/dist/components/buttons/list/index.d.ts.map +1 -1
  9. package/dist/components/buttons/refresh/index.d.ts.map +1 -1
  10. package/dist/components/buttons/save/index.d.ts.map +1 -1
  11. package/dist/components/buttons/show/index.d.ts.map +1 -1
  12. package/dist/components/crud/create/index.d.ts.map +1 -1
  13. package/dist/components/crud/edit/index.d.ts.map +1 -1
  14. package/dist/components/crud/list/index.d.ts.map +1 -1
  15. package/dist/components/crud/show/index.d.ts.map +1 -1
  16. package/dist/components/crud/types.d.ts +3 -3
  17. package/dist/components/crud/types.d.ts.map +1 -1
  18. package/dist/components/pageHeader/index.d.ts.map +1 -1
  19. package/dist/esm/index.js +1 -1
  20. package/dist/esm/index.js.map +1 -1
  21. package/dist/hooks/form/useDrawerForm/useDrawerForm.d.ts.map +1 -1
  22. package/dist/hooks/form/useModalForm/useModalForm.d.ts.map +1 -1
  23. package/dist/iife/index.js +6 -6
  24. package/dist/iife/index.js.map +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/package.json +3 -3
  28. package/src/components/buttons/clone/index.tsx +5 -1
  29. package/src/components/buttons/create/index.tsx +5 -1
  30. package/src/components/buttons/delete/index.tsx +5 -1
  31. package/src/components/buttons/edit/index.tsx +5 -1
  32. package/src/components/buttons/export/index.tsx +5 -1
  33. package/src/components/buttons/import/index.tsx +5 -1
  34. package/src/components/buttons/list/index.tsx +5 -1
  35. package/src/components/buttons/refresh/index.tsx +5 -1
  36. package/src/components/buttons/save/index.tsx +5 -1
  37. package/src/components/buttons/show/index.tsx +5 -1
  38. package/src/components/crud/create/index.tsx +15 -7
  39. package/src/components/crud/edit/index.tsx +63 -50
  40. package/src/components/crud/list/index.tsx +23 -12
  41. package/src/components/crud/show/index.tsx +61 -52
  42. package/src/components/crud/types.ts +14 -3
  43. package/src/components/pageHeader/index.tsx +7 -1
  44. package/src/hooks/form/useDrawerForm/useDrawerForm.ts +18 -10
  45. package/src/hooks/form/useModalForm/useModalForm.ts +8 -6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@refinedev/antd",
3
- "version": "5.16.1",
3
+ "version": "5.17.0",
4
4
  "description": "refine is a React-based framework for building internal tools, rapidly. It ships with Ant Design System, an enterprise-level UI toolkit.",
5
5
  "private": false,
6
6
  "main": "dist/index.js",
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "devDependencies": {
26
26
  "@refinedev/cli": "^2.5.3",
27
- "@refinedev/ui-tests": "^1.3.2",
27
+ "@refinedev/ui-tests": "^1.4.0",
28
28
  "@refinedev/core": "^4.14.3",
29
29
  "@esbuild-plugins/node-resolve": "^0.1.4",
30
30
  "@testing-library/jest-dom": "^5.16.4",
@@ -49,7 +49,7 @@
49
49
  "dependencies": {
50
50
  "@ant-design/icons": "^5.0.1",
51
51
  "@ant-design/pro-layout": "7.8.3",
52
- "@refinedev/ui-types": "^1.12.0",
52
+ "@refinedev/ui-types": "^1.15.0",
53
53
  "@tanstack/react-query": "^4.10.1",
54
54
  "antd": "^5.0.5",
55
55
  "dayjs": "^1.10.7",
@@ -10,7 +10,10 @@ import {
10
10
  useRouterType,
11
11
  useLink,
12
12
  } from "@refinedev/core";
13
- import { RefineButtonTestIds } from "@refinedev/ui-types";
13
+ import {
14
+ RefineButtonTestIds,
15
+ RefineButtonClassNames,
16
+ } from "@refinedev/ui-types";
14
17
 
15
18
  import { CloneButtonProps } from "../types";
16
19
 
@@ -95,6 +98,7 @@ export const CloneButton: React.FC<CloneButtonProps> = ({
95
98
  disabled={data?.can === false}
96
99
  title={createButtonDisabledTitle()}
97
100
  data-testid={RefineButtonTestIds.CloneButton}
101
+ className={RefineButtonClassNames.CloneButton}
98
102
  {...rest}
99
103
  >
100
104
  {!hideText && (children ?? translate("buttons.clone", "Clone"))}
@@ -10,7 +10,10 @@ import {
10
10
  useRouterType,
11
11
  useLink,
12
12
  } from "@refinedev/core";
13
- import { RefineButtonTestIds } from "@refinedev/ui-types";
13
+ import {
14
+ RefineButtonClassNames,
15
+ RefineButtonTestIds,
16
+ } from "@refinedev/ui-types";
14
17
 
15
18
  import { CreateButtonProps } from "../types";
16
19
 
@@ -93,6 +96,7 @@ export const CreateButton: React.FC<CreateButtonProps> = ({
93
96
  disabled={data?.can === false}
94
97
  title={createButtonDisabledTitle()}
95
98
  data-testid={RefineButtonTestIds.CreateButton}
99
+ className={RefineButtonClassNames.CreateButton}
96
100
  type="primary"
97
101
  {...rest}
98
102
  >
@@ -10,7 +10,10 @@ import {
10
10
  pickNotDeprecated,
11
11
  useWarnAboutChange,
12
12
  } from "@refinedev/core";
13
- import { RefineButtonTestIds } from "@refinedev/ui-types";
13
+ import {
14
+ RefineButtonClassNames,
15
+ RefineButtonTestIds,
16
+ } from "@refinedev/ui-types";
14
17
 
15
18
  import { DeleteButtonProps } from "../types";
16
19
 
@@ -116,6 +119,7 @@ export const DeleteButton: React.FC<DeleteButtonProps> = ({
116
119
  icon={<DeleteOutlined />}
117
120
  disabled={data?.can === false}
118
121
  data-testid={RefineButtonTestIds.DeleteButton}
122
+ className={RefineButtonClassNames.DeleteButton}
119
123
  {...rest}
120
124
  >
121
125
  {!hideText &&
@@ -10,7 +10,10 @@ import {
10
10
  useRouterType,
11
11
  useLink,
12
12
  } from "@refinedev/core";
13
- import { RefineButtonTestIds } from "@refinedev/ui-types";
13
+ import {
14
+ RefineButtonClassNames,
15
+ RefineButtonTestIds,
16
+ } from "@refinedev/ui-types";
14
17
 
15
18
  import { EditButtonProps } from "../types";
16
19
 
@@ -96,6 +99,7 @@ export const EditButton: React.FC<EditButtonProps> = ({
96
99
  disabled={data?.can === false}
97
100
  title={createButtonDisabledTitle()}
98
101
  data-testid={RefineButtonTestIds.EditButton}
102
+ className={RefineButtonClassNames.EditButton}
99
103
  {...rest}
100
104
  >
101
105
  {!hideText && (children ?? translate("buttons.edit", "Edit"))}
@@ -2,7 +2,10 @@ import React from "react";
2
2
  import { Button } from "antd";
3
3
  import { ExportOutlined } from "@ant-design/icons";
4
4
  import { useTranslate } from "@refinedev/core";
5
- import { RefineButtonTestIds } from "@refinedev/ui-types";
5
+ import {
6
+ RefineButtonClassNames,
7
+ RefineButtonTestIds,
8
+ } from "@refinedev/ui-types";
6
9
 
7
10
  import { ExportButtonProps } from "../types";
8
11
 
@@ -24,6 +27,7 @@ export const ExportButton: React.FC<ExportButtonProps> = ({
24
27
  type="default"
25
28
  icon={<ExportOutlined />}
26
29
  data-testid={RefineButtonTestIds.ExportButton}
30
+ className={RefineButtonClassNames.ExportButton}
27
31
  {...rest}
28
32
  >
29
33
  {!hideText && (children ?? translate("buttons.export", "Export"))}
@@ -2,7 +2,10 @@ import React from "react";
2
2
  import { Button, Upload } from "antd";
3
3
  import { ImportOutlined } from "@ant-design/icons";
4
4
  import { useTranslate } from "@refinedev/core";
5
- import { RefineButtonTestIds } from "@refinedev/ui-types";
5
+ import {
6
+ RefineButtonClassNames,
7
+ RefineButtonTestIds,
8
+ } from "@refinedev/ui-types";
6
9
 
7
10
  import { ImportButtonProps } from "../types";
8
11
 
@@ -26,6 +29,7 @@ export const ImportButton: React.FC<ImportButtonProps> = ({
26
29
  <Button
27
30
  icon={<ImportOutlined />}
28
31
  data-testid={RefineButtonTestIds.ImportButton}
32
+ className={RefineButtonClassNames.ImportButton}
29
33
  {...buttonProps}
30
34
  >
31
35
  {!hideText &&
@@ -12,7 +12,10 @@ import {
12
12
  useLink,
13
13
  pickNotDeprecated,
14
14
  } from "@refinedev/core";
15
- import { RefineButtonTestIds } from "@refinedev/ui-types";
15
+ import {
16
+ RefineButtonClassNames,
17
+ RefineButtonTestIds,
18
+ } from "@refinedev/ui-types";
16
19
 
17
20
  import { ListButtonProps } from "../types";
18
21
 
@@ -95,6 +98,7 @@ export const ListButton: React.FC<ListButtonProps> = ({
95
98
  disabled={data?.can === false}
96
99
  title={createButtonDisabledTitle()}
97
100
  data-testid={RefineButtonTestIds.ListButton}
101
+ className={RefineButtonClassNames.ListButton}
98
102
  {...rest}
99
103
  >
100
104
  {!hideText &&
@@ -7,7 +7,10 @@ import {
7
7
  useResource,
8
8
  pickNotDeprecated,
9
9
  } from "@refinedev/core";
10
- import { RefineButtonTestIds } from "@refinedev/ui-types";
10
+ import {
11
+ RefineButtonClassNames,
12
+ RefineButtonTestIds,
13
+ } from "@refinedev/ui-types";
11
14
 
12
15
  import { RefreshButtonProps } from "../types";
13
16
 
@@ -53,6 +56,7 @@ export const RefreshButton: React.FC<RefreshButtonProps> = ({
53
56
  onClick={(e) => (onClick ? onClick(e as any) : refetch())}
54
57
  icon={<RedoOutlined spin={isFetching} />}
55
58
  data-testid={RefineButtonTestIds.RefreshButton}
59
+ className={RefineButtonClassNames.RefreshButton}
56
60
  {...rest}
57
61
  >
58
62
  {!hideText && (children ?? translate("buttons.refresh", "Refresh"))}
@@ -2,7 +2,10 @@ import React from "react";
2
2
  import { Button } from "antd";
3
3
  import { SaveOutlined } from "@ant-design/icons";
4
4
  import { useTranslate } from "@refinedev/core";
5
- import { RefineButtonTestIds } from "@refinedev/ui-types";
5
+ import {
6
+ RefineButtonClassNames,
7
+ RefineButtonTestIds,
8
+ } from "@refinedev/ui-types";
6
9
 
7
10
  import { SaveButtonProps } from "../types";
8
11
 
@@ -24,6 +27,7 @@ export const SaveButton: React.FC<SaveButtonProps> = ({
24
27
  type="primary"
25
28
  icon={<SaveOutlined />}
26
29
  data-testid={RefineButtonTestIds.SaveButton}
30
+ className={RefineButtonClassNames.RefreshButton}
27
31
  {...rest}
28
32
  >
29
33
  {!hideText && (children ?? translate("buttons.save", "Save"))}
@@ -10,7 +10,10 @@ import {
10
10
  useRouterType,
11
11
  useLink,
12
12
  } from "@refinedev/core";
13
- import { RefineButtonTestIds } from "@refinedev/ui-types";
13
+ import {
14
+ RefineButtonClassNames,
15
+ RefineButtonTestIds,
16
+ } from "@refinedev/ui-types";
14
17
 
15
18
  import { ShowButtonProps } from "../types";
16
19
 
@@ -95,6 +98,7 @@ export const ShowButton: React.FC<ShowButtonProps> = ({
95
98
  disabled={data?.can === false}
96
99
  title={createButtonDisabledTitle()}
97
100
  data-testid={RefineButtonTestIds.ShowButton}
101
+ className={RefineButtonClassNames.ShowButton}
98
102
  {...rest}
99
103
  >
100
104
  {!hideText && (children ?? translate("buttons.show", "Show"))}
@@ -10,7 +10,12 @@ import {
10
10
  useBack,
11
11
  } from "@refinedev/core";
12
12
 
13
- import { Breadcrumb, SaveButton, PageHeader } from "@components";
13
+ import {
14
+ Breadcrumb,
15
+ SaveButton,
16
+ PageHeader,
17
+ SaveButtonProps,
18
+ } from "@components";
14
19
  import { CreateProps } from "../types";
15
20
 
16
21
  /**
@@ -21,7 +26,7 @@ import { CreateProps } from "../types";
21
26
  */
22
27
  export const Create: React.FC<CreateProps> = ({
23
28
  title,
24
- saveButtonProps,
29
+ saveButtonProps: saveButtonPropsFromProps,
25
30
  children,
26
31
  resource: resourceFromProps,
27
32
  isLoading = false,
@@ -50,13 +55,15 @@ export const Create: React.FC<CreateProps> = ({
50
55
  ? globalBreadcrumb
51
56
  : breadcrumbFromProps;
52
57
 
58
+ const saveButtonProps: SaveButtonProps = {
59
+ ...(isLoading ? { disabled: true } : {}),
60
+ ...saveButtonPropsFromProps,
61
+ htmlType: "submit",
62
+ };
63
+
53
64
  const defaultFooterButtons = (
54
65
  <>
55
- <SaveButton
56
- {...(isLoading ? { disabled: true } : {})}
57
- {...saveButtonProps}
58
- htmlType="submit"
59
- />
66
+ <SaveButton {...saveButtonProps} />
60
67
  </>
61
68
  );
62
69
 
@@ -119,6 +126,7 @@ export const Create: React.FC<CreateProps> = ({
119
126
  ? footerButtons({
120
127
  defaultButtons:
121
128
  defaultFooterButtons,
129
+ saveButtonProps: saveButtonProps,
122
130
  })
123
131
  : footerButtons
124
132
  : defaultFooterButtons}
@@ -21,6 +21,10 @@ import {
21
21
  SaveButton,
22
22
  Breadcrumb,
23
23
  PageHeader,
24
+ ListButtonProps,
25
+ RefreshButtonProps,
26
+ DeleteButtonProps,
27
+ SaveButtonProps,
24
28
  } from "@components";
25
29
  import { EditProps } from "../types";
26
30
 
@@ -32,11 +36,11 @@ import { EditProps } from "../types";
32
36
  */
33
37
  export const Edit: React.FC<EditProps> = ({
34
38
  title,
35
- saveButtonProps,
39
+ saveButtonProps: saveButtonPropsFromProps,
36
40
  mutationMode: mutationModeProp,
37
41
  recordItemId,
38
42
  children,
39
- deleteButtonProps,
43
+ deleteButtonProps: deleteButtonPropsFromProps,
40
44
  canDelete,
41
45
  resource: resourceFromProps,
42
46
  isLoading = false,
@@ -80,65 +84,70 @@ export const Edit: React.FC<EditProps> = ({
80
84
  ? globalBreadcrumb
81
85
  : breadcrumbFromProps;
82
86
 
87
+ const hasList = resource?.list && !recordItemId;
83
88
  const isDeleteButtonVisible =
84
89
  canDelete ??
85
90
  ((resource?.meta?.canDelete ?? resource?.canDelete) ||
86
- deleteButtonProps);
91
+ deleteButtonPropsFromProps);
92
+
93
+ const listButtonProps: ListButtonProps | undefined = hasList
94
+ ? {
95
+ ...(isLoading ? { disabled: true } : {}),
96
+ resource:
97
+ routerType === "legacy"
98
+ ? resource?.route
99
+ : resource?.identifier ?? resource?.name,
100
+ }
101
+ : undefined;
102
+
103
+ const refreshButtonProps: RefreshButtonProps = {
104
+ ...(isLoading ? { disabled: true } : {}),
105
+ resource:
106
+ routerType === "legacy"
107
+ ? resource?.route
108
+ : resource?.identifier ?? resource?.name,
109
+ recordItemId: id,
110
+ dataProviderName,
111
+ };
112
+
113
+ const deleteButtonProps: DeleteButtonProps | undefined =
114
+ isDeleteButtonVisible
115
+ ? {
116
+ ...(isLoading ? { disabled: true } : {}),
117
+ resource:
118
+ routerType === "legacy"
119
+ ? resource?.route
120
+ : resource?.identifier ?? resource?.name,
121
+ mutationMode,
122
+ onSuccess: () => {
123
+ if (routerType === "legacy") {
124
+ legacyGoList(resource?.route ?? resource?.name ?? "");
125
+ } else {
126
+ go({ to: goListPath });
127
+ }
128
+ },
129
+ recordItemId: id,
130
+ dataProviderName,
131
+ ...deleteButtonPropsFromProps,
132
+ }
133
+ : undefined;
134
+
135
+ const saveButtonProps: SaveButtonProps = {
136
+ ...(isLoading ? { disabled: true } : {}),
137
+ ...saveButtonPropsFromProps,
138
+ };
87
139
 
88
140
  const defaultHeaderButtons = (
89
141
  <>
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
- />
142
+ {hasList && <ListButton {...listButtonProps} />}
143
+ <RefreshButton {...refreshButtonProps} />
110
144
  </>
111
145
  );
112
146
 
113
147
  const defaultFooterButtons = (
114
148
  <>
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
- />
149
+ {isDeleteButtonVisible && <DeleteButton {...deleteButtonProps} />}
150
+ <SaveButton {...saveButtonProps} />
142
151
  </>
143
152
  );
144
153
 
@@ -173,6 +182,8 @@ export const Edit: React.FC<EditProps> = ({
173
182
  ? typeof headerButtons === "function"
174
183
  ? headerButtons({
175
184
  defaultButtons: defaultHeaderButtons,
185
+ listButtonProps,
186
+ refreshButtonProps,
176
187
  })
177
188
  : headerButtons
178
189
  : defaultHeaderButtons}
@@ -205,6 +216,8 @@ export const Edit: React.FC<EditProps> = ({
205
216
  ? footerButtons({
206
217
  defaultButtons:
207
218
  defaultFooterButtons,
219
+ deleteButtonProps,
220
+ saveButtonProps,
208
221
  })
209
222
  : footerButtons
210
223
  : defaultFooterButtons}
@@ -8,7 +8,12 @@ import {
8
8
  useResource,
9
9
  } from "@refinedev/core";
10
10
 
11
- import { Breadcrumb, CreateButton, PageHeader } from "@components";
11
+ import {
12
+ Breadcrumb,
13
+ CreateButton,
14
+ CreateButtonProps,
15
+ PageHeader,
16
+ } from "@components";
12
17
  import { ListProps } from "../types";
13
18
 
14
19
  /**
@@ -21,7 +26,7 @@ export const List: React.FC<ListProps> = ({
21
26
  canCreate,
22
27
  title,
23
28
  children,
24
- createButtonProps,
29
+ createButtonProps: createButtonPropsFromProps,
25
30
  resource: resourceFromProps,
26
31
  wrapperProps,
27
32
  contentProps,
@@ -40,23 +45,28 @@ export const List: React.FC<ListProps> = ({
40
45
 
41
46
  const isCreateButtonVisible =
42
47
  canCreate ??
43
- ((resource?.canCreate ?? !!resource?.create) || createButtonProps);
48
+ ((resource?.canCreate ?? !!resource?.create) ||
49
+ createButtonPropsFromProps);
44
50
 
45
51
  const breadcrumb =
46
52
  typeof breadcrumbFromProps === "undefined"
47
53
  ? globalBreadcrumb
48
54
  : breadcrumbFromProps;
49
55
 
56
+ const createButtonProps: CreateButtonProps | undefined =
57
+ isCreateButtonVisible
58
+ ? {
59
+ size: "middle",
60
+ resource:
61
+ routerType === "legacy"
62
+ ? resource?.route
63
+ : resource?.identifier ?? resource?.name,
64
+ ...createButtonPropsFromProps,
65
+ }
66
+ : undefined;
67
+
50
68
  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
- />
69
+ <CreateButton {...createButtonProps} />
60
70
  ) : null;
61
71
 
62
72
  return (
@@ -82,6 +92,7 @@ export const List: React.FC<ListProps> = ({
82
92
  {typeof headerButtons === "function"
83
93
  ? headerButtons({
84
94
  defaultButtons: defaultExtra,
95
+ createButtonProps,
85
96
  })
86
97
  : headerButtons}
87
98
  </Space>
@@ -19,6 +19,10 @@ import {
19
19
  ListButton,
20
20
  Breadcrumb,
21
21
  PageHeader,
22
+ ListButtonProps,
23
+ EditButtonProps,
24
+ DeleteButtonProps,
25
+ RefreshButtonProps,
22
26
  } from "@components";
23
27
  import { ShowProps } from "../types";
24
28
 
@@ -74,65 +78,66 @@ export const Show: React.FC<ShowProps> = ({
74
78
  ? globalBreadcrumb
75
79
  : breadcrumbFromProps;
76
80
 
81
+ const hasList = resource?.list && !recordItemId;
77
82
  const isDeleteButtonVisible =
78
83
  canDelete ?? resource?.meta?.canDelete ?? resource?.canDelete;
79
84
  const isEditButtonVisible =
80
85
  canEdit ?? resource?.canEdit ?? !!resource?.edit;
81
86
 
87
+ const listButtonProps: ListButtonProps | undefined = hasList
88
+ ? {
89
+ resource:
90
+ routerType === "legacy"
91
+ ? resource?.route
92
+ : resource?.identifier ?? resource?.name,
93
+ }
94
+ : undefined;
95
+ const editButtonProps: EditButtonProps | undefined = isEditButtonVisible
96
+ ? {
97
+ ...(isLoading ? { disabled: true } : {}),
98
+ type: "primary",
99
+ resource:
100
+ routerType === "legacy"
101
+ ? resource?.route
102
+ : resource?.identifier ?? resource?.name,
103
+ recordItemId: id,
104
+ }
105
+ : undefined;
106
+ const deleteButtonProps: DeleteButtonProps | undefined =
107
+ isDeleteButtonVisible
108
+ ? {
109
+ ...(isLoading ? { disabled: true } : {}),
110
+ resource:
111
+ routerType === "legacy"
112
+ ? resource?.route
113
+ : resource?.identifier ?? resource?.name,
114
+ recordItemId: id,
115
+ onSuccess: () => {
116
+ if (routerType === "legacy") {
117
+ legacyGoList(resource?.route ?? resource?.name ?? "");
118
+ } else {
119
+ go({ to: goListPath });
120
+ }
121
+ },
122
+ dataProviderName,
123
+ }
124
+ : undefined;
125
+ const refreshButtonProps: RefreshButtonProps = {
126
+ ...(isLoading ? { disabled: true } : {}),
127
+ resource:
128
+ routerType === "legacy"
129
+ ? resource?.route
130
+ : resource?.identifier ?? resource?.name,
131
+ recordItemId: id,
132
+ dataProviderName,
133
+ };
134
+
82
135
  const defaultHeaderButtons = (
83
136
  <>
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
- type="primary"
97
- resource={
98
- routerType === "legacy"
99
- ? resource?.route
100
- : resource?.identifier ?? resource?.name
101
- }
102
- recordItemId={id}
103
- />
104
- )}
105
- {isDeleteButtonVisible && (
106
- <DeleteButton
107
- {...(isLoading ? { disabled: true } : {})}
108
- resource={
109
- routerType === "legacy"
110
- ? resource?.route
111
- : resource?.identifier ?? resource?.name
112
- }
113
- recordItemId={id}
114
- onSuccess={() => {
115
- if (routerType === "legacy") {
116
- legacyGoList(
117
- resource?.route ?? resource?.name ?? "",
118
- );
119
- } else {
120
- go({ to: goListPath });
121
- }
122
- }}
123
- dataProviderName={dataProviderName}
124
- />
125
- )}
126
- <RefreshButton
127
- {...(isLoading ? { disabled: true } : {})}
128
- resource={
129
- routerType === "legacy"
130
- ? resource?.route
131
- : resource?.identifier ?? resource?.name
132
- }
133
- recordItemId={id}
134
- dataProviderName={dataProviderName}
135
- />
137
+ {hasList && <ListButton {...listButtonProps} />}
138
+ {isEditButtonVisible && <EditButton {...editButtonProps} />}
139
+ {isDeleteButtonVisible && <DeleteButton {...deleteButtonProps} />}
140
+ <RefreshButton {...refreshButtonProps} />
136
141
  </>
137
142
  );
138
143
 
@@ -171,6 +176,10 @@ export const Show: React.FC<ShowProps> = ({
171
176
  ? typeof headerButtons === "function"
172
177
  ? headerButtons({
173
178
  defaultButtons: defaultHeaderButtons,
179
+ deleteButtonProps,
180
+ editButtonProps,
181
+ listButtonProps,
182
+ refreshButtonProps,
174
183
  })
175
184
  : headerButtons
176
185
  : defaultHeaderButtons}