@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,28 +1,28 @@
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";
@@ -33,285 +33,285 @@ import { ThemedTitle } from "@components";
33
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
34
34
  */
35
35
  export const ThemedSider: React.FC<RefineThemedLayoutSiderProps> = ({
36
- Title: TitleFromProps,
37
- render,
38
- meta,
36
+ Title: TitleFromProps,
37
+ render,
38
+ meta,
39
39
  }) => {
40
- const { token } = theme.useToken();
40
+ const { token } = theme.useToken();
41
41
 
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
- });
59
-
60
- const isMobile =
61
- typeof breakpoint.lg === "undefined" ? false : !breakpoint.lg;
62
-
63
- const RenderToTitle = TitleFromProps ?? TitleFromContext ?? ThemedTitle;
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
+ });
64
59
 
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;
78
-
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
- );
60
+ const isMobile =
61
+ typeof breakpoint.lg === "undefined" ? false : !breakpoint.lg;
104
62
 
105
- return (
106
- <CanAccess
107
- key={item.key}
108
- resource={name.toLowerCase()}
109
- action="list"
110
- params={{
111
- resource: item,
112
- }}
113
- >
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" />
121
- )}
122
- </Menu.Item>
123
- </CanAccess>
124
- );
125
- });
126
- };
63
+ const RenderToTitle = TitleFromProps ?? TitleFromContext ?? ThemedTitle;
127
64
 
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
- );
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;
136
78
 
137
- if (confirm) {
138
- setWarnWhen(false);
139
- mutateLogout();
140
- }
141
- } else {
142
- mutateLogout();
143
- }
144
- };
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
+ );
145
104
 
146
- const logout = isExistAuthentication && (
147
- <Menu.Item
148
- key="logout"
149
- onClick={() => handleLogout()}
150
- icon={<LogoutOutlined />}
105
+ return (
106
+ <CanAccess
107
+ key={item.key}
108
+ resource={name.toLowerCase()}
109
+ action="list"
110
+ params={{
111
+ resource: item,
112
+ }}
151
113
  >
152
- {translate("buttons.logout", "Logout")}
153
- </Menu.Item>
154
- );
155
-
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" />
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" />
161
121
  )}
162
- </Menu.Item>
163
- ) : null;
122
+ </Menu.Item>
123
+ </CanAccess>
124
+ );
125
+ });
126
+ };
164
127
 
165
- 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
+ );
166
136
 
167
- const renderSider = () => {
168
- if (render) {
169
- return render({
170
- dashboard,
171
- items,
172
- logout,
173
- collapsed,
174
- });
175
- }
176
- return (
177
- <>
178
- {dashboard}
179
- {items}
180
- {logout}
181
- </>
182
- );
183
- };
137
+ if (confirm) {
138
+ setWarnWhen(false);
139
+ mutateLogout();
140
+ }
141
+ } else {
142
+ mutateLogout();
143
+ }
144
+ };
184
145
 
185
- const renderMenu = () => {
186
- return (
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);
200
- }
201
- }}
202
- >
203
- {renderSider()}
204
- </Menu>
205
- </>
206
- );
207
- };
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
+ );
208
155
 
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
233
- style={{
234
- width: "200px",
235
- padding: "0 16px",
236
- display: "flex",
237
- justifyContent: "flex-start",
238
- alignItems: "center",
239
- height: "64px",
240
- backgroundColor: token.colorBgElevated,
241
- }}
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
- ></Button>
255
- </>
256
- );
257
- };
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);
258
166
 
259
- if (isMobile) {
260
- return renderDrawerSider();
167
+ const renderSider = () => {
168
+ if (render) {
169
+ return render({
170
+ dashboard,
171
+ items,
172
+ logout,
173
+ collapsed,
174
+ });
261
175
  }
176
+ return (
177
+ <>
178
+ {dashboard}
179
+ {items}
180
+ {logout}
181
+ </>
182
+ );
183
+ };
262
184
 
185
+ const renderMenu = () => {
263
186
  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>
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);
298
200
  }
201
+ }}
202
+ >
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}
299
222
  >
300
- <div
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
301
233
  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",
234
+ width: "200px",
235
+ padding: "0 16px",
236
+ display: "flex",
237
+ justifyContent: "flex-start",
238
+ alignItems: "center",
239
+ height: "64px",
240
+ backgroundColor: token.colorBgElevated,
310
241
  }}
311
- >
312
- <RenderToTitle collapsed={collapsed} />
313
- </div>
314
- {renderMenu()}
315
- </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
+ </>
316
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
+ );
317
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
  };