@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
@@ -1,26 +1,26 @@
1
1
  import React, { useState } from "react";
2
2
  import { Layout, Menu, Grid, ConfigProvider, Drawer, Button } from "antd";
3
3
  import {
4
- DashboardOutlined,
5
- LogoutOutlined,
6
- UnorderedListOutlined,
7
- BarsOutlined,
4
+ DashboardOutlined,
5
+ LogoutOutlined,
6
+ UnorderedListOutlined,
7
+ BarsOutlined,
8
8
  } from "@ant-design/icons";
9
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
- useWarnAboutChange,
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
+ useWarnAboutChange,
24
24
  } from "@refinedev/core";
25
25
 
26
26
  import { Title as DefaultTitle } from "@components";
@@ -29,251 +29,243 @@ import { drawerButtonStyles } from "./styles";
29
29
  import { RefineLayoutSiderProps } from "../types";
30
30
 
31
31
  export const Sider: React.FC<RefineLayoutSiderProps> = ({
32
- Title: TitleFromProps,
33
- render,
34
- meta,
32
+ Title: TitleFromProps,
33
+ render,
34
+ meta,
35
35
  }) => {
36
- const [collapsed, setCollapsed] = useState<boolean>(false);
37
- const [drawerOpen, setDrawerOpen] = useState<boolean>(false);
38
- const isExistAuthentication = useIsExistAuthentication();
39
- const routerType = useRouterType();
40
- const NewLink = useLink();
41
- const { warnWhen, setWarnWhen } = useWarnAboutChange();
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;
36
+ const [collapsed, setCollapsed] = useState<boolean>(false);
37
+ const [drawerOpen, setDrawerOpen] = useState<boolean>(false);
38
+ const isExistAuthentication = useIsExistAuthentication();
39
+ const routerType = useRouterType();
40
+ const NewLink = useLink();
41
+ const { warnWhen, setWarnWhen } = useWarnAboutChange();
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
+ });
58
53
 
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
- <Menu.SubMenu
84
- key={item.key}
85
- icon={icon ?? <UnorderedListOutlined />}
86
- title={label}
87
- >
88
- {renderTreeView(children, selectedKey)}
89
- </Menu.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
- };
54
+ const isMobile =
55
+ typeof breakpoint.lg === "undefined" ? false : !breakpoint.lg;
123
56
 
124
- const handleLogout = () => {
125
- if (warnWhen) {
126
- const confirm = window.confirm(
127
- translate(
128
- "warnWhenUnsavedChanges",
129
- "Are you sure you want to leave? You have unsaved changes.",
130
- ),
131
- );
57
+ const RenderToTitle = TitleFromProps ?? TitleFromContext ?? DefaultTitle;
132
58
 
133
- if (confirm) {
134
- setWarnWhen(false);
135
- mutateLogout();
136
- }
137
- } else {
138
- mutateLogout();
139
- }
140
- };
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;
141
72
 
142
- const logout = isExistAuthentication && (
143
- <Menu.Item
144
- key="logout"
145
- onClick={handleLogout}
146
- icon={<LogoutOutlined />}
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
+ <Menu.SubMenu
84
+ key={item.key}
85
+ icon={icon ?? <UnorderedListOutlined />}
86
+ title={label}
87
+ >
88
+ {renderTreeView(children, selectedKey)}
89
+ </Menu.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
+ }}
147
106
  >
148
- {translate("buttons.logout", "Logout")}
149
- </Menu.Item>
150
- );
151
-
152
- const dashboard = hasDashboard ? (
153
- <Menu.Item
154
- key="dashboard"
107
+ <Menu.Item
108
+ key={item.key}
155
109
  style={{
156
- fontWeight: selectedKey === "/" ? "bold" : "normal",
110
+ fontWeight: isSelected ? "bold" : "normal",
157
111
  }}
158
- icon={<DashboardOutlined />}
159
- >
160
- <Link to="/">{translate("dashboard.title", "Dashboard")}</Link>
161
- {!collapsed && selectedKey === "/" && (
162
- <div className="ant-menu-tree-arrow" />
112
+ icon={icon ?? (isRoute && <UnorderedListOutlined />)}
113
+ >
114
+ <Link to={route ?? ""}>{label}</Link>
115
+ {!collapsed && isSelected && (
116
+ <div className="ant-menu-tree-arrow" />
163
117
  )}
164
- </Menu.Item>
165
- ) : null;
118
+ </Menu.Item>
119
+ </CanAccess>
120
+ );
121
+ });
122
+ };
166
123
 
