ui-soxo-bootstrap-core 2.4.25-dev.8 → 2.4.25
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.
- package/.github/workflows/npm-publish.yml +15 -37
- package/core/components/extra-info/extra-info-details.js +126 -109
- package/core/components/landing-api/landing-api.js +30 -22
- package/core/lib/Store.js +18 -20
- package/core/lib/components/index.js +1 -4
- package/core/lib/components/sidemenu/sidemenu.js +256 -153
- package/core/lib/components/sidemenu/sidemenu.scss +26 -39
- package/core/lib/hooks/index.js +12 -2
- package/core/lib/pages/login/login.js +139 -255
- package/core/lib/pages/login/login.scss +32 -140
- package/core/models/dashboard/dashboard.js +0 -14
- package/core/models/menus/components/menu-add/menu-add.js +268 -230
- package/core/models/menus/components/menu-lists/menu-lists.js +89 -126
- package/core/models/menus/components/menu-lists/menu-lists.scss +0 -9
- package/core/models/menus/menus.js +267 -247
- package/core/models/roles/components/role-add/role-add.js +227 -269
- package/core/models/roles/components/role-list/role-list.js +6 -8
- package/core/models/roles/roles.js +174 -182
- package/core/models/users/components/user-add/user-add.js +1 -69
- package/core/models/users/users.js +0 -57
- package/core/modules/index.js +13 -23
- package/core/modules/reporting/components/reporting-dashboard/reporting-dashboard.js +1 -1
- package/package.json +2 -2
- package/README.md +0 -260
- package/core/lib/hooks/use-otp-timer.js +0 -99
- package/core/models/staff/components/staff-add/staff-add.js +0 -352
- package/core/models/staff/components/staff-add/staff-add.scss +0 -0
- package/core/modules/steps/action-buttons.js +0 -79
- package/core/modules/steps/steps.js +0 -553
- package/core/modules/steps/steps.scss +0 -158
- package/core/modules/steps/timeline.js +0 -49
|
@@ -1,89 +1,137 @@
|
|
|
1
1
|
/**
|
|
2
2
|
*
|
|
3
3
|
* Sidemenu component
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
5
|
* @author Ashique Mohammed
|
|
6
|
-
* @co-author Sneha
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* @co-author Sneha
|
|
7
|
+
*
|
|
8
|
+
*
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import React, { useState, useEffect, useContext } from
|
|
11
|
+
import React, { useState, useEffect, useContext } from "react";
|
|
12
12
|
|
|
13
|
-
import { animationControls, motion, useAnimation } from
|
|
13
|
+
import { animationControls, motion, useAnimation } from "framer-motion";
|
|
14
14
|
|
|
15
|
-
import { GlobalContext } from
|
|
15
|
+
import { GlobalContext } from "./../../Store";
|
|
16
16
|
|
|
17
|
-
import { Menu, message, Skeleton, Space
|
|
17
|
+
import { Menu, message, Skeleton, Space } from "antd";
|
|
18
18
|
|
|
19
|
-
import FirebaseUtils from
|
|
19
|
+
import FirebaseUtils from "./../../utils/firebase.utils";
|
|
20
20
|
|
|
21
|
-
import { useHistory } from
|
|
21
|
+
import { useHistory } from "react-router-dom";
|
|
22
22
|
|
|
23
23
|
import { useTranslation, Trans } from 'react-i18next';
|
|
24
24
|
|
|
25
|
-
import { Menus } from
|
|
25
|
+
import { Menus } from "../../models"
|
|
26
|
+
|
|
27
|
+
|
|
26
28
|
|
|
27
|
-
|
|
29
|
+
|
|
30
|
+
import "./sidemenu.scss";
|
|
28
31
|
|
|
29
32
|
const { SubMenu } = Menu;
|
|
30
33
|
|
|
34
|
+
|
|
31
35
|
/**
|
|
32
|
-
*
|
|
33
|
-
* @param {*} collapsed
|
|
34
|
-
* @param {*} icon
|
|
35
|
-
* @param {*} caption
|
|
36
|
-
* @returns
|
|
36
|
+
*
|
|
37
|
+
* @param {*} collapsed
|
|
38
|
+
* @param {*} icon
|
|
39
|
+
* @param {*} caption
|
|
40
|
+
* @returns
|
|
37
41
|
*/
|
|
38
42
|
function CollapsedIconMenu({ menu, collapsed, icon, caption }) {
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
39
46
|
// Import t and i18n from useTranslation
|
|
40
47
|
const { t, i18n } = useTranslation();
|
|
41
48
|
const { state } = useContext(GlobalContext);
|
|
42
|
-
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
43
52
|
return (
|
|
53
|
+
|
|
44
54
|
<>
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
{
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
|
|
56
|
+
{/* If value of collapsed is false show caption & icon else hiding caption and showing only icon*/}
|
|
57
|
+
{!collapsed ? (
|
|
58
|
+
|
|
59
|
+
<div
|
|
60
|
+
|
|
61
|
+
className="menu-collapsed" >
|
|
62
|
+
|
|
63
|
+
<div>
|
|
64
|
+
|
|
65
|
+
{
|
|
66
|
+
menu && menu.image_path ?
|
|
67
|
+
<img style={{ width: '25px' }} src={menu.image_path}></img>
|
|
68
|
+
:
|
|
69
|
+
<i className={`fa-solid fas ${icon}`} />
|
|
70
|
+
}
|
|
71
|
+
|
|
60
72
|
</div>
|
|
61
|
-
) : (
|
|
62
|
-
<div className="menu-collapsed">
|
|
63
|
-
<span className="anticon">
|
|
64
|
-
{menu && menu.image_path ? <img style={{ width: '25px' }} src={menu.image_path}></img> : <i className={`fa-solid fas ${icon}`} />}
|
|
65
|
-
</span>
|
|
66
73
|
|
|
67
|
-
|
|
68
|
-
|
|
74
|
+
<div style={{ color: state.theme.colors.leftSectionColor }}>
|
|
75
|
+
|
|
76
|
+
<span className="caption">
|
|
77
|
+
|
|
78
|
+
{/* {caption} */}
|
|
79
|
+
{/* <Trans i18nKey="Appointments"></Trans> */}
|
|
69
80
|
{t(`${caption}`)}
|
|
81
|
+
|
|
70
82
|
</span>
|
|
83
|
+
|
|
71
84
|
</div>
|
|
72
|
-
|
|
73
|
-
|
|
85
|
+
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
) : (
|
|
89
|
+
|
|
90
|
+
<div
|
|
91
|
+
|
|
92
|
+
className="menu-collapsed">
|
|
93
|
+
|
|
94
|
+
<span className="anticon">
|
|
95
|
+
|
|
96
|
+
{
|
|
97
|
+
menu && menu.image_path ?
|
|
98
|
+
<img style={{ width: '25px' }} src={menu.image_path}></img>
|
|
99
|
+
:
|
|
100
|
+
<i className={`fa-solid fas ${icon}`} />
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
</span>
|
|
104
|
+
|
|
105
|
+
<span style={{ color: state.theme.colors.colorPrimaryText,paddingLeft: '6px' }}>
|
|
106
|
+
|
|
107
|
+
{/* <>{caption}</> */}
|
|
108
|
+
{t(`${caption}`)}
|
|
109
|
+
|
|
110
|
+
</span>
|
|
111
|
+
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
)}
|
|
115
|
+
|
|
74
116
|
</>
|
|
75
|
-
|
|
117
|
+
|
|
118
|
+
)
|
|
119
|
+
|
|
76
120
|
}
|
|
77
121
|
|
|
78
|
-
export default function SideMenu({
|
|
79
|
-
|
|
122
|
+
export default function SideMenu({
|
|
123
|
+
loading,
|
|
124
|
+
modules = [],
|
|
125
|
+
callback,
|
|
126
|
+
appSettings,
|
|
127
|
+
collapsed,
|
|
128
|
+
}) {
|
|
129
|
+
const { brandLogo, footerLogo, renderCustomHeader = () => { } } = appSettings;
|
|
80
130
|
|
|
81
|
-
|
|
131
|
+
let history = useHistory();
|
|
82
132
|
|
|
83
|
-
|
|
133
|
+
const [selected, setSelected] = useState([1]);
|
|
84
134
|
|
|
85
|
-
const [selectedKeys, setSelectedKeys] = useState([]);
|
|
86
|
-
const [openKeys, setOpenKeys] = useState([]);
|
|
87
135
|
const [menu, setMenu] = useState({});
|
|
88
136
|
|
|
89
137
|
const { user = { locations: [] }, dispatch, state } = useContext(GlobalContext);
|
|
@@ -99,16 +147,11 @@ export default function SideMenu({ loading, modules = [], callback, appSettings,
|
|
|
99
147
|
// }
|
|
100
148
|
}, [user]);
|
|
101
149
|
|
|
102
|
-
// Keep current menu item selected after reload or navigation
|
|
103
|
-
useEffect(() => {
|
|
104
|
-
const currentPath = history.location.pathname;
|
|
105
|
-
setSelectedKeys([currentPath]);
|
|
106
|
-
}, [history.location.pathname]);
|
|
107
|
-
|
|
108
150
|
/**
|
|
109
151
|
* Logout Function
|
|
110
152
|
*/
|
|
111
153
|
async function handleLogout() {
|
|
154
|
+
|
|
112
155
|
let dbPtrValue = appSettings.headers.db_ptr;
|
|
113
156
|
const isEnvThemeTrue = process.env.REACT_APP_THEME === 'true';
|
|
114
157
|
|
|
@@ -119,9 +162,11 @@ export default function SideMenu({ loading, modules = [], callback, appSettings,
|
|
|
119
162
|
|
|
120
163
|
// localStorage.clear();
|
|
121
164
|
|
|
122
|
-
if (process.env.REACT_APP_PRIMARY_BACKEND ===
|
|
165
|
+
if (process.env.REACT_APP_PRIMARY_BACKEND === "SQL") {
|
|
166
|
+
|
|
123
167
|
// const result = Users.logout()
|
|
124
168
|
localStorage.clear();
|
|
169
|
+
|
|
125
170
|
|
|
126
171
|
localStorage.setItem('db_ptr', dbPtrValue);
|
|
127
172
|
|
|
@@ -131,16 +176,16 @@ export default function SideMenu({ loading, modules = [], callback, appSettings,
|
|
|
131
176
|
...{ loggedCheckDone: true },
|
|
132
177
|
};
|
|
133
178
|
|
|
134
|
-
dispatch({ type:
|
|
179
|
+
dispatch({ type: "user", payload: userInfo });
|
|
135
180
|
|
|
136
|
-
history.push(
|
|
181
|
+
history.push("/login");
|
|
137
182
|
|
|
138
|
-
message.success(
|
|
183
|
+
message.success("You have logged out successfully.");
|
|
139
184
|
} else {
|
|
140
185
|
FirebaseUtils.logout().then(() => {
|
|
141
|
-
history.push(
|
|
186
|
+
history.push("/login");
|
|
142
187
|
|
|
143
|
-
message.success(
|
|
188
|
+
message.success("You have logged out successfully.");
|
|
144
189
|
});
|
|
145
190
|
}
|
|
146
191
|
}
|
|
@@ -149,38 +194,15 @@ export default function SideMenu({ loading, modules = [], callback, appSettings,
|
|
|
149
194
|
* Menu Click Function
|
|
150
195
|
*/
|
|
151
196
|
|
|
152
|
-
// const onMenuClick = (menu, index) => {
|
|
153
|
-
// setSelected([index]);
|
|
154
|
-
|
|
155
|
-
// history.push(menu.path);
|
|
156
|
-
|
|
157
|
-
// setMenu(menu);
|
|
158
|
-
|
|
159
|
-
// callback();
|
|
160
|
-
// };
|
|
161
|
-
|
|
162
197
|
const onMenuClick = (menu, index) => {
|
|
163
|
-
|
|
164
|
-
const parentKey = menu.parentKey;
|
|
165
|
-
|
|
166
|
-
// Keep submenu highlighted
|
|
167
|
-
setSelectedKeys([key]);
|
|
168
|
-
|
|
169
|
-
// Keep parent open
|
|
170
|
-
if (parentKey) {
|
|
171
|
-
setOpenKeys([parentKey]);
|
|
172
|
-
}
|
|
198
|
+
setSelected([index]);
|
|
173
199
|
|
|
174
200
|
history.push(menu.path);
|
|
175
|
-
setMenu(menu);
|
|
176
201
|
|
|
177
|
-
|
|
178
|
-
};
|
|
202
|
+
setMenu(menu);
|
|
179
203
|
|
|
180
|
-
|
|
181
|
-
setOpenKeys(keys);
|
|
204
|
+
callback();
|
|
182
205
|
};
|
|
183
|
-
|
|
184
206
|
/**
|
|
185
207
|
* Function renders the footer logo
|
|
186
208
|
*
|
|
@@ -188,14 +210,15 @@ export default function SideMenu({ loading, modules = [], callback, appSettings,
|
|
|
188
210
|
*/
|
|
189
211
|
function renderFooter(footerLogo) {
|
|
190
212
|
return (
|
|
191
|
-
<div className={`sidebar-footer ${!collapsed ?
|
|
192
|
-
<img className="footer-logo" src={footerLogo} alt={
|
|
213
|
+
<div className={`sidebar-footer ${!collapsed ? "open" : "close"}`}>
|
|
214
|
+
<img className="footer-logo" src={footerLogo} alt={"footer-logo"} />
|
|
193
215
|
</div>
|
|
194
216
|
);
|
|
195
217
|
}
|
|
196
218
|
|
|
197
219
|
let icon;
|
|
198
220
|
|
|
221
|
+
|
|
199
222
|
let index = 0;
|
|
200
223
|
|
|
201
224
|
useEffect(() => {
|
|
@@ -204,6 +227,7 @@ export default function SideMenu({ loading, modules = [], callback, appSettings,
|
|
|
204
227
|
// document.documentElement.style.setProperty('--custom-text-color', state.theme.colors.colorText);
|
|
205
228
|
}, [state.theme]);
|
|
206
229
|
|
|
230
|
+
|
|
207
231
|
return (
|
|
208
232
|
<div className="sidemenu">
|
|
209
233
|
{loading ? (
|
|
@@ -211,19 +235,16 @@ export default function SideMenu({ loading, modules = [], callback, appSettings,
|
|
|
211
235
|
<Skeleton.Avatar />
|
|
212
236
|
<Skeleton.Button />
|
|
213
237
|
{/* <Skeleton.Input /> */}
|
|
214
|
-
</Space>
|
|
215
|
-
|
|
216
|
-
<div
|
|
217
|
-
className="intro"
|
|
218
|
-
style={{ backgroundColor: state.theme.colors.leftSectionBackground, borderBottom: `2px solid ${state.theme.colors.borderColor}` }}
|
|
219
|
-
>
|
|
238
|
+
</Space>) :
|
|
239
|
+
|
|
240
|
+
<div className="intro" style={{ backgroundColor: state.theme.colors.leftSectionBackground ,borderBottom: `2px solid ${state.theme.colors.borderColor}`}}>
|
|
220
241
|
{/* Logo Bar */}
|
|
221
242
|
<div className="logo-wrapper">
|
|
222
243
|
{/* Changing the size of logo bar according to the value of collapsed */}
|
|
223
244
|
<img
|
|
224
|
-
className={`sidemenu-brand-logo ${!collapsed ?
|
|
245
|
+
className={`sidemenu-brand-logo ${!collapsed ? "open" : "close"}`}
|
|
225
246
|
onClick={() => {
|
|
226
|
-
history.push(
|
|
247
|
+
history.push("/");
|
|
227
248
|
}}
|
|
228
249
|
src={brandLogo}
|
|
229
250
|
alt="Logo"
|
|
@@ -234,26 +255,25 @@ export default function SideMenu({ loading, modules = [], callback, appSettings,
|
|
|
234
255
|
{/* If value of collapsed is true show version else not showing */}
|
|
235
256
|
|
|
236
257
|
{!collapsed && process.env.REACT_APP_package_version && (
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
{process.env.REACT_APP_package_version}
|
|
243
|
-
</small>
|
|
244
|
-
)}
|
|
258
|
+
<small style={{
|
|
259
|
+
|
|
260
|
+
color: state.theme.colors.leftSectionColor,
|
|
261
|
+
}}>{process.env.REACT_APP_package_version}</small>
|
|
262
|
+
)}
|
|
245
263
|
</div>
|
|
246
264
|
{/* Logo Bar Ends */}
|
|
247
265
|
|
|
248
266
|
{/* If value of collapsed is true render header else not rendering */}
|
|
249
267
|
|
|
250
|
-
{!collapsed ? renderCustomHeader() :
|
|
268
|
+
{!collapsed ? renderCustomHeader() : ""}
|
|
269
|
+
|
|
251
270
|
</div>
|
|
252
|
-
|
|
271
|
+
}
|
|
253
272
|
|
|
254
273
|
{/* Intro Component */}
|
|
255
274
|
{/* Intro Component Ends */}
|
|
256
275
|
|
|
276
|
+
|
|
257
277
|
{/* Search for Queries */}
|
|
258
278
|
|
|
259
279
|
{/* <div className="menu-search">
|
|
@@ -265,11 +285,15 @@ export default function SideMenu({ loading, modules = [], callback, appSettings,
|
|
|
265
285
|
|
|
266
286
|
{/* Search for Queries Ends */}
|
|
267
287
|
|
|
268
|
-
<div className={`menu-item ${!collapsed ?
|
|
288
|
+
<div className={`menu-item ${!collapsed ? "open" : "close"}`} style={{ backgroundColor: state.theme.colors.leftSectionBackground}}>
|
|
289
|
+
|
|
269
290
|
{loading ? (
|
|
270
291
|
<></>
|
|
271
292
|
) : (
|
|
293
|
+
|
|
294
|
+
|
|
272
295
|
<Menu
|
|
296
|
+
|
|
273
297
|
// selectedKeys={[selected]}
|
|
274
298
|
// style={{ width: 256 }}
|
|
275
299
|
// defaultSelectedKeys={selected}
|
|
@@ -277,12 +301,10 @@ export default function SideMenu({ loading, modules = [], callback, appSettings,
|
|
|
277
301
|
inlineCollapsed={collapsed}
|
|
278
302
|
mode="inline"
|
|
279
303
|
theme={process.env.REACT_APP_THEME}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
onOpenChange={onOpenChange}
|
|
283
|
-
style={{ backgroundColor: state.theme.colors.leftSectionBackground, color: state.theme.colors.leftSectionColor }}
|
|
284
|
-
// theme={''}
|
|
304
|
+
style={{ backgroundColor: state.theme.colors.leftSectionBackground ,color:state.theme.colors.leftSectionColor}}
|
|
305
|
+
// theme={''}
|
|
285
306
|
>
|
|
307
|
+
|
|
286
308
|
{/* <Menu.Item
|
|
287
309
|
onClick={() => {
|
|
288
310
|
setSelected([1]);
|
|
@@ -302,6 +324,7 @@ export default function SideMenu({ loading, modules = [], callback, appSettings,
|
|
|
302
324
|
/>
|
|
303
325
|
</Menu.Item> */}
|
|
304
326
|
|
|
327
|
+
|
|
305
328
|
{/* {
|
|
306
329
|
Menus.screenMenus(modules).map((menu, index) => {
|
|
307
330
|
|
|
@@ -309,7 +332,7 @@ export default function SideMenu({ loading, modules = [], callback, appSettings,
|
|
|
309
332
|
})
|
|
310
333
|
} */}
|
|
311
334
|
|
|
312
|
-
{Menus.screenMenus(modules,
|
|
335
|
+
{Menus.screenMenus(modules, "order")
|
|
313
336
|
|
|
314
337
|
.filter((record) => {
|
|
315
338
|
icon = record;
|
|
@@ -331,133 +354,207 @@ export default function SideMenu({ loading, modules = [], callback, appSettings,
|
|
|
331
354
|
.map((menu, index) => {
|
|
332
355
|
// return <MenuItem menu={menu} index={index} />
|
|
333
356
|
|
|
334
|
-
let sub_menus =
|
|
357
|
+
let sub_menus =
|
|
358
|
+
menu && menu.sub_menus
|
|
359
|
+
? Menus.screenMenus(menu.sub_menus)
|
|
360
|
+
: [];
|
|
335
361
|
|
|
336
362
|
if (menu && sub_menus && sub_menus.length) {
|
|
363
|
+
|
|
337
364
|
let randomIndex = parseInt(Math.random() * 10000000000);
|
|
338
365
|
|
|
339
366
|
return (
|
|
367
|
+
|
|
340
368
|
<SubMenu
|
|
369
|
+
|
|
341
370
|
className="popup"
|
|
342
|
-
style={{ color:
|
|
343
|
-
|
|
371
|
+
style={{ color:state.theme.colors.leftSectionColor}}
|
|
372
|
+
|
|
373
|
+
key={`first-level-${randomIndex}-${menu.caption}`}
|
|
344
374
|
|
|
345
|
-
key={menu.path || menu.caption}
|
|
346
375
|
title={
|
|
376
|
+
|
|
347
377
|
<>
|
|
378
|
+
|
|
348
379
|
<CollapsedIconMenu
|
|
380
|
+
|
|
349
381
|
menu={menu}
|
|
382
|
+
|
|
350
383
|
caption={menu.caption}
|
|
384
|
+
|
|
351
385
|
icon={menu.icon_name || 'fa-solid fas fa-user'}
|
|
386
|
+
|
|
387
|
+
|
|
352
388
|
collapsed={collapsed}
|
|
389
|
+
|
|
353
390
|
/>
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
|
|
354
394
|
</>
|
|
395
|
+
|
|
355
396
|
}
|
|
397
|
+
|
|
356
398
|
>
|
|
357
399
|
{sub_menus.map((submenu, innerIndex) => {
|
|
358
400
|
let randomIndex = parseInt(Math.random() * 10000000000);
|
|
359
401
|
|
|
360
|
-
let third_menus =
|
|
402
|
+
let third_menus =
|
|
403
|
+
submenu && submenu.sub_menus
|
|
404
|
+
? Menus.screenMenus(submenu.sub_menus)
|
|
405
|
+
: [];
|
|
361
406
|
|
|
362
407
|
if (third_menus && third_menus.length) {
|
|
363
408
|
return (
|
|
364
409
|
<SubMenu
|
|
410
|
+
|
|
365
411
|
className="popup"
|
|
366
|
-
// key={`second-level-${randomIndex}-${submenu.id}`}
|
|
367
412
|
|
|
368
|
-
key={submenu.
|
|
413
|
+
key={`second-level-${randomIndex}-${submenu.id}`}
|
|
414
|
+
|
|
369
415
|
title={
|
|
416
|
+
|
|
370
417
|
<span>
|
|
418
|
+
|
|
371
419
|
<CollapsedIconMenu
|
|
420
|
+
|
|
372
421
|
menu={menu}
|
|
422
|
+
|
|
373
423
|
caption={submenu.caption}
|
|
424
|
+
|
|
374
425
|
icon={submenu.icon_name || 'fa-solid fas fa-user'}
|
|
426
|
+
|
|
375
427
|
collapsed={collapsed}
|
|
428
|
+
|
|
376
429
|
/>
|
|
430
|
+
|
|
431
|
+
|
|
377
432
|
</span>
|
|
378
433
|
}
|
|
379
434
|
>
|
|
380
435
|
{third_menus.map((menu) => {
|
|
381
|
-
let randomIndex = parseInt(
|
|
436
|
+
let randomIndex = parseInt(
|
|
437
|
+
Math.random() * 10000000000
|
|
438
|
+
);
|
|
382
439
|
|
|
383
440
|
return (
|
|
384
441
|
<Menu.Item
|
|
385
|
-
// onClick={() => {
|
|
386
|
-
// onMenuClick(menu, index);
|
|
387
|
-
// }}
|
|
388
442
|
onClick={() => {
|
|
389
|
-
onMenuClick(
|
|
443
|
+
onMenuClick(menu, index);
|
|
390
444
|
}}
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
key={menu.path || menu.caption}
|
|
445
|
+
key={`second-level-${randomIndex}-${index}`}
|
|
394
446
|
>
|
|
447
|
+
|
|
395
448
|
<CollapsedIconMenu
|
|
449
|
+
|
|
396
450
|
menu={menu}
|
|
451
|
+
|
|
397
452
|
caption={menu.caption}
|
|
453
|
+
|
|
398
454
|
icon={menu.icon_name || 'fa-solid fas fa-user'}
|
|
455
|
+
|
|
456
|
+
|
|
399
457
|
collapsed={collapsed}
|
|
458
|
+
|
|
400
459
|
/>
|
|
460
|
+
|
|
401
461
|
</Menu.Item>
|
|
402
462
|
);
|
|
403
463
|
})}
|
|
404
464
|
</SubMenu>
|
|
405
465
|
);
|
|
406
466
|
} else {
|
|
407
|
-
let randomIndex = parseInt(
|
|
467
|
+
let randomIndex = parseInt(
|
|
468
|
+
Math.random() * 10000000000
|
|
469
|
+
);
|
|
408
470
|
|
|
409
471
|
return (
|
|
410
472
|
<Menu.Item
|
|
411
|
-
// onClick={() => {
|
|
412
|
-
// onMenuClick(submenu, index);
|
|
413
|
-
// }}
|
|
414
473
|
onClick={() => {
|
|
415
|
-
onMenuClick(
|
|
474
|
+
onMenuClick(submenu, index);
|
|
416
475
|
}}
|
|
417
|
-
|
|
418
|
-
key={submenu.path || submenu.caption}
|
|
476
|
+
key={`first-level-${randomIndex}-${innerIndex}`}
|
|
419
477
|
>
|
|
478
|
+
|
|
420
479
|
<CollapsedIconMenu
|
|
480
|
+
|
|
421
481
|
menu={menu}
|
|
482
|
+
|
|
422
483
|
caption={submenu.caption}
|
|
484
|
+
|
|
423
485
|
icon={submenu.icon_name || 'fa-solid fas fa-user'}
|
|
486
|
+
|
|
487
|
+
|
|
424
488
|
collapsed={collapsed}
|
|
489
|
+
|
|
425
490
|
/>
|
|
491
|
+
|
|
426
492
|
</Menu.Item>
|
|
493
|
+
|
|
427
494
|
);
|
|
495
|
+
|
|
428
496
|
}
|
|
497
|
+
|
|
429
498
|
})}
|
|
499
|
+
|
|
430
500
|
</SubMenu>
|
|
501
|
+
|
|
431
502
|
);
|
|
432
503
|
} else {
|
|
433
504
|
let randomIndex = parseInt(Math.random() * 10000000000);
|
|
434
505
|
|
|
435
506
|
return (
|
|
436
|
-
<Menu.Item
|
|
437
|
-
// onClick={() => {
|
|
438
|
-
// onMenuClick(menu, index);
|
|
439
|
-
// }}
|
|
440
507
|
|
|
508
|
+
<Menu.Item
|
|
441
509
|
onClick={() => {
|
|
442
|
-
onMenuClick(
|
|
510
|
+
onMenuClick(menu, index);
|
|
443
511
|
}}
|
|
444
|
-
|
|
445
|
-
key={menu.path || menu.caption}
|
|
512
|
+
key={`${menu.id}-${randomIndex}`}
|
|
446
513
|
>
|
|
447
|
-
|
|
514
|
+
|
|
515
|
+
<CollapsedIconMenu
|
|
516
|
+
|
|
517
|
+
menu={menu}
|
|
518
|
+
|
|
519
|
+
caption={menu.caption}
|
|
520
|
+
|
|
521
|
+
icon={menu.icon_name || 'fa-solid fas fa-user'}
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
collapsed={collapsed}
|
|
525
|
+
|
|
526
|
+
/>
|
|
527
|
+
|
|
528
|
+
|
|
448
529
|
</Menu.Item>
|
|
530
|
+
|
|
449
531
|
);
|
|
450
532
|
}
|
|
451
533
|
})}
|
|
452
534
|
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
<CollapsedIconMenu
|
|
535
|
+
|
|
536
|
+
{
|
|
537
|
+
loading ? <div class="skeleton-wrapper"></div> : <Menu.Item onClick={handleLogout} key="logout-button">
|
|
538
|
+
|
|
539
|
+
<CollapsedIconMenu
|
|
540
|
+
|
|
541
|
+
caption="Logout"
|
|
542
|
+
|
|
543
|
+
icon='fa-solid fas fa-user'
|
|
544
|
+
|
|
545
|
+
collapsed={collapsed}
|
|
546
|
+
|
|
547
|
+
/>
|
|
548
|
+
|
|
549
|
+
|
|
458
550
|
</Menu.Item>
|
|
459
|
-
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
|
|
460
556
|
</Menu>
|
|
557
|
+
|
|
461
558
|
)}
|
|
462
559
|
|
|
463
560
|
{/* Footer Logo */}
|
|
@@ -473,14 +570,16 @@ export default function SideMenu({ loading, modules = [], callback, appSettings,
|
|
|
473
570
|
* sub menus
|
|
474
571
|
*/
|
|
475
572
|
function MenuItem({ menu, index, history }) {
|
|
573
|
+
|
|
476
574
|
function renderMenus({ menu, index }) {
|
|
477
575
|
let sub_menus = [];
|
|
478
576
|
|
|
479
577
|
if (menu.sub_menus) {
|
|
480
|
-
sub_menus = Menus.screenMenus(menu.sub_menus)
|
|
578
|
+
sub_menus = Menus.screenMenus(menu.sub_menus)
|
|
481
579
|
}
|
|
482
580
|
|
|
483
581
|
if (menu && sub_menus && sub_menus.length) {
|
|
582
|
+
|
|
484
583
|
// return 'hello';
|
|
485
584
|
return (
|
|
486
585
|
<SubMenu
|
|
@@ -492,7 +591,9 @@ function MenuItem({ menu, index, history }) {
|
|
|
492
591
|
}
|
|
493
592
|
>
|
|
494
593
|
{menu.sub_menus.map((menu, index) => {
|
|
495
|
-
return
|
|
594
|
+
return (
|
|
595
|
+
<MenuItem menu={menu} index={menu.id} />
|
|
596
|
+
);
|
|
496
597
|
})}
|
|
497
598
|
</SubMenu>
|
|
498
599
|
);
|
|
@@ -510,5 +611,7 @@ function MenuItem({ menu, index, history }) {
|
|
|
510
611
|
}
|
|
511
612
|
}
|
|
512
613
|
|
|
614
|
+
|
|
513
615
|
return renderMenus({ menu, index });
|
|
514
|
-
|
|
616
|
+
|
|
617
|
+
}
|