@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,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";
@@ -28,254 +28,244 @@ import { Title as DefaultTitle } from "@components";
28
28
  import { drawerButtonStyles } from "./styles";
29
29
  import { RefineLayoutSiderProps } from "../types";
30
30
 
31
- const { SubMenu } = Menu;
32
-
33
31
  export const Sider: React.FC<RefineLayoutSiderProps> = ({
34
- Title: TitleFromProps,
35
- render,
36
- meta,
32
+ Title: TitleFromProps,
33
+ render,
34
+ meta,
37
35
  }) => {
38
- const [collapsed, setCollapsed] = useState<boolean>(false);
39
- const [drawerOpen, setDrawerOpen] = useState<boolean>(false);
40
- const isExistAuthentication = useIsExistAuthentication();
41
- const routerType = useRouterType();
42
- const NewLink = useLink();
43
- const { warnWhen, setWarnWhen } = useWarnAboutChange();
44
- const { Link: LegacyLink } = useRouterContext();
45
- const Link = routerType === "legacy" ? LegacyLink : NewLink;
46
- const TitleFromContext = useTitle();
47
- const translate = useTranslate();
48
- const { menuItems, selectedKey, defaultOpenKeys } = useMenu({ meta });
49
- const breakpoint = Grid.useBreakpoint();
50
- const { hasDashboard } = useRefineContext();
51
- const authProvider = useActiveAuthProvider();
52
- const { mutate: mutateLogout } = useLogout({
53
- v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),
54
- });
55
-
56
- const isMobile =
57
- typeof breakpoint.lg === "undefined" ? false : !breakpoint.lg;
58
-
59
- const RenderToTitle = TitleFromProps ?? TitleFromContext ?? DefaultTitle;
60
-
61
- const renderTreeView = (tree: ITreeMenu[], selectedKey?: string) => {
62
- return tree.map((item: ITreeMenu) => {
63
- const {
64
- icon,
65
- label,
66
- route,
67
- key,
68
- name,
69
- children,
70
- parentName,
71
- meta,
72
- options,
73
- } = item;
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
+ });
74
53
 
75
- if (children.length > 0) {
76
- return (
77
- <CanAccess
78
- key={item.key}
79
- resource={name.toLowerCase()}
80
- action="list"
81
- params={{
82
- resource: item,
83
- }}
84
- >
85
- <SubMenu
86
- key={item.key}
87
- icon={icon ?? <UnorderedListOutlined />}
88
- title={label}
89
- >
90
- {renderTreeView(children, selectedKey)}
91
- </SubMenu>
92
- </CanAccess>
93
- );
94
- }
95
- const isSelected = key === selectedKey;
96
- const isRoute = !(
97
- pickNotDeprecated(meta?.parent, options?.parent, parentName) !==
98
- undefined && children.length === 0
99
- );
100
- return (
101
- <CanAccess
102
- key={item.key}
103
- resource={name.toLowerCase()}
104
- action="list"
105
- params={{
106
- resource: item,
107
- }}
108
- >
109
- <Menu.Item
110
- key={item.key}
111
- style={{
112
- fontWeight: isSelected ? "bold" : "normal",
113
- }}
114
- icon={icon ?? (isRoute && <UnorderedListOutlined />)}
115
- >
116
- <Link to={route ?? ""}>{label}</Link>
117
- {!collapsed && isSelected && (
118
- <div className="ant-menu-tree-arrow" />
119
- )}
120
- </Menu.Item>
121
- </CanAccess>
122
- );
123
- });
124
- };
54
+ const isMobile =
55
+ typeof breakpoint.lg === "undefined" ? false : !breakpoint.lg;
125
56
 
126
- const handleLogout = () => {
127
- if (warnWhen) {
128
- const confirm = window.confirm(
129
- translate(
130
- "warnWhenUnsavedChanges",
131
- "Are you sure you want to leave? You have unsaved changes.",
132
- ),
133
- );
57
+ const RenderToTitle = TitleFromProps ?? TitleFromContext ?? DefaultTitle;
134
58
 
135
- if (confirm) {
136
- setWarnWhen(false);
137
- mutateLogout();
138
- }
139
- } else {
140
- mutateLogout();
141
- }
142
- };
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;
143
72
 
144
- const logout = isExistAuthentication && (
145
- <Menu.Item
146
- key="logout"
147
- onClick={handleLogout}
148
- 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
+ }}
149
106
  >