167
- const items = renderTreeView(menuItems, selectedKey);
124
+ const handleLogout = () => {
125
+ if (warnWhen) {
126
+ const confirm = window.confirm(
127
+ translate(
128
+ "warnWhenUnsavedChanges",
129
+ "Are you sure you want to leave? You have unsaved changes.",
130
+ ),
131
+ );
168
132
 
169
- const renderSider = () => {
170
- if (render) {
171
- return render({
172
- dashboard,
173
- items,
174
- logout,
175
- collapsed,
176
- });
177
- }
178
- return (
179
- <>
180
- {dashboard}
181
- {items}
182
- {logout}
183
- </>
184
- );
185
- };
133
+ if (confirm) {
134
+ setWarnWhen(false);
135
+ mutateLogout();
136
+ }
137
+ } else {
138
+ mutateLogout();
139
+ }
140
+ };
186
141
 
187
- const renderMenu = () => {
188
- return (
189
- <>
190
- <Menu
191
- theme="dark"
192
- selectedKeys={selectedKey ? [selectedKey] : []}
193
- defaultOpenKeys={defaultOpenKeys}
194
- mode="inline"
195
- onClick={() => {
196
- setDrawerOpen(false);
197
- if (!breakpoint.lg) {
198
- setCollapsed(true);
199
- }
200
- }}
201
- >
202
- {renderSider()}
203
- </Menu>
204
- </>
205
- );
206
- };
142
+ const logout = isExistAuthentication && (
143
+ <Menu.Item key="logout" onClick={handleLogout} icon={<LogoutOutlined />}>
144
+ {translate("buttons.logout", "Logout")}
145
+ </Menu.Item>
146
+ );
207
147
 
208
- const renderDrawerSider = () => {
209
- return (
210
- <>
211
- <Drawer
212
- open={drawerOpen}
213
- onClose={() => setDrawerOpen(false)}
214
- placement="left"
215
- closable={false}
216
- width={200}
217
- bodyStyle={{
218
- padding: 0,
219
- }}
220
- maskClosable={true}
221
- >
222
- <Layout>
223
- <Layout.Sider
224
- style={{ height: "100vh", overflow: "hidden" }}
225
- >
226
- <RenderToTitle collapsed={false} />
227
- {renderMenu()}
228
- </Layout.Sider>
229
- </Layout>
230
- </Drawer>
231
- <Button
232
- style={drawerButtonStyles}
233
- size="large"
234
- onClick={() => setDrawerOpen(true)}
235
- icon={<BarsOutlined />}
236
- ></Button>
237
- </>
238
- );
239
- };
148
+ const dashboard = hasDashboard ? (
149
+ <Menu.Item
150
+ key="dashboard"
151
+ style={{
152
+ fontWeight: selectedKey === "/" ? "bold" : "normal",
153
+ }}
154
+ icon={<DashboardOutlined />}
155
+ >
156
+ <Link to="/">{translate("dashboard.title", "Dashboard")}</Link>
157
+ {!collapsed && selectedKey === "/" && (
158
+ <div className="ant-menu-tree-arrow" />
159
+ )}
160
+ </Menu.Item>
161
+ ) : null;
240
162
 
241
- const renderContent = () => {
242
- if (isMobile) {
243
- return renderDrawerSider();
244
- }
163
+ const items = renderTreeView(menuItems, selectedKey);
245
164
 
246
- return (
247
- <Layout.Sider
248
- collapsible
249
- collapsed={collapsed}
250
- onCollapse={(collapsed: boolean): void =>
251
- setCollapsed(collapsed)
252
- }
253
- collapsedWidth={80}
254
- breakpoint="lg"
255
- >
256
- <RenderToTitle collapsed={collapsed} />
257
- {renderMenu()}
258
- </Layout.Sider>
259
- );
260
- };
165
+ const renderSider = () => {
166
+ if (render) {
167
+ return render({
168
+ dashboard,
169
+ items,
170
+ logout,
171
+ collapsed,
172
+ });
173
+ }
174
+ return (
175
+ <>
176
+ {dashboard}
177
+ {items}
178
+ {logout}
179
+ </>
180
+ );
181
+ };
261
182
 
