qpp-style 9.37.1 → 9.38.1
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/Footer/FooterUI.jsx +1 -0
- package/components/Header/HeaderMenuItem.jsx +1 -1
- package/components/Header/HeaderMenuLink.js +1 -1
- package/components/Header/ImpersonatorBanner.jsx +1 -1
- package/components/Infotip/Infotip.jsx +1 -1
- package/components/Infotip/InfotipContent.jsx +3 -1
- package/components/SideNav/Content/LevelOneContent.jsx +14 -4
- package/components/SideNav/Content/SelectRole/index.js +7 -15
- package/components/SideNav/Content/SelectRole/utils.js +0 -7
- package/components/SideNav/helpers.js +1 -352
- package/coverage/clover.xml +579 -599
- package/coverage/coverage-final.json +71 -70
- package/coverage/lcov-report/{position.js.html → Infotip.jsx.html} +90 -81
- package/coverage/lcov-report/{Tooltip.jsx.html → InfotipContent.jsx.html} +29 -38
- package/coverage/lcov-report/InfotipIcon.jsx.html +208 -0
- package/coverage/lcov-report/components/Accordion/index.html +21 -21
- package/coverage/lcov-report/components/Accordion/index.jsx.html +127 -115
- package/coverage/lcov-report/components/Button/index.html +15 -15
- package/coverage/lcov-report/components/Button/index.js.html +136 -136
- package/coverage/lcov-report/components/Error/Collapsible.jsx.html +98 -98
- package/coverage/lcov-report/components/Error/ErrorUI.jsx.html +33 -33
- package/coverage/lcov-report/components/Error/index.html +23 -23
- package/coverage/lcov-report/components/Footer/FooterUI.jsx.html +236 -224
- package/coverage/lcov-report/components/Footer/SocialLinks.jsx.html +62 -62
- package/coverage/lcov-report/components/Footer/Subscribe.jsx.html +36 -36
- package/coverage/lcov-report/components/Footer/index.html +13 -13
- package/coverage/lcov-report/components/GovBanner/index.html +21 -21
- package/coverage/lcov-report/components/GovBanner/index.js.html +236 -236
- package/coverage/lcov-report/components/Header/HeaderAccountMenu.jsx.html +160 -160
- package/coverage/lcov-report/components/Header/HeaderCancel.jsx.html +23 -23
- package/coverage/lcov-report/components/Header/HeaderContainer.jsx.html +119 -119
- package/coverage/lcov-report/components/Header/HeaderLogo.jsx.html +81 -81
- package/coverage/lcov-report/components/Header/HeaderMenuButton.js.html +82 -82
- package/coverage/lcov-report/components/Header/HeaderMenuItem.jsx.html +423 -423
- package/coverage/lcov-report/components/Header/HeaderMenuLink.js.html +95 -95
- package/coverage/lcov-report/components/Header/HeaderMenuSignOutButton.js.html +97 -97
- package/coverage/lcov-report/components/Header/HeaderMobileButton.js.html +69 -69
- package/coverage/lcov-report/components/Header/HeaderUI.jsx.html +296 -296
- package/coverage/lcov-report/components/Header/HelpIcon.jsx.html +65 -65
- package/coverage/lcov-report/components/Header/ImpersonatorBanner.jsx.html +138 -138
- package/coverage/lcov-report/components/Header/NavigationButtonIcon.jsx.html +52 -52
- package/coverage/lcov-report/components/Header/hooks.js.html +109 -109
- package/coverage/lcov-report/components/Header/index.html +149 -149
- package/coverage/lcov-report/components/Header/utag-helpers.js.html +21 -21
- package/coverage/lcov-report/components/Infotip/Infotip.jsx.html +96 -108
- package/coverage/lcov-report/components/Infotip/InfotipContent.jsx.html +223 -0
- package/coverage/lcov-report/components/Infotip/InfotipIcon.jsx.html +49 -49
- package/coverage/lcov-report/components/Infotip/index.html +32 -32
- package/coverage/lcov-report/components/Infotip/index.js.html +1 -1
- package/coverage/lcov-report/components/Modal/LegacyModal.jsx.html +116 -116
- package/coverage/lcov-report/components/Modal/Modal.jsx.html +243 -243
- package/coverage/lcov-report/components/Modal/index.html +34 -34
- package/coverage/lcov-report/components/Modal/index.jsx.html +25 -25
- package/coverage/lcov-report/components/NotificationBanner/CollapsedView.js.html +67 -67
- package/coverage/lcov-report/components/NotificationBanner/ExpandedView.js.html +80 -80
- package/coverage/lcov-report/components/NotificationBanner/index.html +39 -39
- package/coverage/lcov-report/components/NotificationBanner/index.js.html +379 -379
- package/coverage/lcov-report/components/SanitizedContent/index.html +19 -19
- package/coverage/lcov-report/components/SanitizedContent/index.jsx.html +287 -218
- package/coverage/lcov-report/components/SessionDialogUI.jsx.html +359 -359
- package/coverage/lcov-report/components/SideNav/Chart/ScoreChart.jsx.html +889 -0
- package/coverage/lcov-report/components/SideNav/Chart/index.html +116 -0
- package/coverage/lcov-report/components/SideNav/Content/SelectRole/index.html +17 -17
- package/coverage/lcov-report/components/SideNav/Content/SelectRole/utils.js.html +179 -152
- package/coverage/lcov-report/components/SideNav/helpers.js.html +653 -482
- package/coverage/lcov-report/components/SideNav/index.html +17 -17
- package/coverage/lcov-report/components/Tooltip/Tooltip.jsx.html +2 -2
- package/coverage/lcov-report/components/Tooltip/index.html +1 -1
- package/coverage/lcov-report/components/Tooltip/index.js.html +1 -1
- package/coverage/lcov-report/components/Tooltip/position.js.html +1 -1
- package/coverage/lcov-report/components/hooks/index.html +21 -21
- package/coverage/lcov-report/components/hooks/useGetConfig.js.html +109 -109
- package/coverage/lcov-report/components/index.html +17 -17
- package/coverage/lcov-report/index.html +147 -162
- package/coverage/lcov-report/index.js.html +3 -3
- package/coverage/lcov-report/lib/Chevron.jsx.html +36 -36
- package/coverage/lcov-report/lib/SvgComponents.jsx.html +1213 -1213
- package/coverage/lcov-report/lib/index.html +24 -24
- package/coverage/lcov-report/react/components/Accordion/index.html +1 -1
- package/coverage/lcov-report/react/components/Accordion/index.jsx.html +14 -14
- package/coverage/lcov-report/react/components/Button/index.html +1 -1
- package/coverage/lcov-report/react/components/Button/index.js.html +16 -16
- package/coverage/lcov-report/react/components/Dropdown/index.html +1 -1
- package/coverage/lcov-report/react/components/Dropdown/index.js.html +10 -10
- package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +4 -4
- package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +5 -5
- package/coverage/lcov-report/react/components/Error/error.js.html +5 -5
- package/coverage/lcov-report/react/components/Error/index.html +1 -1
- package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +13 -13
- package/coverage/lcov-report/react/components/Footer/LegacyFooterUI.jsx.html +667 -0
- package/coverage/lcov-report/react/components/Footer/SocialLinks.jsx.html +2 -2
- package/coverage/lcov-report/react/components/Footer/Subscribe.jsx.html +2 -2
- package/coverage/lcov-report/react/components/Footer/footer.js.html +5 -5
- 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 +3 -3
- package/coverage/lcov-report/react/components/Header/HeaderAccountMenu.jsx.html +10 -10
- package/coverage/lcov-report/react/components/Header/HeaderCancel.jsx.html +3 -3
- package/coverage/lcov-report/react/components/Header/HeaderContainer.jsx.html +62 -23
- package/coverage/lcov-report/react/components/Header/HeaderLogo.jsx.html +70 -10
- package/coverage/lcov-report/react/components/Header/HeaderMenuButton.js.html +8 -8
- package/coverage/lcov-report/react/components/Header/HeaderMenuItem.jsx.html +40 -40
- package/coverage/lcov-report/react/components/Header/HeaderMenuLink.js.html +15 -15
- package/coverage/lcov-report/react/components/Header/HeaderMenuSignOutButton.js.html +10 -10
- package/coverage/lcov-report/react/components/Header/HeaderMobileButton.js.html +5 -5
- package/coverage/lcov-report/react/components/Header/HeaderUI.jsx.html +47 -35
- package/coverage/lcov-report/react/components/Header/HelpIcon.jsx.html +2 -2
- package/coverage/lcov-report/react/components/Header/ImpersonatorBanner.jsx.html +62 -50
- package/coverage/lcov-report/react/components/Header/NavigationButtonIcon.jsx.html +2 -2
- package/coverage/lcov-report/react/components/Header/header.js.html +5 -5
- package/coverage/lcov-report/react/components/Header/hooks.js.html +9 -9
- package/coverage/lcov-report/react/components/Header/index.html +35 -35
- package/coverage/lcov-report/react/components/Header/utag-helpers.js.html +2 -2
- package/coverage/lcov-report/react/components/HeaderSearchBar/index.html +116 -0
- package/coverage/lcov-report/react/components/HeaderSearchBar/index.jsx.html +325 -0
- package/coverage/lcov-report/react/components/Infotip/Infotip.jsx.html +13 -13
- package/coverage/lcov-report/react/components/Infotip/InfotipContent.jsx.html +19 -13
- package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +6 -6
- package/coverage/lcov-report/react/components/Infotip/index.html +1 -1
- package/coverage/lcov-report/react/components/Infotip/index.js.html +2 -2
- package/coverage/lcov-report/react/components/Modal/LegacyModal.jsx.html +11 -11
- package/coverage/lcov-report/react/components/Modal/Modal.jsx.html +47 -47
- package/coverage/lcov-report/react/components/Modal/index.html +32 -32
- package/coverage/lcov-report/react/components/Modal/index.jsx.html +24 -24
- package/coverage/lcov-report/react/components/NotificationBanner/CollapsedView.js.html +7 -7
- package/coverage/lcov-report/react/components/NotificationBanner/ExpandedView.js.html +6 -6
- package/coverage/lcov-report/react/components/NotificationBanner/index.html +1 -1
- package/coverage/lcov-report/react/components/NotificationBanner/index.js.html +31 -31
- package/coverage/lcov-report/react/components/SanitizedContent/index.html +21 -21
- package/coverage/lcov-report/react/components/SanitizedContent/index.jsx.html +213 -213
- package/coverage/lcov-report/react/components/Session/Session.jsx.html +352 -0
- package/coverage/lcov-report/react/components/Session/SessionDialogWrapped.jsx.html +121 -0
- package/coverage/lcov-report/react/components/Session/index.html +146 -0
- package/coverage/lcov-report/react/components/Session/index.jsx.html +94 -0
- package/coverage/lcov-report/react/components/SessionDialog/index.html +1 -1
- package/coverage/lcov-report/react/components/SessionDialog/sessionDialog.js.html +2 -2
- package/coverage/lcov-report/react/components/SessionDialogUI.jsx.html +30 -90
- package/coverage/lcov-report/react/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +20 -20
- package/coverage/lcov-report/react/components/SideNav/AnimationGroup/index.html +21 -21
- package/coverage/lcov-report/react/components/SideNav/Chart/ScoreChart.jsx.html +2 -2
- package/coverage/lcov-report/react/components/SideNav/Chart/index.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Chart/index.js.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Content/LevelOneContent.jsx.html +99 -36
- package/coverage/lcov-report/react/components/SideNav/Content/LevelTwoContent.jsx.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.html +29 -29
- package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.js.html +106 -25
- package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/utils.js.html +388 -16
- package/coverage/lcov-report/react/components/SideNav/Content/index.html +21 -21
- package/coverage/lcov-report/react/components/SideNav/Content/index.js.html +2 -2
- package/coverage/lcov-report/react/components/SideNav/Details/IndividualDetails.jsx.html +3 -3
- package/coverage/lcov-report/react/components/SideNav/Details/PracticeDetails.jsx.html +28 -10
- package/coverage/lcov-report/react/components/SideNav/Details/index.html +13 -13
- package/coverage/lcov-report/react/components/SideNav/Details/index.js.html +3 -3
- package/coverage/lcov-report/react/components/SideNav/Links/CmsSwitchLink.jsx.html +5 -5
- package/coverage/lcov-report/react/components/SideNav/Links/NavItemInline.jsx.html +8 -8
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkContainer.jsx.html +3 -3
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkDrawer.jsx.html +42 -39
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkInline.jsx.html +19 -16
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkToggle.jsx.html +11 -11
- package/coverage/lcov-report/react/components/SideNav/Links/index.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Links/index.js.html +6 -6
- package/coverage/lcov-report/react/components/SideNav/UI/SideNavUI.jsx.html +167 -173
- package/coverage/lcov-report/react/components/SideNav/UI/default-markup.js.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/UI/index.html +21 -21
- package/coverage/lcov-report/react/components/SideNav/UI/index.js.html +2 -2
- package/coverage/lcov-report/react/components/SideNav/helpers.js.html +44 -176
- package/coverage/lcov-report/react/components/SideNav/index.html +25 -25
- package/coverage/lcov-report/react/components/SideNav/index.js.html +17 -83
- package/coverage/lcov-report/react/components/Tooltip/Tooltip.jsx.html +159 -42
- package/coverage/lcov-report/react/components/Tooltip/index.html +9 -9
- package/coverage/lcov-report/react/components/Tooltip/index.js.html +1 -1
- package/coverage/lcov-report/react/components/Tooltip/position.js.html +20 -20
- package/coverage/lcov-report/react/components/hooks/index.html +14 -14
- package/coverage/lcov-report/react/components/hooks/useGetConfig.js.html +17 -20
- package/coverage/lcov-report/react/components/index.html +21 -21
- package/coverage/lcov-report/react/index.html +1 -1
- package/coverage/lcov-report/react/index.js.html +3 -3
- package/coverage/lcov-report/react/lib/Chevron.jsx.html +1 -1
- package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +72 -72
- package/coverage/lcov-report/react/lib/index.html +15 -15
- package/coverage/lcov-report/react/lib/svg-definitions.svg.html +1 -1
- package/coverage/lcov-report/react/session/index.html +55 -40
- package/coverage/lcov-report/react/session/index.js.html +1 -1
- package/coverage/lcov-report/react/session/isAuthV2.js.html +151 -0
- package/coverage/lcov-report/react/session/logout.js.html +96 -57
- package/coverage/lcov-report/react/session/refresh.js.html +68 -59
- package/coverage/lcov-report/react/session/ttl.js.html +44 -80
- package/coverage/lcov-report/session/index.html +46 -46
- package/coverage/lcov-report/session/index.js.html +13 -13
- package/coverage/lcov-report/session/logout.js.html +106 -97
- package/coverage/lcov-report/session/refresh.js.html +71 -71
- package/coverage/lcov-report/session/ttl.js.html +62 -62
- package/coverage/lcov.info +948 -1025
- 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.map +1 -1
- package/package.json +18 -18
- package/storybook-static/229.630347465201d1822126.manager.bundle.js +0 -1
- package/storybook-static/295.aa3c5122636a27ad7c7b.manager.bundle.js +0 -1
- package/storybook-static/468.d976c69e47003b4dcfa3.manager.bundle.js +0 -2
- package/storybook-static/468.d976c69e47003b4dcfa3.manager.bundle.js.LICENSE.txt +0 -94
- package/storybook-static/51.fc4b02f2a75c894ae64e.manager.bundle.js +0 -2
- package/storybook-static/51.fc4b02f2a75c894ae64e.manager.bundle.js.LICENSE.txt +0 -8
- package/storybook-static/551.45aead073703cc6fb12b.manager.bundle.js +0 -1
- package/storybook-static/807.1a7f4dcf15e4696572ca.manager.bundle.js +0 -2
- package/storybook-static/807.1a7f4dcf15e4696572ca.manager.bundle.js.LICENSE.txt +0 -31
- package/storybook-static/897.9b5fee8cc7074607c812.manager.bundle.js +0 -2
- package/storybook-static/897.9b5fee8cc7074607c812.manager.bundle.js.LICENSE.txt +0 -12
- package/storybook-static/935.532759f0652585685af7.manager.bundle.js +0 -1
- package/storybook-static/favicon.ico +0 -0
- package/storybook-static/index.html +0 -59
- package/storybook-static/main.ad4edcd27d527a119d7a.manager.bundle.js +0 -1
- package/storybook-static/project.json +0 -1
- package/storybook-static/runtime~main.b165398bf7ef3e30d431.manager.bundle.js +0 -1
|
@@ -101,7 +101,7 @@ const HeaderMenuItem = ({
|
|
|
101
101
|
<button
|
|
102
102
|
ref={menuButtonRef}
|
|
103
103
|
className="menu-dropdown-toggle"
|
|
104
|
-
aria-label={`${name} navigation dropdown`}
|
|
104
|
+
aria-label={`${name} ${subtitle} navigation dropdown`}
|
|
105
105
|
aria-expanded={isOpen}
|
|
106
106
|
aria-controls={`nav-section-${menuIdentifier}`}
|
|
107
107
|
data-toggle="dropdown"
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import PropTypes from "prop-types";
|
|
3
|
-
import { submissionsUrl } from "../SideNav/helpers";
|
|
4
3
|
import { useHeaderState } from "./hooks";
|
|
5
4
|
import { setUtagLink } from "./utag-helpers";
|
|
6
5
|
|
|
6
|
+
const submissionsUrl = "/user/submissions";
|
|
7
7
|
// exclude submissions urls
|
|
8
8
|
const isNotExcluded = (href) => !href.includes(submissionsUrl);
|
|
9
9
|
|
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
revertQppHasAuthsCookie,
|
|
8
8
|
revertApmPaymentCookie,
|
|
9
9
|
} from "../../session/logout";
|
|
10
|
-
import { viewingToolUrl } from "../SideNav/helpers";
|
|
11
10
|
|
|
11
|
+
const viewingToolUrl = "/user/helpdesk-viewing-tool";
|
|
12
12
|
const getViewType = (viewType) =>
|
|
13
13
|
({
|
|
14
14
|
username: "HARP ID",
|
|
@@ -37,7 +37,7 @@ const touchHandlers = {
|
|
|
37
37
|
* Tooltip with styled information icon
|
|
38
38
|
*/
|
|
39
39
|
const Infotip = ({ ariaLabel, label, lightIcon, ...props }) => (
|
|
40
|
-
<InfotipContent label={label} {...props}>
|
|
40
|
+
<InfotipContent label={label} id="info-tip" {...props}>
|
|
41
41
|
<button
|
|
42
42
|
type="button"
|
|
43
43
|
aria-label={ariaLabel}
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
const TEXT_COLOR = "#FFF";
|
|
11
11
|
const BACKGROUND_COLOR = "#333";
|
|
12
12
|
|
|
13
|
-
const InfotipContent = ({ children, label }) => {
|
|
13
|
+
const InfotipContent = ({ children, label, id }) => {
|
|
14
14
|
const tooltip = useTooltipState();
|
|
15
15
|
|
|
16
16
|
const cssStyles = {
|
|
@@ -27,6 +27,7 @@ const InfotipContent = ({ children, label }) => {
|
|
|
27
27
|
{children}
|
|
28
28
|
</TooltipAnchor>
|
|
29
29
|
<TooltipAriaKit
|
|
30
|
+
aria-labelledby={id}
|
|
30
31
|
state={tooltip}
|
|
31
32
|
className="tooltip-content"
|
|
32
33
|
style={cssStyles}
|
|
@@ -41,6 +42,7 @@ const InfotipContent = ({ children, label }) => {
|
|
|
41
42
|
InfotipContent.propTypes = {
|
|
42
43
|
children: PropTypes.node.isRequired,
|
|
43
44
|
label: PropTypes.node.isRequired,
|
|
45
|
+
id: PropTypes.node.isRequired,
|
|
44
46
|
};
|
|
45
47
|
|
|
46
48
|
export default InfotipContent;
|
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
import React, { useState } from "react";
|
|
2
2
|
import PropTypes from "prop-types";
|
|
3
3
|
import cookie from "cookie";
|
|
4
|
-
import jwtDecode from "jwt-decode";
|
|
4
|
+
import { jwtDecode } from "jwt-decode";
|
|
5
5
|
import SanitizedContent from "../../SanitizedContent";
|
|
6
6
|
import AnimationGroup from "../AnimationGroup/AnimationGroup";
|
|
7
|
-
import { isMultiRoleUser } from "../helpers";
|
|
8
7
|
import SelectRole from "./SelectRole";
|
|
8
|
+
import { loadRoleOptions } from "./SelectRole/utils";
|
|
9
9
|
|
|
10
10
|
const LevelOneContent = ({ isExpanded, levelOneContent }) => {
|
|
11
|
-
|
|
11
|
+
const {
|
|
12
|
+
qpp_auth_token,
|
|
13
|
+
qpp_has_authorizations: hasAuthorizations,
|
|
14
|
+
qpp_cms_internal_authorized: cmsInternalRoleValues,
|
|
15
|
+
} = cookie.parse(document.cookie);
|
|
16
|
+
|
|
17
|
+
const roleOptions = loadRoleOptions([
|
|
18
|
+
hasAuthorizations,
|
|
19
|
+
cmsInternalRoleValues,
|
|
20
|
+
]);
|
|
12
21
|
|
|
13
22
|
const [selectedRole, setSelectedRole] = useState("");
|
|
14
23
|
|
|
@@ -20,7 +29,7 @@ const LevelOneContent = ({ isExpanded, levelOneContent }) => {
|
|
|
20
29
|
const path = window.location.pathname;
|
|
21
30
|
document.cookie = `current_path=${path}; Path=/;`;
|
|
22
31
|
|
|
23
|
-
const hasMultipleRoles =
|
|
32
|
+
const hasMultipleRoles = roleOptions.length > 1;
|
|
24
33
|
|
|
25
34
|
return (
|
|
26
35
|
<div className="sidebar-content">
|
|
@@ -32,6 +41,7 @@ const LevelOneContent = ({ isExpanded, levelOneContent }) => {
|
|
|
32
41
|
<SelectRole
|
|
33
42
|
selectedRole={selectedRole}
|
|
34
43
|
setSelectedRole={setSelectedRole}
|
|
44
|
+
roleOptions={roleOptions}
|
|
35
45
|
/>
|
|
36
46
|
)}
|
|
37
47
|
|
|
@@ -3,29 +3,20 @@ import PropTypes from "prop-types";
|
|
|
3
3
|
import cookie from "cookie";
|
|
4
4
|
import Dropdown from "../../../Dropdown";
|
|
5
5
|
import {
|
|
6
|
-
loadRoleOptions,
|
|
7
6
|
redirectPage,
|
|
8
7
|
getLocalStorageRoleState,
|
|
9
8
|
initializeLocalStorageRoleState,
|
|
10
9
|
updateLocalStorageRoleState,
|
|
11
10
|
} from "./utils";
|
|
12
11
|
|
|
13
|
-
const SelectRole = ({ selectedRole, setSelectedRole }) => {
|
|
14
|
-
const {
|
|
15
|
-
|
|
16
|
-
qpp_cms_internal_authorized: cmsInternalRoleValues,
|
|
17
|
-
qpp_impersonated_user: isHelpdeskRoleAndImpersonating,
|
|
18
|
-
} = cookie.parse(document.cookie);
|
|
19
|
-
|
|
20
|
-
const ROLE_OPTIONS = loadRoleOptions([
|
|
21
|
-
hasAuthorizations,
|
|
22
|
-
cmsInternalRoleValues,
|
|
23
|
-
]);
|
|
12
|
+
const SelectRole = ({ selectedRole, setSelectedRole, roleOptions }) => {
|
|
13
|
+
const { qpp_impersonated_user: isHelpdeskRoleAndImpersonating } =
|
|
14
|
+
cookie.parse(document.cookie);
|
|
24
15
|
|
|
25
16
|
const handleSelection = (e) => {
|
|
26
17
|
e.preventDefault();
|
|
27
18
|
const dropdownValue = e.target.value;
|
|
28
|
-
const newRoleSelected =
|
|
19
|
+
const newRoleSelected = roleOptions.filter(
|
|
29
20
|
(opt) => opt.value === dropdownValue,
|
|
30
21
|
)[0].value;
|
|
31
22
|
// Update localStorage with the new role selected
|
|
@@ -39,7 +30,7 @@ const SelectRole = ({ selectedRole, setSelectedRole }) => {
|
|
|
39
30
|
useEffect(() => {
|
|
40
31
|
// Check localStorage & set initial selected role
|
|
41
32
|
const { selectedUserRole } = getLocalStorageRoleState();
|
|
42
|
-
const roleValue = selectedUserRole ||
|
|
33
|
+
const roleValue = selectedUserRole || roleOptions[0].value;
|
|
43
34
|
|
|
44
35
|
// Set localStorage values if not set
|
|
45
36
|
initializeLocalStorageRoleState(roleValue);
|
|
@@ -62,7 +53,7 @@ const SelectRole = ({ selectedRole, setSelectedRole }) => {
|
|
|
62
53
|
name="user-role-selection"
|
|
63
54
|
ariaLabel="Select User Role"
|
|
64
55
|
className="qpp-u-width--100 SelectRole__Dropdown"
|
|
65
|
-
options={
|
|
56
|
+
options={roleOptions}
|
|
66
57
|
onChange={handleSelection}
|
|
67
58
|
disabled={isHelpdeskRoleAndImpersonating}
|
|
68
59
|
/>
|
|
@@ -73,6 +64,7 @@ const SelectRole = ({ selectedRole, setSelectedRole }) => {
|
|
|
73
64
|
SelectRole.propTypes = {
|
|
74
65
|
selectedRole: PropTypes.string,
|
|
75
66
|
setSelectedRole: PropTypes.func,
|
|
67
|
+
roleOptions: PropTypes.array,
|
|
76
68
|
};
|
|
77
69
|
|
|
78
70
|
export default SelectRole;
|
|
@@ -35,13 +35,6 @@ export const isReviewerRole = (cmsInternalRole) => {
|
|
|
35
35
|
return reviewerRoles.includes(cmsInternalRole);
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
-
// Check if internal cms role in a Content Mgr role
|
|
39
|
-
// @param {string} cmsInternalRole
|
|
40
|
-
// @returns {boolean}
|
|
41
|
-
export const isContentMgmtRole = (cmsInternalRole) => {
|
|
42
|
-
return cmsRoles.includes(cmsInternalRole);
|
|
43
|
-
};
|
|
44
|
-
|
|
45
38
|
/**
|
|
46
39
|
* Check if internal cms roles has Reviewer role
|
|
47
40
|
* @param {array} cmsInternalRoles array of values
|
|
@@ -1,46 +1,4 @@
|
|
|
1
1
|
import cookie from "cookie";
|
|
2
|
-
import {
|
|
3
|
-
AccountHomeIcon,
|
|
4
|
-
DashboardIcon,
|
|
5
|
-
FacilityBasedPreviewIcon,
|
|
6
|
-
HardshipIcon,
|
|
7
|
-
HelpSupportIcon,
|
|
8
|
-
ManageUsersIcon,
|
|
9
|
-
MyApplicationsIcon,
|
|
10
|
-
MyTestDataIcon,
|
|
11
|
-
PaymentIcon,
|
|
12
|
-
PhysicianCompareIcon,
|
|
13
|
-
StarIcon,
|
|
14
|
-
TargetIcon,
|
|
15
|
-
IndividualReporting,
|
|
16
|
-
ManageDocumentsIcon,
|
|
17
|
-
AuthorContentIcon,
|
|
18
|
-
RegistrationIcon,
|
|
19
|
-
} from "../../lib/SvgComponents";
|
|
20
|
-
import { isReviewerRole, isContentMgmtRole } from "./Content/SelectRole/utils";
|
|
21
|
-
|
|
22
|
-
const submissionsUrl = "/user/submissions";
|
|
23
|
-
const dashboardUrl = "/user/dashboard";
|
|
24
|
-
const manageUrl = "/user/manage-access";
|
|
25
|
-
const feedbackUrl = `${submissionsUrl}/feedback`;
|
|
26
|
-
const physicianCompareUrl = `${submissionsUrl}/doctors-clinicians-preview`;
|
|
27
|
-
const reportsPortalUrl = `${submissionsUrl}/reports`;
|
|
28
|
-
const facilityBasedPreviewBaseUrl = `${submissionsUrl}/facility-based-preview`;
|
|
29
|
-
const viewingToolUrl = "/user/helpdesk-viewing-tool";
|
|
30
|
-
const contentMgrDashboardUrl = "/user/content-management";
|
|
31
|
-
const registrationUrl = "/user/registration/";
|
|
32
|
-
|
|
33
|
-
const performanceFeedbackUrl = (performanceYear) => {
|
|
34
|
-
if (performanceYear) {
|
|
35
|
-
return `${feedbackUrl}/${performanceYear}`;
|
|
36
|
-
} else {
|
|
37
|
-
return feedbackUrl;
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
const facilityBasedPreviewUrl = (performanceYear) => {
|
|
42
|
-
return `${facilityBasedPreviewBaseUrl}/${performanceYear}`;
|
|
43
|
-
};
|
|
44
2
|
|
|
45
3
|
const handleNavigation = (e, linkCallbackFunction, label) => {
|
|
46
4
|
if (linkCallbackFunction) {
|
|
@@ -59,293 +17,6 @@ const handleNavigation = (e, linkCallbackFunction, label) => {
|
|
|
59
17
|
});
|
|
60
18
|
};
|
|
61
19
|
|
|
62
|
-
/**
|
|
63
|
-
* Load icon by url
|
|
64
|
-
* @param {string} url
|
|
65
|
-
* @returns svg icon
|
|
66
|
-
*/
|
|
67
|
-
const getIcon = (url, linkLabel) => {
|
|
68
|
-
const icons = {
|
|
69
|
-
[dashboardUrl]: DashboardIcon,
|
|
70
|
-
[feedbackUrl]: StarIcon,
|
|
71
|
-
[manageUrl]: ManageUsersIcon,
|
|
72
|
-
[physicianCompareUrl]: PhysicianCompareIcon,
|
|
73
|
-
[reportsPortalUrl]: HardshipIcon,
|
|
74
|
-
[submissionsUrl]: AccountHomeIcon,
|
|
75
|
-
[facilityBasedPreviewBaseUrl]: FacilityBasedPreviewIcon,
|
|
76
|
-
[registrationUrl]: RegistrationIcon,
|
|
77
|
-
"/developers": HelpSupportIcon,
|
|
78
|
-
"/resources/help-and-support": HelpSupportIcon,
|
|
79
|
-
"/user/apm-incentive-payments": PaymentIcon,
|
|
80
|
-
"/user/applications": MyApplicationsIcon,
|
|
81
|
-
"/user/exception/#/landing": HardshipIcon,
|
|
82
|
-
"/user/targeted-review/#/landing": TargetIcon,
|
|
83
|
-
"/user/test-data": MyTestDataIcon,
|
|
84
|
-
"/user/self-nomination/#/landing": IndividualReporting,
|
|
85
|
-
"/user/reviewers": AccountHomeIcon,
|
|
86
|
-
"/reviewer/exception": HardshipIcon,
|
|
87
|
-
"/reviewer/targeted-review": TargetIcon,
|
|
88
|
-
"/self-nomination": IndividualReporting,
|
|
89
|
-
"/case-management": FacilityBasedPreviewIcon,
|
|
90
|
-
[contentMgrDashboardUrl]: AccountHomeIcon,
|
|
91
|
-
"Manage Documents": ManageDocumentsIcon,
|
|
92
|
-
"Author Content": AuthorContentIcon,
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
if (linkLabel) return icons[linkLabel];
|
|
96
|
-
return icons[url];
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
const singleRoleContentMap = {
|
|
100
|
-
"QPP Content Management - Author": "contentManager",
|
|
101
|
-
"QPP Content Management - Approver": "contentManager",
|
|
102
|
-
"QPP Content Management - Admin": "contentManager",
|
|
103
|
-
"QPP Front-end - Author": "contentManager",
|
|
104
|
-
"QPP Self-Nomination": "internalReviewers",
|
|
105
|
-
"QPP Targeted Review & Exceptions": "internalReviewers",
|
|
106
|
-
"QPP Case Management - PIMMS Reviewer": "internalReviewers",
|
|
107
|
-
"QPP Case Management - ACO PAC Reviewer": "internalReviewers",
|
|
108
|
-
"QPP Case Management - CMS Reviewer": "internalReviewers",
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
const multiRoleContentMap = {
|
|
112
|
-
Reviewer: "internalReviewers",
|
|
113
|
-
"Content Manager": "contentManager",
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
const replaceDefaultContentMgrLinks = (defaultContent) => {
|
|
117
|
-
const host = window.location.host;
|
|
118
|
-
const updatedDefaultContent = {
|
|
119
|
-
...defaultContent,
|
|
120
|
-
contentManager: [
|
|
121
|
-
defaultContent.contentManager.find(
|
|
122
|
-
(obj) => obj.label === "Dashboard Home",
|
|
123
|
-
),
|
|
124
|
-
{
|
|
125
|
-
url: `${host}.qpp.cms.gov/cm/`,
|
|
126
|
-
label: "Manage Documents",
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
url: `${host}.qpp.cms.gov/content-management/`,
|
|
130
|
-
label: "Author Content",
|
|
131
|
-
},
|
|
132
|
-
],
|
|
133
|
-
};
|
|
134
|
-
return updatedDefaultContent;
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Load the side nav content for the given role
|
|
139
|
-
* @param {string} roleName role of given user from internalReviewerNames
|
|
140
|
-
* @param {object} navContent object of side nav links by role (levelOneContent & defaultContent)
|
|
141
|
-
* @returns {array} returns an array of objects (side nav menu links) from levelOneContent
|
|
142
|
-
* || defaultContent
|
|
143
|
-
*/
|
|
144
|
-
const loadSideNavContent = (roleName, navContent, isMultiRoleUser = false) => {
|
|
145
|
-
const { levelOneContent, defaultContent } = navContent;
|
|
146
|
-
const updatedDefaultContent = replaceDefaultContentMgrLinks(defaultContent);
|
|
147
|
-
const roleContentMap = isMultiRoleUser
|
|
148
|
-
? multiRoleContentMap
|
|
149
|
-
: singleRoleContentMap;
|
|
150
|
-
const contentByRole = roleContentMap[roleName];
|
|
151
|
-
if (levelOneContent) {
|
|
152
|
-
return levelOneContent[contentByRole] || levelOneContent.default;
|
|
153
|
-
}
|
|
154
|
-
return updatedDefaultContent[contentByRole] || updatedDefaultContent.default;
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Check if user is currently impersonating
|
|
159
|
-
* @param {string} docCookie document cookie
|
|
160
|
-
* @returns {boolean}
|
|
161
|
-
*/
|
|
162
|
-
const isImpersonating = (docCookie) => {
|
|
163
|
-
const parsedCookies = cookie.parse(docCookie);
|
|
164
|
-
return (
|
|
165
|
-
parsedCookies.qpp_can_impersonate && parsedCookies.qpp_impersonated_user
|
|
166
|
-
);
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Check if user has multiple roles, used to display Select Role dropdown
|
|
171
|
-
* @param {string} docCookie document cookie
|
|
172
|
-
* @returns {boolean}
|
|
173
|
-
*/
|
|
174
|
-
const isMultiRoleUser = (docCookie) => {
|
|
175
|
-
const activeRoles = new Set();
|
|
176
|
-
const {
|
|
177
|
-
qpp_cms_internal_authorized,
|
|
178
|
-
qpp_has_authorizations,
|
|
179
|
-
qpp_is_dev_pre,
|
|
180
|
-
} = cookie.parse(docCookie);
|
|
181
|
-
|
|
182
|
-
let internalAuthz = [];
|
|
183
|
-
|
|
184
|
-
if (qpp_cms_internal_authorized) {
|
|
185
|
-
internalAuthz = JSON.parse(qpp_cms_internal_authorized);
|
|
186
|
-
}
|
|
187
|
-
// Filter out test internalCms authz
|
|
188
|
-
const filteredInternalAuthz = internalAuthz.filter((internalAuth) => {
|
|
189
|
-
return (
|
|
190
|
-
internalAuth !== "Test internalCms Resource" &&
|
|
191
|
-
internalAuth !== "Test internalCms Resource 2"
|
|
192
|
-
);
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
filteredInternalAuthz.forEach((element) => {
|
|
196
|
-
if (isReviewerRole(element)) {
|
|
197
|
-
return activeRoles.add("reviewer");
|
|
198
|
-
}
|
|
199
|
-
if (isContentMgmtRole(element)) {
|
|
200
|
-
return activeRoles.add("content manager");
|
|
201
|
-
}
|
|
202
|
-
return activeRoles.add(element);
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
if (qpp_has_authorizations === "true") {
|
|
206
|
-
activeRoles.add("qpp user");
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
if (qpp_is_dev_pre === "true") {
|
|
210
|
-
activeRoles.clear(); // reset roles since there is no dropdown in devpre
|
|
211
|
-
activeRoles.add("devpre user");
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
return activeRoles.size > 1;
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Transform cookie values to permissions object
|
|
219
|
-
* @param {object} cookies parsed document.cookie values
|
|
220
|
-
* @returns {object}
|
|
221
|
-
*/
|
|
222
|
-
const transformCookieValues = (cookies) => {
|
|
223
|
-
const {
|
|
224
|
-
qpp_can_impersonate,
|
|
225
|
-
qpp_has_authorizations,
|
|
226
|
-
user_has_apm_payments,
|
|
227
|
-
qpp_cms_internal_authorized,
|
|
228
|
-
qpp_ehr_authorized,
|
|
229
|
-
qpp_has_non_registry_authorizations,
|
|
230
|
-
} = cookies;
|
|
231
|
-
return {
|
|
232
|
-
canImpersonate: qpp_can_impersonate === "true",
|
|
233
|
-
hasAuthorizations: qpp_has_authorizations === "true",
|
|
234
|
-
hasApmPayments: user_has_apm_payments === "true",
|
|
235
|
-
internalReviewerNames: qpp_cms_internal_authorized
|
|
236
|
-
? JSON.parse(qpp_cms_internal_authorized)
|
|
237
|
-
: [],
|
|
238
|
-
ehrAuthorized: qpp_ehr_authorized === "true",
|
|
239
|
-
hasNonRegistryAuthorizations:
|
|
240
|
-
qpp_has_non_registry_authorizations === "true",
|
|
241
|
-
};
|
|
242
|
-
};
|
|
243
|
-
|
|
244
|
-
const permissionsByRole = {
|
|
245
|
-
"QPP User": {
|
|
246
|
-
canImpersonate: false,
|
|
247
|
-
hasAuthorizations: true,
|
|
248
|
-
hasApmPayments: true,
|
|
249
|
-
},
|
|
250
|
-
Reviewer: {
|
|
251
|
-
hasAuthorizations: false,
|
|
252
|
-
hasApmPaymentss: false,
|
|
253
|
-
},
|
|
254
|
-
"Helpdesk Viewer": {
|
|
255
|
-
hasAuthorizations: false,
|
|
256
|
-
hasApmPayments: false,
|
|
257
|
-
hasNonRegistryAuthorizations: false,
|
|
258
|
-
internalReviewerNames: ["QPP Helpdesk"],
|
|
259
|
-
},
|
|
260
|
-
// Helpdesk role && impersonating (use impersonated user authz values)
|
|
261
|
-
Impersonation: {
|
|
262
|
-
internalReviewerNames: ["QPP Helpdesk"],
|
|
263
|
-
},
|
|
264
|
-
"Content Manager": {
|
|
265
|
-
hasAuthorizations: false,
|
|
266
|
-
hasApmPaymentss: false,
|
|
267
|
-
hasNonRegistryAuthorizations: false,
|
|
268
|
-
},
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
/**
|
|
272
|
-
* Return permissions by role
|
|
273
|
-
* @param {string} selectedRole selected user role
|
|
274
|
-
* @param {object} permissionValues default permission values from transformed parsed cookie
|
|
275
|
-
* @returns {object}
|
|
276
|
-
*/
|
|
277
|
-
const loadUserPermissionsByRole = (selectedRole, permissionValues) => {
|
|
278
|
-
return {
|
|
279
|
-
...permissionValues,
|
|
280
|
-
...permissionsByRole[selectedRole],
|
|
281
|
-
};
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
/**
|
|
285
|
-
* Helper fn to return user permissions/properties from cookies set on login
|
|
286
|
-
* @param {string} docCookie cookie values set on login
|
|
287
|
-
* @param {string} selectedRole string of selected role if user has multiple roles
|
|
288
|
-
* @returns {object}
|
|
289
|
-
*/
|
|
290
|
-
const loadUserPermissions = (docCookie, selectedRole) => {
|
|
291
|
-
const parsedCookies = cookie.parse(docCookie);
|
|
292
|
-
const permissionValues = transformCookieValues(parsedCookies);
|
|
293
|
-
const impersonating = isImpersonating(docCookie);
|
|
294
|
-
const role = impersonating ? "Impersonation" : selectedRole;
|
|
295
|
-
|
|
296
|
-
if (role) {
|
|
297
|
-
return loadUserPermissionsByRole(role, permissionValues);
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
return permissionValues;
|
|
301
|
-
};
|
|
302
|
-
|
|
303
|
-
/**
|
|
304
|
-
* Return map of link conditionals based on user cookies for side nav
|
|
305
|
-
* @param {object} userPermissions user permissions/properties derived from cookies set on login
|
|
306
|
-
* @returns {object}
|
|
307
|
-
*/
|
|
308
|
-
const getUrlConditionMap = (userPermissions) => {
|
|
309
|
-
return {
|
|
310
|
-
[dashboardUrl]: userPermissions.hasAuthorizations,
|
|
311
|
-
[feedbackUrl]: userPermissions.hasAuthorizations,
|
|
312
|
-
"/user/apm-incentive-payments": userPermissions.hasApmPayments,
|
|
313
|
-
[physicianCompareUrl]: userPermissions.hasNonRegistryAuthorizations,
|
|
314
|
-
[registrationUrl]: userPermissions.hasAuthorizations,
|
|
315
|
-
[reportsPortalUrl]: userPermissions.hasAuthorizations,
|
|
316
|
-
[facilityBasedPreviewBaseUrl]: userPermissions.hasAuthorizations,
|
|
317
|
-
"/user/helpdesk-viewing-tool": userPermissions.canImpersonate,
|
|
318
|
-
"/reviewer/exception": userPermissions.internalReviewerNames?.includes(
|
|
319
|
-
"QPP Targeted Review & Exceptions",
|
|
320
|
-
),
|
|
321
|
-
"/reviewer/targeted-review":
|
|
322
|
-
userPermissions.internalReviewerNames?.includes(
|
|
323
|
-
"QPP Targeted Review & Exceptions",
|
|
324
|
-
),
|
|
325
|
-
"/self-nomination": userPermissions.internalReviewerNames?.includes(
|
|
326
|
-
"QPP Self-Nomination",
|
|
327
|
-
),
|
|
328
|
-
|
|
329
|
-
"/case-management": userPermissions.internalReviewerNames?.some((val) =>
|
|
330
|
-
[
|
|
331
|
-
"QPP Case Management - PIMMS Reviewer",
|
|
332
|
-
"QPP Case Management - ACO PAC Reviewer",
|
|
333
|
-
"QPP Case Management - CMS Reviewer",
|
|
334
|
-
].includes(val),
|
|
335
|
-
),
|
|
336
|
-
|
|
337
|
-
// dev pre
|
|
338
|
-
"/user/applications": userPermissions.ehrAuthorized,
|
|
339
|
-
"/user/test-data": userPermissions.ehrAuthorized,
|
|
340
|
-
};
|
|
341
|
-
};
|
|
342
|
-
|
|
343
|
-
const isImpersonationLink = (docCookie, linkLabel) => {
|
|
344
|
-
if (!isImpersonating(docCookie)) return;
|
|
345
|
-
const helpdeskLinks = ["Account Home", "Manage Access", "Help and Support"];
|
|
346
|
-
return !helpdeskLinks.includes(linkLabel);
|
|
347
|
-
};
|
|
348
|
-
|
|
349
20
|
/**
|
|
350
21
|
* Sets the qpp_side_nav_expanded cookie value
|
|
351
22
|
* @param {Document} document object
|
|
@@ -374,26 +45,4 @@ const isSideNavExpanded = (_document) => {
|
|
|
374
45
|
return parsedCookies.qpp_side_nav_expanded === "true";
|
|
375
46
|
};
|
|
376
47
|
|
|
377
|
-
|
|
378
|
-
submissionsUrl,
|
|
379
|
-
dashboardUrl,
|
|
380
|
-
feedbackUrl,
|
|
381
|
-
manageUrl,
|
|
382
|
-
physicianCompareUrl,
|
|
383
|
-
registrationUrl,
|
|
384
|
-
performanceFeedbackUrl,
|
|
385
|
-
facilityBasedPreviewUrl,
|
|
386
|
-
handleNavigation,
|
|
387
|
-
reportsPortalUrl,
|
|
388
|
-
facilityBasedPreviewBaseUrl,
|
|
389
|
-
viewingToolUrl,
|
|
390
|
-
loadUserPermissions,
|
|
391
|
-
getUrlConditionMap,
|
|
392
|
-
isMultiRoleUser,
|
|
393
|
-
getIcon,
|
|
394
|
-
isImpersonating,
|
|
395
|
-
isImpersonationLink,
|
|
396
|
-
loadSideNavContent,
|
|
397
|
-
setSideNavExpanded,
|
|
398
|
-
isSideNavExpanded,
|
|
399
|
-
};
|
|
48
|
+
export { handleNavigation, setSideNavExpanded, isSideNavExpanded };
|