qpp-style 9.51.5 → 9.53.0
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/components/Header/HeaderUI.jsx +1 -1
- package/components/SideNav/Content/LevelOneContent.jsx +22 -21
- package/components/SideNav/Content/SelectRole/utils.js +13 -0
- package/components/SideNav/Links/NavLinkDrawer.jsx +5 -0
- package/components/SideNav/UI/SideNavUI.jsx +82 -24
- package/coverage/clover.xml +206 -178
- package/coverage/coverage-final.json +11 -11
- package/coverage/lcov-report/components/Dropdown/index.html +116 -0
- package/coverage/lcov-report/components/Dropdown/index.js.html +289 -0
- package/coverage/lcov-report/components/SanitizedContent/index.html +19 -19
- package/coverage/lcov-report/components/SanitizedContent/index.jsx.html +434 -437
- package/coverage/lcov-report/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +163 -0
- package/coverage/lcov-report/components/SideNav/AnimationGroup/index.html +116 -0
- package/coverage/lcov-report/components/SideNav/Content/LevelOneContent.jsx.html +265 -0
- package/coverage/lcov-report/components/SideNav/Content/SelectRole/index.html +35 -20
- package/coverage/lcov-report/components/SideNav/Content/SelectRole/index.js.html +298 -0
- package/coverage/lcov-report/components/SideNav/Content/SelectRole/utils.js.html +229 -208
- package/coverage/lcov-report/components/SideNav/Content/index.html +131 -0
- package/coverage/lcov-report/components/SideNav/Content/index.js.html +94 -0
- package/coverage/lcov-report/components/SideNav/Details/IndividualDetails.jsx.html +136 -0
- package/coverage/lcov-report/components/SideNav/Details/PracticeDetails.jsx.html +235 -0
- package/coverage/lcov-report/components/SideNav/Details/index.html +146 -0
- package/coverage/lcov-report/components/SideNav/Details/index.js.html +97 -0
- package/coverage/lcov-report/components/SideNav/Links/CmsSwitchLink.jsx.html +205 -0
- package/coverage/lcov-report/components/SideNav/Links/NavItemInline.jsx.html +244 -0
- package/coverage/lcov-report/components/SideNav/Links/NavLinkContainer.jsx.html +184 -0
- package/coverage/lcov-report/components/SideNav/Links/NavLinkDrawer.jsx.html +988 -0
- package/coverage/lcov-report/components/SideNav/Links/NavLinkInline.jsx.html +418 -0
- package/coverage/lcov-report/components/SideNav/Links/NavLinkToggle.jsx.html +184 -0
- package/coverage/lcov-report/components/SideNav/Links/index.html +206 -0
- package/coverage/lcov-report/components/SideNav/Links/index.js.html +124 -0
- package/coverage/lcov-report/components/SideNav/UI/DynamicContent.jsx.html +628 -0
- package/coverage/lcov-report/components/SideNav/UI/SideNavUI.jsx.html +712 -0
- package/coverage/lcov-report/components/SideNav/UI/default-markup.js.html +97 -0
- package/coverage/lcov-report/components/SideNav/UI/index.html +161 -0
- package/coverage/lcov-report/components/SideNav/UI/index.js.html +94 -0
- package/coverage/lcov-report/components/SideNav/helpers.js.html +77 -1157
- package/coverage/lcov-report/components/SideNav/index.html +22 -22
- package/coverage/lcov-report/index.html +53 -53
- package/coverage/lcov-report/lib/SvgComponents.jsx.html +1225 -1246
- package/coverage/lcov-report/lib/index.html +22 -37
- package/coverage/lcov-report/react/components/Accordion/index.html +1 -1
- package/coverage/lcov-report/react/components/Accordion/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Button/index.html +1 -1
- package/coverage/lcov-report/react/components/Button/index.js.html +1 -1
- package/coverage/lcov-report/react/components/Dropdown/index.html +21 -21
- package/coverage/lcov-report/react/components/Dropdown/index.js.html +27 -27
- package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Error/error.js.html +1 -1
- package/coverage/lcov-report/react/components/Error/index.html +1 -1
- package/coverage/lcov-report/react/components/Footer/FooterTooltip.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Footer/SocialLinks.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Footer/Subscribe.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Footer/footer.js.html +1 -1
- package/coverage/lcov-report/react/components/Footer/index.html +1 -1
- package/coverage/lcov-report/react/components/GovBanner/index.html +1 -1
- package/coverage/lcov-report/react/components/GovBanner/index.js.html +1 -1
- package/coverage/lcov-report/react/components/Header/HeaderAccountMenu.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Header/HeaderCancel.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Header/HeaderContainer.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Header/HeaderLogo.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Header/HeaderMenuButton.js.html +1 -1
- package/coverage/lcov-report/react/components/Header/HeaderMenuItem.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Header/HeaderMenuLink.js.html +1 -1
- package/coverage/lcov-report/react/components/Header/HeaderMenuSignOutButton.js.html +1 -1
- package/coverage/lcov-report/react/components/Header/HeaderMobileButton.js.html +1 -1
- package/coverage/lcov-report/react/components/Header/HeaderUI.jsx.html +2 -2
- package/coverage/lcov-report/react/components/Header/HelpIcon.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Header/ImpersonatorBanner.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Header/NavigationButtonIcon.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Header/PreviewBanner.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Header/header.js.html +1 -1
- package/coverage/lcov-report/react/components/Header/hooks.js.html +1 -1
- package/coverage/lcov-report/react/components/Header/index.html +1 -1
- package/coverage/lcov-report/react/components/Header/utag-helpers.js.html +1 -1
- package/coverage/lcov-report/react/components/HeaderSearchBar/index.html +1 -1
- package/coverage/lcov-report/react/components/HeaderSearchBar/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Infotip/Infotip.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Infotip/InfotipContent.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Infotip/index.html +1 -1
- package/coverage/lcov-report/react/components/Infotip/index.js.html +1 -1
- package/coverage/lcov-report/react/components/Modal/LegacyModal.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Modal/Modal.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Modal/index.html +1 -1
- package/coverage/lcov-report/react/components/Modal/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/NotificationBanner/CollapsedView.js.html +1 -1
- package/coverage/lcov-report/react/components/NotificationBanner/ExpandedView.js.html +1 -1
- package/coverage/lcov-report/react/components/NotificationBanner/index.html +1 -1
- package/coverage/lcov-report/react/components/NotificationBanner/index.js.html +1 -1
- package/coverage/lcov-report/react/components/SanitizedContent/index.html +1 -1
- package/coverage/lcov-report/react/components/SanitizedContent/index.jsx.html +7 -7
- package/coverage/lcov-report/react/components/Session/Session.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Session/SessionDialogWrapped.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Session/index.html +1 -1
- package/coverage/lcov-report/react/components/Session/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +3 -3
- package/coverage/lcov-report/react/components/SideNav/AnimationGroup/index.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Content/LevelOneContent.jsx.html +47 -44
- package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.html +31 -31
- package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.js.html +45 -45
- package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/utils.js.html +105 -66
- package/coverage/lcov-report/react/components/SideNav/Content/index.html +12 -12
- package/coverage/lcov-report/react/components/SideNav/Content/index.js.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Details/IndividualDetails.jsx.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Details/PracticeDetails.jsx.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Details/index.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Details/index.js.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Links/CmsSwitchLink.jsx.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Links/NavItemInline.jsx.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkContainer.jsx.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkDrawer.jsx.html +22 -7
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkInline.jsx.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkToggle.jsx.html +4 -4
- package/coverage/lcov-report/react/components/SideNav/Links/index.html +13 -13
- package/coverage/lcov-report/react/components/SideNav/Links/index.js.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/UI/DynamicContent.jsx.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/UI/SideNavUI.jsx.html +236 -62
- package/coverage/lcov-report/react/components/SideNav/UI/default-markup.js.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/UI/index.html +20 -20
- package/coverage/lcov-report/react/components/SideNav/UI/index.js.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/helpers.js.html +4 -4
- package/coverage/lcov-report/react/components/SideNav/index.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/index.js.html +1 -1
- package/coverage/lcov-report/react/components/hooks/index.html +1 -1
- package/coverage/lcov-report/react/components/hooks/useGetConfig.js.html +1 -1
- package/coverage/lcov-report/react/index.html +1 -1
- package/coverage/lcov-report/react/index.js.html +1 -1
- package/coverage/lcov-report/react/lib/Chevron.jsx.html +1 -1
- package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +2 -2
- package/coverage/lcov-report/react/lib/index.html +1 -1
- package/coverage/lcov-report/react/session/index.html +1 -1
- package/coverage/lcov-report/react/session/index.js.html +1 -1
- package/coverage/lcov-report/react/session/logout.js.html +1 -1
- package/coverage/lcov-report/react/session/refresh.js.html +1 -1
- package/coverage/lcov-report/react/session/ttl.js.html +1 -1
- package/coverage/lcov.info +440 -381
- package/dist/browser.js +1 -1
- package/dist/browser.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.LICENSE.txt +0 -10
- package/dist/react/index.js.map +1 -1
- package/package.json +15 -15
- package/test/components/SideNavUI.test.js +88 -1
|
@@ -1,25 +1,19 @@
|
|
|
1
|
-
import { useState } from "react";
|
|
2
1
|
import PropTypes from "prop-types";
|
|
3
2
|
import { parse } from "cookie";
|
|
4
3
|
import { jwtDecode } from "jwt-decode";
|
|
5
4
|
import SanitizedContent from "../../SanitizedContent";
|
|
6
5
|
import AnimationGroup from "../AnimationGroup/AnimationGroup";
|
|
7
6
|
import SelectRole from "./SelectRole";
|
|
8
|
-
import { loadRoleOptions } from "./SelectRole/utils";
|
|
9
7
|
|
|
10
|
-
const LevelOneContent = ({
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
cmsInternalRoleValues,
|
|
20
|
-
]);
|
|
21
|
-
|
|
22
|
-
const [selectedRole, setSelectedRole] = useState("");
|
|
8
|
+
const LevelOneContent = ({
|
|
9
|
+
isExpanded,
|
|
10
|
+
levelOneContent,
|
|
11
|
+
sideNavOptions = [],
|
|
12
|
+
hasMultipleRoles = false,
|
|
13
|
+
selectedRole,
|
|
14
|
+
onRoleChange = () => {},
|
|
15
|
+
}) => {
|
|
16
|
+
const { qpp_auth_token } = parse(document.cookie);
|
|
23
17
|
|
|
24
18
|
let name = "";
|
|
25
19
|
if (qpp_auth_token) {
|
|
@@ -29,8 +23,6 @@ const LevelOneContent = ({ isExpanded, levelOneContent }) => {
|
|
|
29
23
|
const path = window.location.pathname;
|
|
30
24
|
document.cookie = `current_path=${path}; Path=/;`;
|
|
31
25
|
|
|
32
|
-
const hasMultipleRoles = roleOptions.length > 1;
|
|
33
|
-
|
|
34
26
|
return (
|
|
35
27
|
<div className="sidebar-content">
|
|
36
28
|
<AnimationGroup display={isExpanded}>
|
|
@@ -39,9 +31,9 @@ const LevelOneContent = ({ isExpanded, levelOneContent }) => {
|
|
|
39
31
|
<div className="level-one-nav animation-flat">
|
|
40
32
|
{hasMultipleRoles && (
|
|
41
33
|
<SelectRole
|
|
42
|
-
selectedRole={selectedRole}
|
|
43
|
-
setSelectedRole={
|
|
44
|
-
roleOptions={
|
|
34
|
+
selectedRole={selectedRole || sideNavOptions[0]?.value}
|
|
35
|
+
setSelectedRole={onRoleChange}
|
|
36
|
+
roleOptions={sideNavOptions}
|
|
45
37
|
/>
|
|
46
38
|
)}
|
|
47
39
|
|
|
@@ -53,7 +45,16 @@ const LevelOneContent = ({ isExpanded, levelOneContent }) => {
|
|
|
53
45
|
|
|
54
46
|
LevelOneContent.propTypes = {
|
|
55
47
|
isExpanded: PropTypes.bool,
|
|
56
|
-
levelOneContent: PropTypes.
|
|
48
|
+
levelOneContent: PropTypes.string,
|
|
49
|
+
sideNavOptions: PropTypes.arrayOf(
|
|
50
|
+
PropTypes.shape({
|
|
51
|
+
name: PropTypes.string,
|
|
52
|
+
value: PropTypes.string,
|
|
53
|
+
}),
|
|
54
|
+
),
|
|
55
|
+
hasMultipleRoles: PropTypes.bool,
|
|
56
|
+
selectedRole: PropTypes.string,
|
|
57
|
+
onRoleChange: PropTypes.func,
|
|
57
58
|
};
|
|
58
59
|
|
|
59
60
|
export default LevelOneContent;
|
|
@@ -114,6 +114,19 @@ export const redirectPage = (role) => {
|
|
|
114
114
|
else window.location.assign(defaultPage);
|
|
115
115
|
};
|
|
116
116
|
|
|
117
|
+
/**
|
|
118
|
+
* Mirrors redirectPage's own decision so callers can know ahead of time
|
|
119
|
+
* whether selecting a role will trigger a full-page navigation (in which
|
|
120
|
+
* case an in-place config refetch would be redundant/wasted work, since
|
|
121
|
+
* the navigation will remount the app and fetch fresh config anyway).
|
|
122
|
+
* @param {string} role
|
|
123
|
+
* @returns {boolean}
|
|
124
|
+
*/
|
|
125
|
+
export const willRedirectPage = (role) => {
|
|
126
|
+
const defaultPage = defaultPageByRole[role];
|
|
127
|
+
return Boolean(defaultPage) && window.location.pathname !== defaultPage;
|
|
128
|
+
};
|
|
129
|
+
|
|
117
130
|
/**
|
|
118
131
|
* Get localStorage values related to user role
|
|
119
132
|
* @returns {object}
|
|
@@ -25,6 +25,7 @@ const NavLinkDrawer = ({
|
|
|
25
25
|
leftBorderHighlightDisabled,
|
|
26
26
|
hideLabelSection,
|
|
27
27
|
largerDrawerBottomPadding,
|
|
28
|
+
disableActiveLinkHighlight
|
|
28
29
|
}) => {
|
|
29
30
|
const [isOpen, setIsOpen] = useState(openByDefault);
|
|
30
31
|
const MANAGE_ACCESS = "/user/manage-access";
|
|
@@ -70,6 +71,9 @@ const NavLinkDrawer = ({
|
|
|
70
71
|
if (typeof func === "function") {
|
|
71
72
|
return func(link);
|
|
72
73
|
}
|
|
74
|
+
if (link.disableActiveLinkHighlight === true) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
73
77
|
return window.location.href.indexOf(link.url) > 0;
|
|
74
78
|
};
|
|
75
79
|
|
|
@@ -291,6 +295,7 @@ NavLinkDrawer.propTypes = {
|
|
|
291
295
|
leftBorderHighlightDisabled: PropTypes.bool,
|
|
292
296
|
hideLabelSection: PropTypes.bool,
|
|
293
297
|
largerDrawerBottomPadding: PropTypes.bool,
|
|
298
|
+
disableActiveLinkHighlight: PropTypes.bool,
|
|
294
299
|
};
|
|
295
300
|
|
|
296
301
|
export default NavLinkDrawer;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { useState, useRef, useEffect } from "react";
|
|
1
|
+
import { useState, useRef, useEffect, useCallback } from "react";
|
|
2
2
|
import PropTypes from "prop-types";
|
|
3
|
+
import { parse } from "cookie";
|
|
3
4
|
|
|
4
5
|
import { setSideNavExpanded, isSideNavExpanded } from "../helpers";
|
|
5
6
|
import { LevelOneContent } from "../Content";
|
|
6
7
|
import DynamicContent from "./DynamicContent";
|
|
7
8
|
import { NavLinkToggle } from "../Links";
|
|
8
9
|
import defaultMarkup from "./default-markup";
|
|
10
|
+
import { willRedirectPage } from "../Content/SelectRole/utils";
|
|
9
11
|
|
|
10
12
|
// TODO: For an SSR version of the SideNavUI we would need to have
|
|
11
13
|
// the whole SideNav markup render on the server. Less reliance on
|
|
@@ -41,6 +43,27 @@ const SideNavUI = ({
|
|
|
41
43
|
return isSideNavExpanded(window.document);
|
|
42
44
|
});
|
|
43
45
|
const [sideNavContent, setSideNavContent] = useState("<nav></nav>");
|
|
46
|
+
const [sideNavOptions, setSideNavOptions] = useState([]);
|
|
47
|
+
const [sideNavHasMultipleRoles, setSideNavHasMultipleRoles] = useState(false);
|
|
48
|
+
const [selectedRole, setSelectedRoleState] = useState(
|
|
49
|
+
() => parse(document.cookie).selected_role || undefined,
|
|
50
|
+
);
|
|
51
|
+
const selectedRoleRef = useRef(selectedRole);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
selectedRoleRef.current = selectedRole;
|
|
54
|
+
}, [selectedRole]);
|
|
55
|
+
|
|
56
|
+
// Guards against updating state from a fetch that resolves after the
|
|
57
|
+
// component unmounts. Reset on every (re)mount so React StrictMode's
|
|
58
|
+
// dev-only mount -> cleanup -> remount cycle doesn't leave this stuck
|
|
59
|
+
// at false, which would otherwise silently drop the fetched config.
|
|
60
|
+
const isMountedRef = useRef(true);
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
isMountedRef.current = true;
|
|
63
|
+
return () => {
|
|
64
|
+
isMountedRef.current = false;
|
|
65
|
+
};
|
|
66
|
+
}, []);
|
|
44
67
|
|
|
45
68
|
const collapseRef = useRef(null);
|
|
46
69
|
|
|
@@ -74,35 +97,66 @@ const SideNavUI = ({
|
|
|
74
97
|
}
|
|
75
98
|
}, [isExpanded, isExpandedPropSet]);
|
|
76
99
|
|
|
77
|
-
|
|
78
|
-
const path = window.location.pathname;
|
|
79
|
-
document.cookie = `current_path=${path}; Path=/;`;
|
|
80
|
-
isSideNavExpanded(window.document);
|
|
81
|
-
let cancelRequest = false;
|
|
100
|
+
const getSideNavConfig = useCallback(async (role) => {
|
|
82
101
|
const { origin } = window.location;
|
|
83
102
|
const isRunningLocally = origin.includes("localhost");
|
|
84
103
|
let sideNavMenuItems;
|
|
104
|
+
let roleOptions = [];
|
|
105
|
+
let hasMultipleRoles = false;
|
|
85
106
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if (
|
|
99
|
-
|
|
107
|
+
try {
|
|
108
|
+
const url = role
|
|
109
|
+
? `${origin}/config/side-navigation?role=${encodeURIComponent(role)}`
|
|
110
|
+
: `${origin}/config/side-navigation`;
|
|
111
|
+
const response = await fetch(url);
|
|
112
|
+
const data = await response.json();
|
|
113
|
+
sideNavMenuItems = data.markup;
|
|
114
|
+
// Older/unupgraded backends may not return these fields yet, so
|
|
115
|
+
// default gracefully instead of assuming every consumer has them.
|
|
116
|
+
roleOptions = data.sideNavOptions || [];
|
|
117
|
+
hasMultipleRoles = Boolean(data.hasMultipleRoles);
|
|
118
|
+
} catch (error) {
|
|
119
|
+
if (isRunningLocally) {
|
|
120
|
+
sideNavMenuItems = defaultMarkup;
|
|
121
|
+
} else {
|
|
122
|
+
sideNavMenuItems = "<nav></nav>";
|
|
100
123
|
}
|
|
124
|
+
roleOptions = [];
|
|
125
|
+
hasMultipleRoles = false;
|
|
101
126
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
127
|
+
if (isMountedRef.current) {
|
|
128
|
+
setSideNavContent(sideNavMenuItems);
|
|
129
|
+
setSideNavOptions(roleOptions);
|
|
130
|
+
setSideNavHasMultipleRoles(hasMultipleRoles);
|
|
131
|
+
}
|
|
132
|
+
}, []);
|
|
133
|
+
|
|
134
|
+
// Updates the selected_role cookie and re-fetches /config/side-navigation
|
|
135
|
+
// so the sidenav markup reflects the newly selected role. If the role
|
|
136
|
+
// change also triggers a redirect to the role's default page, skip the
|
|
137
|
+
// in-place refetch here - the resulting page reload will remount this
|
|
138
|
+
// component and fetch fresh config anyway, so fetching now would just be
|
|
139
|
+
// wasted/duplicate work.
|
|
140
|
+
const handleRoleChange = useCallback(
|
|
141
|
+
(role) => {
|
|
142
|
+
if (role === selectedRoleRef.current) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
document.cookie = `selected_role=${role}; Path=/;`;
|
|
146
|
+
setSelectedRoleState(role);
|
|
147
|
+
if (!willRedirectPage(role)) {
|
|
148
|
+
getSideNavConfig(role);
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
[getSideNavConfig],
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
useEffect(() => {
|
|
155
|
+
const path = window.location.pathname;
|
|
156
|
+
document.cookie = `current_path=${path}; Path=/;`;
|
|
157
|
+
isSideNavExpanded(window.document);
|
|
158
|
+
getSideNavConfig(selectedRoleRef.current);
|
|
159
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
106
160
|
}, [location.pathname]);
|
|
107
161
|
|
|
108
162
|
const content = !items?.length ? (
|
|
@@ -110,6 +164,10 @@ const SideNavUI = ({
|
|
|
110
164
|
levelOneContent={sideNavContent}
|
|
111
165
|
isExpanded={isExpandedState}
|
|
112
166
|
config={config}
|
|
167
|
+
sideNavOptions={sideNavOptions}
|
|
168
|
+
hasMultipleRoles={sideNavHasMultipleRoles}
|
|
169
|
+
selectedRole={selectedRole}
|
|
170
|
+
onRoleChange={handleRoleChange}
|
|
113
171
|
/>
|
|
114
172
|
) : (
|
|
115
173
|
<DynamicContent
|