183
+ const renderMenu = () => {
262
184
  return (
263
- <ConfigProvider
264
- theme={{
265
- components: {
266
- Menu: {
267
- colorItemBg: "transparent",
268
- colorItemText: "#fff",
269
- colorItemTextSelected: "#fff",
270
- colorItemBgSelected: "transparent",
271
- colorItemTextHover: "#fff",
272
- },
273
- },
274
- }}
185
+ <>
186
+ <Menu
187
+ theme="dark"
188
+ selectedKeys={selectedKey ? [selectedKey] : []}
189
+ defaultOpenKeys={defaultOpenKeys}
190
+ mode="inline"
191
+ onClick={() => {
192
+ setDrawerOpen(false);
193
+ if (!breakpoint.lg) {
194
+ setCollapsed(true);
195
+ }
196
+ }}
275
197
  >
276
- {renderContent()}
277
- </ConfigProvider>
198
+ {renderSider()}
199
+ </Menu>
200
+ </>
278
201
  );
202
+ };
203
+
204
+ const renderDrawerSider = () => {
205
+ return (
206
+ <>
207
+ <Drawer
208
+ open={drawerOpen}
209
+ onClose={() => setDrawerOpen(false)}
210
+ placement="left"
211
+ closable={false}
212
+ width={200}
213
+ bodyStyle={{
214
+ padding: 0,
215
+ }}
216
+ maskClosable={true}
217
+ >
218
+ <Layout>
219
+ <Layout.Sider style={{ height: "100vh", overflow: "hidden" }}>
220
+ <RenderToTitle collapsed={false} />
221
+ {renderMenu()}
222
+ </Layout.Sider>
223
+ </Layout>
224
+ </Drawer>
225
+ <Button
226
+ style={drawerButtonStyles}
227
+ size="large"
228
+ onClick={() => setDrawerOpen(true)}
229
+ icon={<BarsOutlined />}
230
+ />
231
+ </>
232
+ );
233
+ };
234
+
235
+ const renderContent = () => {
236
+ if (isMobile) {
237
+ return renderDrawerSider();
238
+ }
239
+
240
+ return (
241
+ <Layout.Sider
242
+ collapsible
243
+ collapsed={collapsed}
244
+ onCollapse={(collapsed: boolean): void => setCollapsed(collapsed)}
245
+ collapsedWidth={80}
246
+ breakpoint="lg"
247
+ >
248
+ <RenderToTitle collapsed={collapsed} />
249
+ {renderMenu()}
250
+ </Layout.Sider>
251
+ );
252
+ };
253
+
254
+ return (
255
+ <ConfigProvider
256
+ theme={{
257
+ components: {
258
+ Menu: {
259
+ colorItemBg: "transparent",
260
+ colorItemText: "#fff",
261
+ colorItemTextSelected: "#fff",
262
+ colorItemBgSelected: "transparent",
263
+ colorItemTextHover: "#fff",
264
+ },
265
+ },
266
+ }}
267
+ >
268
+ {renderContent()}
269
+ </ConfigProvider>
270
+ );
279
271
  };
@@ -1,9 +1,9 @@
1
1
  import { CSSProperties } from "react";
2
2
 
3
3
  export const drawerButtonStyles: CSSProperties = {
4
- borderTopLeftRadius: 0,
5
- borderBottomLeftRadius: 0,
6
- position: "fixed",
7
- top: 64,
8
- zIndex: 999,
4
+ borderTopLeftRadius: 0,
5
+ borderBottomLeftRadius: 0,
6
+ position: "fixed",
7
+ top: 64,
8
+ zIndex: 999,
9
9
  };
@@ -1,48 +1,48 @@
1
1
  import React from "react";
2
2
  import {
3
- TitleProps,
4
- useRouterContext,
5
- useRouterType,
6
- useLink,
3
+ TitleProps,
4
+ useRouterContext,
5
+ useRouterType,
6
+ useLink,
7
7
  } from "@refinedev/core";
8
8
 
9
9
  export const Title: React.FC<TitleProps> = ({ collapsed }) => {
10
- const routerType = useRouterType();
11
- const Link = useLink();
12
- const { Link: LegacyLink } = useRouterContext();
10
+ const routerType = useRouterType();
11
+ const Link = useLink();
12
+ const { Link: LegacyLink } = useRouterContext();
13
13
 
14
- const ActiveLink = routerType === "legacy" ? LegacyLink : Link;
14
+ const ActiveLink = routerType === "legacy" ? LegacyLink : Link;
15
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
- );
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
48
  };
@@ -1,11 +1,11 @@
1
1
  import type {
2
- RefineLayoutSiderProps,
3
- RefineLayoutHeaderProps,
4
- RefineLayoutLayoutProps,
2
+ RefineLayoutSiderProps,
3
+ RefineLayoutHeaderProps,
4
+ RefineLayoutLayoutProps,
5
5
  } from "@refinedev/ui-types";
6
6
 
7
7
  export type {
8
- RefineLayoutSiderProps,
9
- RefineLayoutHeaderProps,
10
- RefineLayoutLayoutProps,
8
+ RefineLayoutSiderProps,
9
+ RefineLayoutHeaderProps,
10
+ RefineLayoutLayoutProps,
11
11
  };