150
- {translate("buttons.logout", "Logout")}
151
- </Menu.Item>
152
- );
153
-
154
- const dashboard = hasDashboard ? (
155
- <Menu.Item
156
- key="dashboard"
107
+ <Menu.Item
108
+ key={item.key}
157
109
  style={{
158
- fontWeight: selectedKey === "/" ? "bold" : "normal",
110
+ fontWeight: isSelected ? "bold" : "normal",
159
111
  }}
160
- icon={<DashboardOutlined />}
161
- >
162
- <Link to="/">{translate("dashboard.title", "Dashboard")}</Link>
163
- {!collapsed && selectedKey === "/" && (
164
- <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" />
165
117
  )}
166
- </Menu.Item>
167
- ) : null;
118
+ </Menu.Item>
119
+ </CanAccess>
120
+ );
121
+ });
122
+ };
168
123
 
169
- 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
+ );
170
132
 
171
- const renderSider = () => {
172
- if (render) {
173
- return render({
174
- dashboard,
175
- items,
176
- logout,
177
- collapsed,
178
- });
179
- }
180
- return (
181
- <>
182
- {dashboard}
183
- {items}
184
- {logout}
185
- </>
186
- );
187
- };
133
+ if (confirm) {
134
+ setWarnWhen(false);
135
+ mutateLogout();
136
+ }
137
+ } else {
138
+ mutateLogout();
139
+ }
140
+ };
188
141
 
189
- const renderMenu = () => {
190
- return (
191
- <>
192
- <Menu
193
- theme="dark"
194
- selectedKeys={selectedKey ? [selectedKey] : []}
195
- defaultOpenKeys={defaultOpenKeys}
196
- mode="inline"
197
- onClick={() => {
198
- setDrawerOpen(false);
199
- if (!breakpoint.lg) {
200
- setCollapsed(true);
201
- }
202
- }}
203
- >
204
- {renderSider()}
205
- </Menu>
206
- </>
207
- );
208
- };
142
+ const logout = isExistAuthentication && (
143
+ <Menu.Item key="logout" onClick={handleLogout} icon={<LogoutOutlined />}>
144
+ {translate("buttons.logout", "Logout")}
145
+ </Menu.Item>
146
+ );
209
147
 
210
- const renderDrawerSider = () => {
211
- return (
212
- <>
213
- <Drawer
214
- open={drawerOpen}
215
- onClose={() => setDrawerOpen(false)}
216
- placement="left"
217
- closable={false}
218
- width={200}
219
- bodyStyle={{
220
- padding: 0,
221
- }}
222
- maskClosable={true}
223
- >
224
- <Layout>
225
- <Layout.Sider
226
- style={{ height: "100vh", overflow: "hidden" }}
227
- >
228
- <RenderToTitle collapsed={false} />
229
- {renderMenu()}
230
- </Layout.Sider>
231
- </Layout>
232
- </Drawer>
233
- <Button
234
- style={drawerButtonStyles}
235
- size="large"
236
- onClick={() => setDrawerOpen(true)}
237
- icon={<BarsOutlined />}
238
- ></Button>
239
- </>
240
- );
241
- };
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;
242
162
 
243
- const renderContent = () => {
244
- if (isMobile) {
245
- return renderDrawerSider();
246
- }
163
+ const items = renderTreeView(menuItems, selectedKey);
247
164
 
248
- return (
249
- <Layout.Sider
250
- collapsible
251
- collapsed={collapsed}
252
- onCollapse={(collapsed: boolean): void =>
253
- setCollapsed(collapsed)
254
- }
255
- collapsedWidth={80}
256
- breakpoint="lg"
257
- >
258
- <RenderToTitle collapsed={collapsed} />
259
- {renderMenu()}
260
- </Layout.Sider>
261
- );
262
- };
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
+ };
263
182
 
183
+ const renderMenu = () => {
264
184
  return (
265
- <ConfigProvider
266
- theme={{
267
- components: {
268
- Menu: {
269
- colorItemBg: "transparent",
270
- colorItemText: "#fff",
271
- colorItemTextSelected: "#fff",
272
- colorItemBgSelected: "transparent",
273
- colorItemTextHover: "#fff",
274
- },
275
- },
276
- }}
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
+ }}
277
197
  >
278
- {renderContent()}
279
- </ConfigProvider>
198
+ {renderSider()}
199
+ </Menu>
200
+ </>
280
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
+ );
281
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
  };