qpp-style 9.34.6 → 9.35.0-beta.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/Footer/FooterUI.jsx +1 -1
- package/components/Header/HeaderContainer.jsx +16 -5
- package/components/Header/HeaderLogo.jsx +9 -7
- package/components/Header/HeaderMenuItem.jsx +1 -1
- package/components/Header/HeaderMenuLink.js +1 -1
- package/components/Header/HeaderUI.jsx +16 -13
- package/components/Header/ImpersonatorBanner.jsx +1 -1
- package/components/HeaderSearchBar/index.jsx +80 -0
- package/components/Infotip/Infotip.jsx +1 -1
- package/components/Infotip/InfotipContent.jsx +3 -1
- package/components/Session/Session.jsx +37 -47
- package/components/SideNav/Content/LevelOneContent.jsx +13 -3
- package/components/SideNav/Content/SelectRole/index.js +7 -15
- package/components/SideNav/Content/SelectRole/utils.js +0 -7
- package/components/SideNav/Links/NavLinkDrawer.jsx +1 -0
- package/components/SideNav/Links/NavLinkInline.jsx +1 -0
- package/components/SideNav/helpers.js +1 -352
- package/coverage/clover.xml +1304 -0
- package/coverage/coverage-final.json +72 -0
- package/coverage/lcov-report/Infotip.jsx.html +298 -0
- package/coverage/lcov-report/InfotipContent.jsx.html +223 -0
- package/coverage/lcov-report/InfotipIcon.jsx.html +208 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/components/Accordion/index.html +116 -0
- package/coverage/lcov-report/components/Accordion/index.jsx.html +376 -0
- package/coverage/lcov-report/components/Button/index.html +116 -0
- package/coverage/lcov-report/components/Button/index.js.html +355 -0
- package/coverage/lcov-report/components/Error/Collapsible.jsx.html +349 -0
- package/coverage/lcov-report/components/Error/ErrorUI.jsx.html +178 -0
- package/coverage/lcov-report/components/Error/index.html +131 -0
- package/coverage/lcov-report/components/Footer/FooterUI.jsx.html +718 -0
- package/coverage/lcov-report/components/Footer/SocialLinks.jsx.html +265 -0
- package/coverage/lcov-report/components/Footer/Subscribe.jsx.html +187 -0
- package/coverage/lcov-report/components/Footer/index.html +146 -0
- package/coverage/lcov-report/components/GovBanner/index.html +116 -0
- package/coverage/lcov-report/components/GovBanner/index.js.html +436 -0
- package/coverage/lcov-report/components/Header/HeaderAccountMenu.jsx.html +367 -0
- package/coverage/lcov-report/components/Header/HeaderCancel.jsx.html +133 -0
- package/coverage/lcov-report/components/Header/HeaderContainer.jsx.html +307 -0
- package/coverage/lcov-report/components/Header/HeaderLogo.jsx.html +211 -0
- package/coverage/lcov-report/components/Header/HeaderMenuButton.js.html +235 -0
- package/coverage/lcov-report/components/Header/HeaderMenuItem.jsx.html +802 -0
- package/coverage/lcov-report/components/Header/HeaderMenuLink.js.html +253 -0
- package/coverage/lcov-report/components/Header/HeaderMenuSignOutButton.js.html +271 -0
- package/coverage/lcov-report/components/Header/HeaderMobileButton.js.html +196 -0
- package/coverage/lcov-report/components/Header/HeaderUI.jsx.html +586 -0
- package/coverage/lcov-report/components/Header/HelpIcon.jsx.html +181 -0
- package/coverage/lcov-report/components/Header/ImpersonatorBanner.jsx.html +328 -0
- package/coverage/lcov-report/components/Header/NavigationButtonIcon.jsx.html +166 -0
- package/coverage/lcov-report/components/Header/hooks.js.html +283 -0
- package/coverage/lcov-report/components/Header/index.html +326 -0
- package/coverage/lcov-report/components/Header/utag-helpers.js.html +112 -0
- package/coverage/lcov-report/components/Infotip/Infotip.jsx.html +298 -0
- package/coverage/lcov-report/components/Infotip/InfotipContent.jsx.html +223 -0
- package/coverage/lcov-report/components/Infotip/InfotipIcon.jsx.html +208 -0
- package/coverage/lcov-report/components/Infotip/index.html +146 -0
- package/coverage/lcov-report/components/Infotip/index.js.html +94 -0
- package/coverage/lcov-report/components/Modal/LegacyModal.jsx.html +301 -0
- package/coverage/lcov-report/components/Modal/Modal.jsx.html +505 -0
- package/coverage/lcov-report/components/Modal/index.html +146 -0
- package/coverage/lcov-report/components/Modal/index.jsx.html +151 -0
- package/coverage/lcov-report/components/NotificationBanner/CollapsedView.js.html +202 -0
- package/coverage/lcov-report/components/NotificationBanner/ExpandedView.js.html +220 -0
- package/coverage/lcov-report/components/NotificationBanner/index.html +146 -0
- package/coverage/lcov-report/components/NotificationBanner/index.js.html +748 -0
- package/coverage/lcov-report/components/SanitizedContent/index.html +116 -0
- package/coverage/lcov-report/components/SanitizedContent/index.jsx.html +754 -0
- package/coverage/lcov-report/components/SessionDialogUI.jsx.html +868 -0
- 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 +116 -0
- package/coverage/lcov-report/components/SideNav/Content/SelectRole/utils.js.html +532 -0
- package/coverage/lcov-report/components/SideNav/helpers.js.html +1309 -0
- package/coverage/lcov-report/components/SideNav/index.html +116 -0
- package/coverage/lcov-report/components/Tooltip/Tooltip.jsx.html +349 -0
- package/coverage/lcov-report/components/Tooltip/index.html +146 -0
- package/coverage/lcov-report/components/Tooltip/index.js.html +94 -0
- package/coverage/lcov-report/components/Tooltip/position.js.html +289 -0
- package/coverage/lcov-report/components/hooks/index.html +116 -0
- package/coverage/lcov-report/components/hooks/useGetConfig.js.html +310 -0
- package/coverage/lcov-report/components/index.html +116 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +461 -0
- package/coverage/lcov-report/index.js.html +94 -0
- package/coverage/lcov-report/lib/Chevron.jsx.html +181 -0
- package/coverage/lcov-report/lib/SvgComponents.jsx.html +2200 -0
- package/coverage/lcov-report/lib/index.html +131 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/react/components/Accordion/index.html +116 -0
- package/coverage/lcov-report/react/components/Accordion/index.jsx.html +376 -0
- package/coverage/lcov-report/react/components/Button/index.html +116 -0
- package/coverage/lcov-report/react/components/Button/index.js.html +355 -0
- package/coverage/lcov-report/react/components/Dropdown/index.html +116 -0
- package/coverage/lcov-report/react/components/Dropdown/index.js.html +340 -0
- package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +349 -0
- package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +178 -0
- package/coverage/lcov-report/react/components/Error/error.js.html +163 -0
- package/coverage/lcov-report/react/components/Error/index.html +146 -0
- package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +718 -0
- package/coverage/lcov-report/react/components/Footer/LegacyFooterUI.jsx.html +667 -0
- package/coverage/lcov-report/react/components/Footer/SocialLinks.jsx.html +265 -0
- package/coverage/lcov-report/react/components/Footer/Subscribe.jsx.html +187 -0
- package/coverage/lcov-report/react/components/Footer/footer.js.html +145 -0
- package/coverage/lcov-report/react/components/Footer/index.html +161 -0
- package/coverage/lcov-report/react/components/GovBanner/index.html +116 -0
- package/coverage/lcov-report/react/components/GovBanner/index.js.html +436 -0
- package/coverage/lcov-report/react/components/Header/HeaderAccountMenu.jsx.html +367 -0
- package/coverage/lcov-report/react/components/Header/HeaderCancel.jsx.html +133 -0
- package/coverage/lcov-report/react/components/Header/HeaderContainer.jsx.html +346 -0
- package/coverage/lcov-report/react/components/Header/HeaderLogo.jsx.html +271 -0
- package/coverage/lcov-report/react/components/Header/HeaderMenuButton.js.html +235 -0
- package/coverage/lcov-report/react/components/Header/HeaderMenuItem.jsx.html +802 -0
- package/coverage/lcov-report/react/components/Header/HeaderMenuLink.js.html +253 -0
- package/coverage/lcov-report/react/components/Header/HeaderMenuSignOutButton.js.html +271 -0
- package/coverage/lcov-report/react/components/Header/HeaderMobileButton.js.html +196 -0
- package/coverage/lcov-report/react/components/Header/HeaderUI.jsx.html +598 -0
- package/coverage/lcov-report/react/components/Header/HelpIcon.jsx.html +181 -0
- package/coverage/lcov-report/react/components/Header/ImpersonatorBanner.jsx.html +346 -0
- package/coverage/lcov-report/react/components/Header/NavigationButtonIcon.jsx.html +166 -0
- package/coverage/lcov-report/react/components/Header/header.js.html +205 -0
- package/coverage/lcov-report/react/components/Header/hooks.js.html +283 -0
- package/coverage/lcov-report/react/components/Header/index.html +341 -0
- package/coverage/lcov-report/react/components/Header/utag-helpers.js.html +112 -0
- 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 +298 -0
- package/coverage/lcov-report/react/components/Infotip/InfotipContent.jsx.html +229 -0
- package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +208 -0
- package/coverage/lcov-report/react/components/Infotip/index.html +161 -0
- package/coverage/lcov-report/react/components/Infotip/index.js.html +94 -0
- package/coverage/lcov-report/react/components/Modal/LegacyModal.jsx.html +301 -0
- package/coverage/lcov-report/react/components/Modal/Modal.jsx.html +505 -0
- package/coverage/lcov-report/react/components/Modal/index.html +146 -0
- package/coverage/lcov-report/react/components/Modal/index.jsx.html +151 -0
- package/coverage/lcov-report/react/components/NotificationBanner/CollapsedView.js.html +202 -0
- package/coverage/lcov-report/react/components/NotificationBanner/ExpandedView.js.html +220 -0
- package/coverage/lcov-report/react/components/NotificationBanner/index.html +146 -0
- package/coverage/lcov-report/react/components/NotificationBanner/index.js.html +748 -0
- package/coverage/lcov-report/react/components/SanitizedContent/index.html +116 -0
- package/coverage/lcov-report/react/components/SanitizedContent/index.jsx.html +754 -0
- 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 +116 -0
- package/coverage/lcov-report/react/components/SessionDialog/sessionDialog.js.html +163 -0
- package/coverage/lcov-report/react/components/SessionDialogUI.jsx.html +808 -0
- package/coverage/lcov-report/react/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +166 -0
- package/coverage/lcov-report/react/components/SideNav/AnimationGroup/index.html +116 -0
- package/coverage/lcov-report/react/components/SideNav/Chart/ScoreChart.jsx.html +889 -0
- package/coverage/lcov-report/react/components/SideNav/Chart/index.html +131 -0
- package/coverage/lcov-report/react/components/SideNav/Chart/index.js.html +94 -0
- package/coverage/lcov-report/react/components/SideNav/Content/LevelOneContent.jsx.html +262 -0
- package/coverage/lcov-report/react/components/SideNav/Content/LevelTwoContent.jsx.html +733 -0
- package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.html +131 -0
- package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.js.html +295 -0
- package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/utils.js.html +511 -0
- package/coverage/lcov-report/react/components/SideNav/Content/index.html +131 -0
- package/coverage/lcov-report/react/components/SideNav/Content/index.js.html +94 -0
- package/coverage/lcov-report/react/components/SideNav/Details/IndividualDetails.jsx.html +139 -0
- package/coverage/lcov-report/react/components/SideNav/Details/PracticeDetails.jsx.html +238 -0
- package/coverage/lcov-report/react/components/SideNav/Details/index.html +146 -0
- package/coverage/lcov-report/react/components/SideNav/Details/index.js.html +97 -0
- package/coverage/lcov-report/react/components/SideNav/Links/CmsSwitchLink.jsx.html +208 -0
- package/coverage/lcov-report/react/components/SideNav/Links/NavItemInline.jsx.html +247 -0
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkContainer.jsx.html +199 -0
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkDrawer.jsx.html +973 -0
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkInline.jsx.html +418 -0
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkToggle.jsx.html +187 -0
- package/coverage/lcov-report/react/components/SideNav/Links/index.html +206 -0
- package/coverage/lcov-report/react/components/SideNav/Links/index.js.html +124 -0
- package/coverage/lcov-report/react/components/SideNav/UI/SideNavUI.jsx.html +1054 -0
- package/coverage/lcov-report/react/components/SideNav/UI/default-markup.js.html +97 -0
- package/coverage/lcov-report/react/components/SideNav/UI/index.html +146 -0
- package/coverage/lcov-report/react/components/SideNav/UI/index.js.html +94 -0
- package/coverage/lcov-report/react/components/SideNav/helpers.js.html +229 -0
- package/coverage/lcov-report/react/components/SideNav/index.html +131 -0
- package/coverage/lcov-report/react/components/SideNav/index.js.html +172 -0
- package/coverage/lcov-report/react/components/Tooltip/Tooltip.jsx.html +349 -0
- package/coverage/lcov-report/react/components/Tooltip/index.html +146 -0
- package/coverage/lcov-report/react/components/Tooltip/index.js.html +94 -0
- package/coverage/lcov-report/react/components/Tooltip/position.js.html +289 -0
- package/coverage/lcov-report/react/components/hooks/index.html +116 -0
- package/coverage/lcov-report/react/components/hooks/useGetConfig.js.html +307 -0
- package/coverage/lcov-report/react/components/index.html +116 -0
- package/coverage/lcov-report/react/index.html +116 -0
- package/coverage/lcov-report/react/index.js.html +178 -0
- package/coverage/lcov-report/react/lib/Chevron.jsx.html +181 -0
- package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +2200 -0
- package/coverage/lcov-report/react/lib/index.html +131 -0
- package/coverage/lcov-report/react/lib/svg-definitions.svg.html +460 -0
- package/coverage/lcov-report/react/session/index.html +176 -0
- package/coverage/lcov-report/react/session/index.js.html +100 -0
- package/coverage/lcov-report/react/session/isAuthV2.js.html +151 -0
- package/coverage/lcov-report/react/session/logout.js.html +322 -0
- package/coverage/lcov-report/react/session/refresh.js.html +241 -0
- package/coverage/lcov-report/react/session/ttl.js.html +160 -0
- package/coverage/lcov-report/session/index.html +161 -0
- package/coverage/lcov-report/session/index.js.html +100 -0
- package/coverage/lcov-report/session/logout.js.html +316 -0
- package/coverage/lcov-report/session/refresh.js.html +232 -0
- package/coverage/lcov-report/session/ttl.js.html +196 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov.info +2806 -0
- 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 +1 -1
- package/styles/_main.scss +2 -2
- package/styles/qppds/components/_header.scss +72 -50
- package/styles/qppds/components/_search.scss +60 -1
- package/styles/qppds/settings/variables/_color.module.scss +46 -0
- package/styles/qppds/settings/variables/_color.scss +0 -45
- package/styles/qppds/settings/variables/_layout.module.scss +23 -0
- package/styles/qppds/settings/variables/_layout.scss +0 -23
- package/styles/qppds/settings/variables/_type.module.scss +38 -0
- package/styles/qppds/settings/variables/_type.scss +0 -37
- package/styles/qppds/settings/variables/_z-index.module.scss +8 -0
- package/styles/qppds/settings/variables/_z-index.scss +0 -5
|
@@ -8,7 +8,6 @@ import { OpenInNewIcon } from "../../lib/SvgComponents";
|
|
|
8
8
|
const infoTipLabel =
|
|
9
9
|
"When dialing 711, you will automatically be connected to a TRS Communications Assistant who will relay your conversation to the help desk agent with strict confidentiality.";
|
|
10
10
|
const { version: buildVersion } = pjson;
|
|
11
|
-
|
|
12
11
|
const FooterUI = () => (
|
|
13
12
|
<>
|
|
14
13
|
<div className="feedback-session-sign-up">
|
|
@@ -98,6 +97,7 @@ const FooterUI = () => (
|
|
|
98
97
|
1-866-288-8292 (TRS: 711)
|
|
99
98
|
<span className="footer-trs-infotip">
|
|
100
99
|
<InfoTip
|
|
100
|
+
aria-labelledby="footer-trs-infotip"
|
|
101
101
|
ariaLabel="TRS Communications Assistant Information"
|
|
102
102
|
label={infoTipLabel}
|
|
103
103
|
/>
|
|
@@ -4,7 +4,8 @@ import PropTypes from "prop-types";
|
|
|
4
4
|
import HeaderLogo from "./HeaderLogo";
|
|
5
5
|
import NotificationBanner from "../NotificationBanner";
|
|
6
6
|
import GovBanner from "../GovBanner";
|
|
7
|
-
import { useHeaderState } from "./hooks";
|
|
7
|
+
import { useHeaderState, useWindowWidth } from "./hooks";
|
|
8
|
+
import HeaderSearchBar from "../HeaderSearchBar";
|
|
8
9
|
/**
|
|
9
10
|
* Accessibility enhancement that moves focus to an element for "Skip" links
|
|
10
11
|
* @param {Object} e - The native JS event
|
|
@@ -22,13 +23,18 @@ const HeaderContainer = ({
|
|
|
22
23
|
skipToContentId,
|
|
23
24
|
isIESupportPage,
|
|
24
25
|
isDevPre,
|
|
26
|
+
showSearchBar,
|
|
25
27
|
}) => {
|
|
28
|
+
const windowWidth = useWindowWidth();
|
|
26
29
|
const { currentOpenMenu } = useHeaderState();
|
|
27
|
-
const
|
|
30
|
+
const showSearch = showSearchBar === "true";
|
|
31
|
+
const cssCancelBtn = showCancelButton ? "show-cancel-button " : "";
|
|
28
32
|
const cssMenuDropdownStatus =
|
|
29
33
|
currentOpenMenu === ""
|
|
30
34
|
? "header-dropdown--closed"
|
|
31
35
|
: "header-dropdown--open";
|
|
36
|
+
const cssSearchBar = showSearch ? " header-height" : "";
|
|
37
|
+
const headerClasses = `${cssCancelBtn}${cssMenuDropdownStatus}${cssSearchBar}`;
|
|
32
38
|
|
|
33
39
|
return (
|
|
34
40
|
<>
|
|
@@ -50,9 +56,12 @@ const HeaderContainer = ({
|
|
|
50
56
|
)}
|
|
51
57
|
<GovBanner />
|
|
52
58
|
{!isIESupportPage && <NotificationBanner />}
|
|
53
|
-
<header id="top" className={
|
|
54
|
-
<
|
|
55
|
-
|
|
59
|
+
<header id="top" className={headerClasses}>
|
|
60
|
+
{showSearch && windowWidth > 767 ? <HeaderSearchBar /> : null}
|
|
61
|
+
<>
|
|
62
|
+
<HeaderLogo isDevPre={isDevPre} hasSearchBar={showSearch} />
|
|
63
|
+
{children}
|
|
64
|
+
</>
|
|
56
65
|
</header>
|
|
57
66
|
</>
|
|
58
67
|
);
|
|
@@ -65,12 +74,14 @@ HeaderContainer.propTypes = {
|
|
|
65
74
|
skipToContentId: PropTypes.string,
|
|
66
75
|
isIESupportPage: PropTypes.bool,
|
|
67
76
|
isDevPre: PropTypes.object,
|
|
77
|
+
showSearchBar: PropTypes.bool,
|
|
68
78
|
};
|
|
69
79
|
HeaderContainer.defaultProps = {
|
|
70
80
|
includeSkipToSidebar: false,
|
|
71
81
|
showCancelButton: false,
|
|
72
82
|
skipToContentId: null,
|
|
73
83
|
isIESupportPage: false,
|
|
84
|
+
showSearchBar: false,
|
|
74
85
|
};
|
|
75
86
|
|
|
76
87
|
export default HeaderContainer;
|
|
@@ -3,12 +3,13 @@ import PropTypes from "prop-types";
|
|
|
3
3
|
|
|
4
4
|
import { useHeaderState } from "./hooks";
|
|
5
5
|
|
|
6
|
-
const HeaderLogo = (isDevPre) => {
|
|
6
|
+
const HeaderLogo = ({ isDevPre, hasSearchBar }) => {
|
|
7
7
|
const { closeMenus, RouterLink } = useHeaderState();
|
|
8
|
-
const
|
|
9
|
-
|
|
8
|
+
const searchHeaderClass = hasSearchBar ? " header-logo-search" : "";
|
|
9
|
+
const headerLogoClass = `header-logo${searchHeaderClass}`;
|
|
10
|
+
if (isDevPre) {
|
|
10
11
|
return (
|
|
11
|
-
<div className=
|
|
12
|
+
<div className={headerLogoClass}>
|
|
12
13
|
<img
|
|
13
14
|
className="qpp-logo"
|
|
14
15
|
src="/images/qpp_logo_rgb_color.png"
|
|
@@ -20,7 +21,7 @@ const HeaderLogo = (isDevPre) => {
|
|
|
20
21
|
if (RouterLink) {
|
|
21
22
|
return (
|
|
22
23
|
<RouterLink
|
|
23
|
-
className=
|
|
24
|
+
className={headerLogoClass}
|
|
24
25
|
to="/"
|
|
25
26
|
onClick={closeMenus}
|
|
26
27
|
data-track-category="HeaderNav"
|
|
@@ -38,7 +39,7 @@ const HeaderLogo = (isDevPre) => {
|
|
|
38
39
|
|
|
39
40
|
return (
|
|
40
41
|
<a
|
|
41
|
-
className=
|
|
42
|
+
className={headerLogoClass}
|
|
42
43
|
href="/"
|
|
43
44
|
data-track-category="HeaderNav"
|
|
44
45
|
data-track-action="OpenQPPHome"
|
|
@@ -54,7 +55,8 @@ const HeaderLogo = (isDevPre) => {
|
|
|
54
55
|
};
|
|
55
56
|
|
|
56
57
|
HeaderLogo.propTypes = {
|
|
57
|
-
isDevPre: PropTypes.
|
|
58
|
+
isDevPre: PropTypes.bool,
|
|
59
|
+
hasSearchBar: PropTypes.bool,
|
|
58
60
|
};
|
|
59
61
|
|
|
60
62
|
export default HeaderLogo;
|
|
@@ -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
|
|
|
@@ -6,8 +6,9 @@ import HeaderContainer from "./HeaderContainer";
|
|
|
6
6
|
import HeaderMenuItem from "./HeaderMenuItem";
|
|
7
7
|
import HeaderMobileButton from "./HeaderMobileButton";
|
|
8
8
|
import ImpersonatorBanner from "./ImpersonatorBanner";
|
|
9
|
+
import HeaderSearchBar from "../HeaderSearchBar";
|
|
9
10
|
import HelpIcon from "./HelpIcon";
|
|
10
|
-
import { HeaderStateProvider } from "./hooks";
|
|
11
|
+
import { HeaderStateProvider, useWindowWidth } from "./hooks";
|
|
11
12
|
import defaultContent from "./default-content.json";
|
|
12
13
|
|
|
13
14
|
const HeaderUI = ({
|
|
@@ -22,6 +23,7 @@ const HeaderUI = ({
|
|
|
22
23
|
}) => {
|
|
23
24
|
const [isMobileMenuExpanded, setIsMobileMenuExpanded] = useState(false);
|
|
24
25
|
const [headerContent, setHeaderContent] = useState({});
|
|
26
|
+
const windowWidth = useWindowWidth();
|
|
25
27
|
|
|
26
28
|
const mapContentToRows = (config) => {
|
|
27
29
|
// Append transposed array to content
|
|
@@ -63,22 +65,22 @@ const HeaderUI = ({
|
|
|
63
65
|
}, []);
|
|
64
66
|
|
|
65
67
|
const content = mapContentToRows(headerContent?.content);
|
|
68
|
+
const sharedHeaderProps = {
|
|
69
|
+
skipToContentId,
|
|
70
|
+
includeSkipToSidebar,
|
|
71
|
+
showSearchBar: headerContent.showSearchBar,
|
|
72
|
+
};
|
|
66
73
|
|
|
67
74
|
const displayCancelContent = () => (
|
|
68
|
-
<HeaderContainer
|
|
69
|
-
showCancelButton
|
|
70
|
-
skipToContentId={skipToContentId}
|
|
71
|
-
includeSkipToSidebar={includeSkipToSidebar}
|
|
72
|
-
>
|
|
75
|
+
<HeaderContainer {...sharedHeaderProps} showCancelButton>
|
|
73
76
|
<HeaderCancel handleCancel={handleCancel} />
|
|
74
77
|
</HeaderContainer>
|
|
75
78
|
);
|
|
76
79
|
|
|
77
80
|
const displayDevPreContent = () => (
|
|
78
81
|
<HeaderContainer
|
|
82
|
+
{...sharedHeaderProps}
|
|
79
83
|
isIESupportPage={isIESupportPage}
|
|
80
|
-
skipToContentId={skipToContentId}
|
|
81
|
-
includeSkipToSidebar={includeSkipToSidebar}
|
|
82
84
|
isDevPre={isDevPre}
|
|
83
85
|
>
|
|
84
86
|
<nav aria-label="Primary navigation" hidden={!isMobileMenuExpanded}>
|
|
@@ -91,12 +93,13 @@ const HeaderUI = ({
|
|
|
91
93
|
|
|
92
94
|
const displayHeaderContent = () => (
|
|
93
95
|
<>
|
|
94
|
-
<HeaderContainer
|
|
95
|
-
isIESupportPage={isIESupportPage}
|
|
96
|
-
skipToContentId={skipToContentId}
|
|
97
|
-
includeSkipToSidebar={includeSkipToSidebar}
|
|
98
|
-
>
|
|
96
|
+
<HeaderContainer {...sharedHeaderProps} isIESupportPage={isIESupportPage}>
|
|
99
97
|
<HelpIcon />
|
|
98
|
+
{headerContent.showSearchBar === "true" && windowWidth < 768 ? (
|
|
99
|
+
<div style={{ width: "100%" }}>
|
|
100
|
+
<HeaderSearchBar />
|
|
101
|
+
</div>
|
|
102
|
+
) : null}
|
|
100
103
|
<HeaderMobileButton
|
|
101
104
|
handleClick={() => setIsMobileMenuExpanded(!isMobileMenuExpanded)}
|
|
102
105
|
isMobileMenuExpanded={isMobileMenuExpanded}
|
|
@@ -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",
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
const HeaderSearchBar = () => {
|
|
4
|
+
return (
|
|
5
|
+
<div className="qpp-c-search--header-container">
|
|
6
|
+
<div className="qpp-c-search--header-container__block">
|
|
7
|
+
<div className="qpp-c-search--header-container__title">
|
|
8
|
+
Search (beta)
|
|
9
|
+
</div>
|
|
10
|
+
<form
|
|
11
|
+
id="search_form"
|
|
12
|
+
acceptCharset="UTF-8"
|
|
13
|
+
action="https://search.usa.gov/search"
|
|
14
|
+
aria-labelledby="site-search-label"
|
|
15
|
+
role="search"
|
|
16
|
+
method="get"
|
|
17
|
+
className="qpp-c-search qpp-c-search--global qpp-u-width--100"
|
|
18
|
+
>
|
|
19
|
+
<div
|
|
20
|
+
style={{
|
|
21
|
+
margin: "0px",
|
|
22
|
+
padding: "0px",
|
|
23
|
+
display: "inline",
|
|
24
|
+
}}
|
|
25
|
+
>
|
|
26
|
+
<input name="utf8" type="hidden" value="✓" />
|
|
27
|
+
</div>
|
|
28
|
+
<input id="affiliate" name="affiliate" type="hidden" value="qpp" />
|
|
29
|
+
<label
|
|
30
|
+
id="site-search-label"
|
|
31
|
+
className="qpp-u-visually-hidden"
|
|
32
|
+
htmlFor="query"
|
|
33
|
+
>
|
|
34
|
+
Site Search
|
|
35
|
+
</label>
|
|
36
|
+
<div className="qpp-u-width--100 qpp-u-display--flex">
|
|
37
|
+
<div className="qpp-c-search__wrap">
|
|
38
|
+
<input
|
|
39
|
+
autoComplete="off"
|
|
40
|
+
className="qpp-c-text-input"
|
|
41
|
+
id="query"
|
|
42
|
+
name="query"
|
|
43
|
+
type="text"
|
|
44
|
+
/>
|
|
45
|
+
</div>
|
|
46
|
+
<button
|
|
47
|
+
name="commit"
|
|
48
|
+
id="global-search"
|
|
49
|
+
type="submit"
|
|
50
|
+
className="qpp-c-search__submit qpp-c-button qpp-c-button--secondary"
|
|
51
|
+
>
|
|
52
|
+
<span className="qpp-u-visually-hidden">Search</span>
|
|
53
|
+
<svg
|
|
54
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
55
|
+
viewBox="0 0 24 24"
|
|
56
|
+
className="qpp-icon-mat qpp-icon-inline--lg"
|
|
57
|
+
aria-hidden="true"
|
|
58
|
+
focusable="false"
|
|
59
|
+
>
|
|
60
|
+
<path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" />
|
|
61
|
+
</svg>
|
|
62
|
+
</button>
|
|
63
|
+
</div>
|
|
64
|
+
</form>
|
|
65
|
+
</div>
|
|
66
|
+
<div>
|
|
67
|
+
<a
|
|
68
|
+
className="survey-link"
|
|
69
|
+
href="https://agilesix.qualtrics.com/jfe/form/SV_e3Esl9l6dXWLnwy"
|
|
70
|
+
rel="noreferrer"
|
|
71
|
+
target="_blank"
|
|
72
|
+
>
|
|
73
|
+
Give feedback about the Search experience
|
|
74
|
+
</a>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
);
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export default HeaderSearchBar;
|
|
@@ -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;
|
|
@@ -11,45 +11,9 @@ const MINUTE = 60 * SECOND;
|
|
|
11
11
|
const TWO_MINUTES = 2 * MINUTE;
|
|
12
12
|
const DEFAULT_SESSION_CHECK_INTERVAL = TWO_MINUTES;
|
|
13
13
|
|
|
14
|
-
// This Dialog shows up 2 minutes before the user session ends
|
|
15
|
-
// giving the user an opportunity to refresh the token
|
|
16
|
-
// or to sign out
|
|
17
|
-
const InactiveDialog = () => {
|
|
18
|
-
const [isOpen, setIsOpen] = useState(true);
|
|
19
|
-
|
|
20
|
-
useEffect(() => {
|
|
21
|
-
const timeout = setTimeout(() => logoutSession(window), TWO_MINUTES);
|
|
22
|
-
return () => clearInterval(timeout);
|
|
23
|
-
}, []);
|
|
24
|
-
|
|
25
|
-
return (
|
|
26
|
-
<Modal
|
|
27
|
-
useDesignSystem
|
|
28
|
-
title="You will be signed out within two minutes"
|
|
29
|
-
isOpen={isOpen}
|
|
30
|
-
primary={{
|
|
31
|
-
title: "Keep me signed in",
|
|
32
|
-
onClick: () => {
|
|
33
|
-
refreshSession();
|
|
34
|
-
setIsOpen(false);
|
|
35
|
-
},
|
|
36
|
-
}}
|
|
37
|
-
secondary={{
|
|
38
|
-
title: "Sign me out now",
|
|
39
|
-
onClick: () => logoutSession(window),
|
|
40
|
-
}}
|
|
41
|
-
onRequestClose={() => setIsOpen(false)}
|
|
42
|
-
>
|
|
43
|
-
<p>
|
|
44
|
-
You have been inactive for thirty minutes. For your security, we will
|
|
45
|
-
sign you out automatically.
|
|
46
|
-
</p>
|
|
47
|
-
</Modal>
|
|
48
|
-
);
|
|
49
|
-
};
|
|
50
|
-
|
|
51
14
|
// 120 seconds is 2 minutes
|
|
52
15
|
const DEFAULT_WARNING_TIMEOUT_SECONDS = 120;
|
|
16
|
+
|
|
53
17
|
function shouldShowInactiveDialog(
|
|
54
18
|
timeRemainingSeconds,
|
|
55
19
|
warningTimeoutSeconds = DEFAULT_WARNING_TIMEOUT_SECONDS,
|
|
@@ -58,18 +22,20 @@ function shouldShowInactiveDialog(
|
|
|
58
22
|
}
|
|
59
23
|
|
|
60
24
|
const Session = () => {
|
|
61
|
-
const [
|
|
25
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
26
|
+
|
|
27
|
+
let ttlInterval;
|
|
62
28
|
|
|
63
29
|
useEffect(() => {
|
|
64
30
|
let didCancel = false;
|
|
65
31
|
const cookies = cookie.parse(document.cookie);
|
|
66
32
|
const hasAuthToken = !!cookies.qpp_auth_token;
|
|
33
|
+
|
|
67
34
|
async function isSessionValid() {
|
|
68
35
|
if (hasAuthToken) {
|
|
69
36
|
const timeRemaining = await fetchTtl(cookies.qpp_auth_token);
|
|
70
37
|
// safeguard against unmounted component
|
|
71
38
|
if (didCancel) return;
|
|
72
|
-
|
|
73
39
|
// token expired
|
|
74
40
|
if (timeRemaining === 0) {
|
|
75
41
|
logoutSession(window);
|
|
@@ -77,23 +43,47 @@ const Session = () => {
|
|
|
77
43
|
}
|
|
78
44
|
// token is about to expire
|
|
79
45
|
if (shouldShowInactiveDialog(timeRemaining)) {
|
|
80
|
-
|
|
46
|
+
setIsOpen(true);
|
|
81
47
|
}
|
|
82
48
|
}
|
|
83
49
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
isSessionValid,
|
|
87
|
-
DEFAULT_SESSION_CHECK_INTERVAL,
|
|
88
|
-
);
|
|
50
|
+
|
|
51
|
+
ttlInterval = setInterval(isSessionValid, DEFAULT_SESSION_CHECK_INTERVAL);
|
|
89
52
|
|
|
90
53
|
return () => {
|
|
91
|
-
clearInterval(
|
|
54
|
+
clearInterval(ttlInterval);
|
|
92
55
|
didCancel = true;
|
|
93
56
|
};
|
|
94
57
|
}, []);
|
|
95
58
|
|
|
96
|
-
|
|
59
|
+
// This Dialog shows up 2 minutes before the user session ends
|
|
60
|
+
// giving the user an opportunity to refresh the token
|
|
61
|
+
// or to sign out
|
|
62
|
+
return (
|
|
63
|
+
<Modal
|
|
64
|
+
useDesignSystem
|
|
65
|
+
title="You will be signed out within two minutes"
|
|
66
|
+
isOpen={isOpen}
|
|
67
|
+
primary={{
|
|
68
|
+
title: "Keep me signed in",
|
|
69
|
+
onClick: () => {
|
|
70
|
+
refreshSession();
|
|
71
|
+
clearInterval(ttlInterval);
|
|
72
|
+
setIsOpen(false);
|
|
73
|
+
},
|
|
74
|
+
}}
|
|
75
|
+
secondary={{
|
|
76
|
+
title: "Sign me out now",
|
|
77
|
+
onClick: () => logoutSession(window),
|
|
78
|
+
}}
|
|
79
|
+
onRequestClose={() => setIsOpen(false)}
|
|
80
|
+
>
|
|
81
|
+
<p>
|
|
82
|
+
You have been inactive for thirty minutes. For your security, we will
|
|
83
|
+
sign you out automatically.
|
|
84
|
+
</p>
|
|
85
|
+
</Modal>
|
|
86
|
+
);
|
|
97
87
|
};
|
|
98
88
|
|
|
99
89
|
export default Session;
|
|
@@ -4,11 +4,20 @@ import cookie from "cookie";
|
|
|
4
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
|