@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,320 +1,317 @@
1
1
  import React, { useState } from "react";
2
2
  import { Layout, Menu, Grid, Drawer, Button, theme } from "antd";
3
3
  import {
4
- DashboardOutlined,
5
- LogoutOutlined,
6
- UnorderedListOutlined,
7
- BarsOutlined,
8
- LeftOutlined,
9
- RightOutlined,
4
+ DashboardOutlined,
5
+ LogoutOutlined,
6
+ UnorderedListOutlined,
7
+ BarsOutlined,
8
+ LeftOutlined,
9
+ RightOutlined,
10
10
  } from "@ant-design/icons";
11
11
  import {
12
- useTranslate,
13
- useLogout,
14
- useTitle,
15
- CanAccess,
16
- ITreeMenu,
17
- useIsExistAuthentication,
18
- useRouterContext,
19
- useMenu,
20
- useRefineContext,
21
- useLink,
22
- useRouterType,
23
- useActiveAuthProvider,
24
- pickNotDeprecated,
25
- useWarnAboutChange,
12
+ useTranslate,
13
+ useLogout,
14
+ useTitle,
15
+ CanAccess,
16
+ ITreeMenu,
17
+ useIsExistAuthentication,
18
+ useRouterContext,
19
+ useMenu,
20
+ useRefineContext,
21
+ useLink,
22
+ useRouterType,
23
+ useActiveAuthProvider,
24
+ pickNotDeprecated,
25
+ useWarnAboutChange,
26
26
  } from "@refinedev/core";
27
27
 
28
28
  import { drawerButtonStyles } from "./styles";
29
29
  import { RefineThemedLayoutSiderProps } from "../types";
30
30
  import { ThemedTitle } from "@components";
31
31
 
32
- const { SubMenu } = Menu;
33
- const { useToken } = theme;
34
-
35
32
  /**
36
33
  * @deprecated It is recommended to use the improved `ThemedLayoutV2`. Review migration guidelines. https://refine.dev/docs/api-reference/antd/components/antd-themed-layout/#migrate-themedlayout-to-themedlayoutv2
37
34
  */
38
35
  export const ThemedSider: React.FC<RefineThemedLayoutSiderProps> = ({
39
- Title: TitleFromProps,
40
- render,
41
- meta,
36
+ Title: TitleFromProps,
37
+ render,
38
+ meta,
42
39
  }) => {
43
- const { token } = useToken();
44
-
45
- const [collapsed, setCollapsed] = useState<boolean>(false);
46
- const [drawerOpen, setDrawerOpen] = useState<boolean>(false);
47
- const isExistAuthentication = useIsExistAuthentication();
48
- const routerType = useRouterType();
49
- const NewLink = useLink();
50
- const { warnWhen, setWarnWhen } = useWarnAboutChange();
51
- const { Link: LegacyLink } = useRouterContext();
52
- const Link = routerType === "legacy" ? LegacyLink : NewLink;
53
- const TitleFromContext = useTitle();
54
- const translate = useTranslate();
55
- const { menuItems, selectedKey, defaultOpenKeys } = useMenu({ meta });
56
- const breakpoint = Grid.useBreakpoint();
57
- const { hasDashboard } = useRefineContext();
58
- const authProvider = useActiveAuthProvider();
59
- const { mutate: mutateLogout } = useLogout({
60
- v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),
61
- });
62
-
63
- const isMobile =
64
- typeof breakpoint.lg === "undefined" ? false : !breakpoint.lg;
65
-
66
- const RenderToTitle = TitleFromProps ?? TitleFromContext ?? ThemedTitle;
40
+ const { token } = theme.useToken();
67
41
 
