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