68
- const renderTreeView = (tree: ITreeMenu[], selectedKey?: string) => {
69
- return tree.map((item: ITreeMenu) => {
70
- const {
71
- icon,
72
- label,
73
- route,
74
- key,
75
- name,
76
- children,
77
- parentName,
78
- meta,
79
- options,
80
- } = item;
42
+ const [collapsed, setCollapsed] = useState<boolean>(false);
43
+ const [drawerOpen, setDrawerOpen] = useState<boolean>(false);
44
+ const isExistAuthentication = useIsExistAuthentication();
45
+ const routerType = useRouterType();
46
+ const NewLink = useLink();
47
+ const { warnWhen, setWarnWhen } = useWarnAboutChange();
48
+ const { Link: LegacyLink } = useRouterContext();
49
+ const Link = routerType === "legacy" ? LegacyLink : NewLink;
50
+ const TitleFromContext = useTitle();
51
+ const translate = useTranslate();
52
+ const { menuItems, selectedKey, defaultOpenKeys } = useMenu({ meta });
53
+ const breakpoint = Grid.useBreakpoint();
54
+ const { hasDashboard } = useRefineContext();
55
+ const authProvider = useActiveAuthProvider();
56
+ const { mutate: mutateLogout } = useLogout({
57
+ v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),
58
+ });
81
59
 
82
- if (children.length > 0) {
83
- return (
84
- <CanAccess
85
- key={item.key}
86
- resource={name.toLowerCase()}
87
- action="list"
88
- params={{
89
- resource: item,
90
- }}
91
- >
92
- <SubMenu
93
- key={item.key}
94
- icon={icon ?? <UnorderedListOutlined />}
95
- title={label}
96
- >
97
- {renderTreeView(children, selectedKey)}
98
- </SubMenu>
99
- </CanAccess>
100
- );
101
- }
102
- const isSelected = key === selectedKey;
103
- const isRoute = !(
104
- pickNotDeprecated(meta?.parent, options?.parent, parentName) !==
105
- undefined && children.length === 0
106
- );
60
+ const isMobile =
61
+ typeof breakpoint.lg === "undefined" ? false : !breakpoint.lg;
107
62
 
108
- return (
109
- <CanAccess
110
- key={item.key}
111
- resource={name.toLowerCase()}
112
- action="list"
113
- params={{
114
- resource: item,
115
- }}
116
- >
117
- <Menu.Item
118
- key={item.key}
119
- icon={icon ?? (isRoute && <UnorderedListOutlined />)}
120
- >
121
- <Link to={route ?? ""}>{label}</Link>
122
- {!collapsed && isSelected && (
123
- <div className="ant-menu-tree-arrow" />
124
- )}
125
- </Menu.Item>
126
- </CanAccess>
127
- );
128
- });
129
- };
63
+ const RenderToTitle = TitleFromProps ?? TitleFromContext ?? ThemedTitle;
130
64
 
131
- const handleLogout = () => {
132
- if (warnWhen) {
133
- const confirm = window.confirm(
134
- translate(
135
- "warnWhenUnsavedChanges",
136
- "Are you sure you want to leave? You have unsaved changes.",
137
- ),
138
- );
65
+ const renderTreeView = (tree: ITreeMenu[], selectedKey?: string) => {
66
+ return tree.map((item: ITreeMenu) => {
67
+ const {
68
+ icon,
69
+ label,
70
+ route,
71
+ key,
72
+ name,
73
+ children,
74
+ parentName,
75
+ meta,
76
+ options,
77
+ } = item;
139
78
 
140
- if (confirm) {
141
- setWarnWhen(false);
142
- mutateLogout();
143
- }
144
- } else {
145
- mutateLogout();
146
- }
147
- };
79
+ if (children.length > 0) {
80
+ return (
81
+ <CanAccess
82
+ key={item.key}
83
+ resource={name.toLowerCase()}
84
+ action="list"
85
+ params={{
86
+ resource: item,
87
+ }}
88
+ >
89
+ <Menu.SubMenu
90
+ key={item.key}
91
+ icon={icon ?? <UnorderedListOutlined />}
92
+ title={label}
93
+ >
94
+ {renderTreeView(children, selectedKey)}
95
+ </Menu.SubMenu>
96
+ </CanAccess>
97
+ );
98
+ }
99
+ const isSelected = key === selectedKey;
100
+ const isRoute = !(
101
+ pickNotDeprecated(meta?.parent, options?.parent, parentName) !==
102
+ undefined && children.length === 0
103
+ );
148
104
 
149
- const logout = isExistAuthentication && (
150
- <Menu.Item
151
- key="logout"
152
- onClick={() => handleLogout()}
153
- icon={<LogoutOutlined />}
105
+ return (
106
+ <CanAccess
107
+ key={item.key}
108
+ resource={name.toLowerCase()}
109
+ action="list"
110
+ params={{
111
+ resource: item,
112
+ }}
154
113
  >
155
- {translate("buttons.logout", "Logout")}
156
- </Menu.Item>
157
- );
158
-
159
- const dashboard = hasDashboard ? (
160
- <Menu.Item key="dashboard" icon={<DashboardOutlined />}>
161
- <Link to="/">{translate("dashboard.title", "Dashboard")}</Link>
162
- {!collapsed && selectedKey === "/" && (
163
- <div className="ant-menu-tree-arrow" />
114
+ <Menu.Item
115
+ key={item.key}
116
+ icon={icon ?? (isRoute && <UnorderedListOutlined />)}
117
+ >
118
+ <Link to={route ?? ""}>{label}</Link>
119
+ {!collapsed && isSelected && (
120
+ <div className="ant-menu-tree-arrow" />
164
121
  )}
165
- </Menu.Item>
166
- ) : null;
122
+ </Menu.Item>
123
+ </CanAccess>
124
+ );
125
+ });
126
+ };
167
127
 
168
- const items = renderTreeView(menuItems, selectedKey);
128
+ const handleLogout = () => {
129
+ if (warnWhen) {
130
+ const confirm = window.confirm(
131
+ translate(
132
+ "warnWhenUnsavedChanges",
133
+ "Are you sure you want to leave? You have unsaved changes.",
134
+ ),
135
+ );
169
136
 
170
- const renderSider = () => {
171
- if (render) {
172
- return render({
173
- dashboard,
174
- items,
175
- logout,
176
- collapsed,
177
- });
178
- }
179
- return (
180
- <>
181
- {dashboard}
182
- {items}
183
- {logout}
184
- </>
185
- );
186
- };
137
+ if (confirm) {
138
+ setWarnWhen(false);
139
+ mutateLogout();
140
+ }
141
+ } else {
142
+ mutateLogout();
143
+ }
144
+ };
187
145
 
188
- const renderMenu = () => {
189
- return (
190
- <>
191
- <Menu
192
- selectedKeys={selectedKey ? [selectedKey] : []}
193
- defaultOpenKeys={defaultOpenKeys}
194
- mode="inline"
195
- style={{
196
- marginTop: "8px",
197
- border: "none",
198
- }}
199
- onClick={() => {
200
- setDrawerOpen(false);
201
- if (!breakpoint.lg) {
202
- setCollapsed(true);
203
- }
204
- }}
205
- >
206
- {renderSider()}
207
- </Menu>
208
- </>
209
- );
210
- };
146
+ const logout = isExistAuthentication && (
147
+ <Menu.Item
148
+ key="logout"
149
+ onClick={() => handleLogout()}
150
+ icon={<LogoutOutlined />}
151
+ >
152
+ {translate("buttons.logout", "Logout")}
153
+ </Menu.Item>
154
+ );
211
155
 
212
- const renderDrawerSider = () => {
213
- return (
214
- <>
215
- <Drawer
216
- open={drawerOpen}
217
- onClose={() => setDrawerOpen(false)}
218
- placement="left"
219
- closable={false}
220
- width={200}
221
- bodyStyle={{
222
- padding: 0,
223
- }}
224
- maskClosable={true}
225
- >
226
- <Layout>
227
- <Layout.Sider
228
- style={{
229
- height: "100vh",
230
- overflow: "hidden",
231
- backgroundColor: token.colorBgContainer,
232
- borderRight: `1px solid ${token.colorBgElevated}`,
233
- }}
234
- >
235
- <div
236
- style={{
237
- width: "200px",
238
- padding: "0 16px",
239
- display: "flex",
240
- justifyContent: "flex-start",
241
- alignItems: "center",
242
- height: "64px",
243
- backgroundColor: token.colorBgElevated,
244
- }}
245
- >
246
- <RenderToTitle collapsed={false} />
247
- </div>
248
- {renderMenu()}
249
- </Layout.Sider>
250
- </Layout>
251
- </Drawer>
252
- <Button
253
- style={drawerButtonStyles}
254
- size="large"
255
- onClick={() => setDrawerOpen(true)}
256
- icon={<BarsOutlined />}
257
- ></Button>
258
- </>
259
- );
260
- };
156
+ const dashboard = hasDashboard ? (
157
+ <Menu.Item key="dashboard" icon={<DashboardOutlined />}>
158
+ <Link to="/">{translate("dashboard.title", "Dashboard")}</Link>
159
+ {!collapsed && selectedKey === "/" && (
160
+ <div className="ant-menu-tree-arrow" />
161
+ )}
162
+ </Menu.Item>
163
+ ) : null;
164
+
165
+ const items = renderTreeView(menuItems, selectedKey);
261
166
 
262
- if (isMobile) {
263
- return renderDrawerSider();
167
+ const renderSider = () => {
168
+ if (render) {
169
+ return render({
170
+ dashboard,
171
+ items,
172
+ logout,
173
+ collapsed,
174
+ });
264
175
  }
176
+ return (
177
+ <>
178
+ {dashboard}
179
+ {items}
180
+ {logout}
181
+ </>
182
+ );
183
+ };
265
184
 
185
+ const renderMenu = () => {
266
186
  return (
267
- <Layout.Sider
268
- style={{
269
- backgroundColor: token.colorBgContainer,
270
- borderRight: `1px solid ${token.colorBgElevated}`,
271
- }}
272
- collapsible
273
- collapsed={collapsed}
274
- onCollapse={(collapsed) => setCollapsed(collapsed)}
275
- collapsedWidth={80}
276
- breakpoint="lg"
277
- trigger={
278
- <Button
279
- type="text"
280
- style={{
281
- borderRadius: 0,
282
- height: "100%",
283
- width: "100%",
284
- backgroundColor: token.colorBgElevated,
285
- }}
286
- >
287
- {collapsed ? (
288
- <RightOutlined
289
- style={{
290
- color: token.colorPrimary,
291
- }}
292
- />
293
- ) : (
294
- <LeftOutlined
295
- style={{
296
- color: token.colorPrimary,
297
- }}
298
- />
299
- )}
300
- </Button>
187
+ <>
188
+ <Menu
189
+ selectedKeys={selectedKey ? [selectedKey] : []}
190
+ defaultOpenKeys={defaultOpenKeys}
191
+ mode="inline"
192
+ style={{
193
+ marginTop: "8px",
194
+ border: "none",
195
+ }}
196
+ onClick={() => {
197
+ setDrawerOpen(false);
198
+ if (!breakpoint.lg) {
199
+ setCollapsed(true);
301
200
  }
201
+ }}
302
202
  >
303
- <div
203
+ {renderSider()}
204
+ </Menu>
205
+ </>
206
+ );
207
+ };
208
+
209
+ const renderDrawerSider = () => {
210
+ return (
211
+ <>
212
+ <Drawer
213
+ open={drawerOpen}
214
+ onClose={() => setDrawerOpen(false)}
215
+ placement="left"
216
+ closable={false}
217
+ width={200}
218
+ bodyStyle={{
219
+ padding: 0,
220
+ }}
221
+ maskClosable={true}
222
+ >
223
+ <Layout>
224
+ <Layout.Sider
225
+ style={{
226
+ height: "100vh",
227
+ overflow: "hidden",
228
+ backgroundColor: token.colorBgContainer,
229
+ borderRight: `1px solid ${token.colorBgElevated}`,
230
+ }}
231
+ >
232
+ <div
304
233
  style={{
305
- width: collapsed ? "80px" : "200px",
306
- padding: collapsed ? "0" : "0 16px",
307
- display: "flex",
308
- justifyContent: collapsed ? "center" : "flex-start",
309
- alignItems: "center",
310
- height: "64px",
311
- backgroundColor: token.colorBgElevated,
312
- fontSize: "14px",
234
+ width: "200px",
235
+ padding: "0 16px",
236
+ display: "flex",
237
+ justifyContent: "flex-start",
238
+ alignItems: "center",
239
+ height: "64px",
240
+ backgroundColor: token.colorBgElevated,
313
241
  }}
314
- >
315
- <RenderToTitle collapsed={collapsed} />
316
- </div>
317
- {renderMenu()}
318
- </Layout.Sider>
242
+ >
243
+ <RenderToTitle collapsed={false} />
244
+ </div>
245
+ {renderMenu()}
246
+ </Layout.Sider>
247
+ </Layout>
248
+ </Drawer>
249
+ <Button
250
+ style={drawerButtonStyles}
251
+ size="large"
252
+ onClick={() => setDrawerOpen(true)}
253
+ icon={<BarsOutlined />}
254
+ />
255
+ </>
319
256
  );
257
+ };
258
+
259
+ if (isMobile) {
260
+ return renderDrawerSider();
261
+ }
262
+
263
+ return (
264
+ <Layout.Sider
265
+ style={{
266
+ backgroundColor: token.colorBgContainer,
267
+ borderRight: `1px solid ${token.colorBgElevated}`,
268
+ }}
269
+ collapsible
270
+ collapsed={collapsed}
271
+ onCollapse={(collapsed) => setCollapsed(collapsed)}
272
+ collapsedWidth={80}
273
+ breakpoint="lg"
274
+ trigger={
275
+ <Button
276
+ type="text"
277
+ style={{
278
+ borderRadius: 0,
279
+ height: "100%",
280
+ width: "100%",
281
+ backgroundColor: token.colorBgElevated,
282
+ }}
283
+ >
284
+ {collapsed ? (
285
+ <RightOutlined
286
+ style={{
287
+ color: token.colorPrimary,
288
+ }}
289
+ />
290
+ ) : (
291
+ <LeftOutlined
292
+ style={{
293
+ color: token.colorPrimary,
294
+ }}
295
+ />
296
+ )}
297
+ </Button>
298
+ }
299
+ >
300
+ <div
301
+ style={{
302
+ width: collapsed ? "80px" : "200px",
303
+ padding: collapsed ? "0" : "0 16px",
304
+ display: "flex",
305
+ justifyContent: collapsed ? "center" : "flex-start",
306
+ alignItems: "center",
307
+ height: "64px",
308
+ backgroundColor: token.colorBgElevated,
309
+ fontSize: "14px",
310
+ }}
311
+ >
312
+ <RenderToTitle collapsed={collapsed} />
313
+ </div>
314
+ {renderMenu()}
315
+ </Layout.Sider>
316
+ );
320
317
  };
@@ -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
  };