qpp-style 9.34.7-beta.0 → 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.
Files changed (228) hide show
  1. package/components/Footer/FooterUI.jsx +0 -1
  2. package/components/Header/HeaderContainer.jsx +16 -5
  3. package/components/Header/HeaderLogo.jsx +9 -7
  4. package/components/Header/HeaderMenuItem.jsx +1 -1
  5. package/components/Header/HeaderMenuLink.js +1 -1
  6. package/components/Header/HeaderUI.jsx +16 -13
  7. package/components/Header/ImpersonatorBanner.jsx +1 -1
  8. package/components/HeaderSearchBar/index.jsx +80 -0
  9. package/components/Session/Session.jsx +37 -47
  10. package/components/SideNav/Content/LevelOneContent.jsx +13 -3
  11. package/components/SideNav/Content/SelectRole/index.js +7 -15
  12. package/components/SideNav/Content/SelectRole/utils.js +0 -7
  13. package/components/SideNav/Links/NavLinkDrawer.jsx +1 -0
  14. package/components/SideNav/Links/NavLinkInline.jsx +1 -0
  15. package/components/SideNav/helpers.js +1 -352
  16. package/coverage/clover.xml +648 -762
  17. package/coverage/coverage-final.json +71 -69
  18. package/coverage/lcov-report/{components/SideNav/Links/NavItemInline.jsx.html → Infotip.jsx.html} +123 -72
  19. package/coverage/lcov-report/{components/SideNav/Links/CmsSwitchLink.jsx.html → InfotipContent.jsx.html} +71 -56
  20. package/coverage/lcov-report/{components/SideNav/Links/NavLinkToggle.jsx.html → InfotipIcon.jsx.html} +70 -49
  21. package/coverage/lcov-report/components/Accordion/index.html +20 -20
  22. package/coverage/lcov-report/components/Accordion/index.jsx.html +121 -109
  23. package/coverage/lcov-report/components/Button/index.html +116 -0
  24. package/coverage/lcov-report/components/Button/index.js.html +355 -0
  25. package/coverage/lcov-report/components/Error/Collapsible.jsx.html +98 -98
  26. package/coverage/lcov-report/components/Error/ErrorUI.jsx.html +33 -33
  27. package/coverage/lcov-report/components/Error/index.html +23 -23
  28. package/coverage/lcov-report/components/Footer/FooterUI.jsx.html +395 -557
  29. package/coverage/lcov-report/components/Footer/SocialLinks.jsx.html +70 -70
  30. package/coverage/lcov-report/components/Footer/Subscribe.jsx.html +44 -44
  31. package/coverage/lcov-report/components/Footer/index.html +33 -48
  32. package/coverage/lcov-report/components/GovBanner/index.html +116 -0
  33. package/coverage/lcov-report/components/GovBanner/index.js.html +436 -0
  34. package/coverage/lcov-report/components/Header/HeaderAccountMenu.jsx.html +367 -0
  35. package/coverage/lcov-report/components/{SideNav/Details/IndividualDetails.jsx.html → Header/HeaderCancel.jsx.html} +35 -41
  36. package/coverage/lcov-report/components/Header/HeaderContainer.jsx.html +307 -0
  37. package/coverage/lcov-report/components/Header/HeaderLogo.jsx.html +211 -0
  38. package/coverage/lcov-report/components/Header/HeaderMenuButton.js.html +235 -0
  39. package/coverage/lcov-report/components/Header/HeaderMenuItem.jsx.html +802 -0
  40. package/coverage/lcov-report/components/Header/HeaderMenuLink.js.html +253 -0
  41. package/coverage/lcov-report/components/Header/HeaderMenuSignOutButton.js.html +271 -0
  42. package/coverage/lcov-report/components/Header/HeaderMobileButton.js.html +196 -0
  43. package/coverage/lcov-report/components/Header/HeaderUI.jsx.html +586 -0
  44. package/coverage/lcov-report/components/Header/HelpIcon.jsx.html +181 -0
  45. package/coverage/lcov-report/components/Header/ImpersonatorBanner.jsx.html +328 -0
  46. package/coverage/lcov-report/components/Header/NavigationButtonIcon.jsx.html +166 -0
  47. package/coverage/lcov-report/components/Header/hooks.js.html +283 -0
  48. package/coverage/lcov-report/components/Header/index.html +326 -0
  49. package/coverage/lcov-report/components/Header/utag-helpers.js.html +112 -0
  50. package/coverage/lcov-report/components/Infotip/Infotip.jsx.html +96 -108
  51. package/coverage/lcov-report/components/Infotip/InfotipContent.jsx.html +223 -0
  52. package/coverage/lcov-report/components/Infotip/InfotipIcon.jsx.html +49 -49
  53. package/coverage/lcov-report/components/Infotip/index.html +32 -32
  54. package/coverage/lcov-report/components/Infotip/index.js.html +1 -1
  55. package/coverage/lcov-report/components/Modal/LegacyModal.jsx.html +116 -116
  56. package/coverage/lcov-report/components/Modal/Modal.jsx.html +252 -252
  57. package/coverage/lcov-report/components/Modal/index.html +38 -38
  58. package/coverage/lcov-report/components/Modal/index.jsx.html +31 -31
  59. package/coverage/lcov-report/components/NotificationBanner/CollapsedView.js.html +202 -0
  60. package/coverage/lcov-report/components/NotificationBanner/ExpandedView.js.html +220 -0
  61. package/coverage/lcov-report/components/{SideNav/Content → NotificationBanner}/index.html +49 -49
  62. package/coverage/lcov-report/components/NotificationBanner/index.js.html +748 -0
  63. package/coverage/lcov-report/components/SanitizedContent/index.html +19 -19
  64. package/coverage/lcov-report/components/SanitizedContent/index.jsx.html +287 -218
  65. package/coverage/lcov-report/components/SessionDialogUI.jsx.html +440 -440
  66. package/coverage/lcov-report/components/SideNav/Chart/ScoreChart.jsx.html +7 -7
  67. package/coverage/lcov-report/components/SideNav/Chart/index.html +1 -16
  68. package/coverage/lcov-report/components/SideNav/{UI → Content/SelectRole}/index.html +29 -44
  69. package/coverage/lcov-report/components/SideNav/Content/SelectRole/utils.js.html +532 -0
  70. package/coverage/lcov-report/components/SideNav/helpers.js.html +1125 -54
  71. package/coverage/lcov-report/components/SideNav/index.html +19 -19
  72. package/coverage/lcov-report/components/Tooltip/Tooltip.jsx.html +9 -9
  73. package/coverage/lcov-report/components/Tooltip/index.html +1 -1
  74. package/coverage/lcov-report/components/Tooltip/index.js.html +1 -1
  75. package/coverage/lcov-report/components/Tooltip/position.js.html +1 -1
  76. package/coverage/lcov-report/components/hooks/index.html +21 -21
  77. package/coverage/lcov-report/components/hooks/useGetConfig.js.html +131 -128
  78. package/coverage/lcov-report/components/index.html +21 -21
  79. package/coverage/lcov-report/index.html +132 -147
  80. package/coverage/lcov-report/{components/SideNav/Chart/index.js.html → index.js.html} +12 -12
  81. package/coverage/lcov-report/lib/Chevron.jsx.html +36 -36
  82. package/coverage/lcov-report/lib/SvgComponents.jsx.html +1471 -973
  83. package/coverage/lcov-report/lib/index.html +21 -36
  84. package/coverage/lcov-report/react/components/Accordion/index.html +1 -1
  85. package/coverage/lcov-report/react/components/Accordion/index.jsx.html +14 -14
  86. package/coverage/lcov-report/react/components/Button/index.html +1 -1
  87. package/coverage/lcov-report/react/components/Button/index.js.html +16 -16
  88. package/coverage/lcov-report/react/components/Dropdown/index.html +1 -1
  89. package/coverage/lcov-report/react/components/Dropdown/index.js.html +10 -10
  90. package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +4 -4
  91. package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +5 -5
  92. package/coverage/lcov-report/react/components/Error/error.js.html +5 -5
  93. package/coverage/lcov-report/react/components/Error/index.html +1 -1
  94. package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +13 -13
  95. package/coverage/lcov-report/react/components/Footer/LegacyFooterUI.jsx.html +16 -16
  96. package/coverage/lcov-report/react/components/Footer/SocialLinks.jsx.html +2 -2
  97. package/coverage/lcov-report/react/components/Footer/Subscribe.jsx.html +2 -2
  98. package/coverage/lcov-report/react/components/Footer/footer.js.html +5 -5
  99. package/coverage/lcov-report/react/components/Footer/index.html +1 -1
  100. package/coverage/lcov-report/react/components/GovBanner/index.html +1 -1
  101. package/coverage/lcov-report/react/components/GovBanner/index.js.html +3 -3
  102. package/coverage/lcov-report/react/components/Header/HeaderAccountMenu.jsx.html +10 -10
  103. package/coverage/lcov-report/react/components/Header/HeaderCancel.jsx.html +3 -3
  104. package/coverage/lcov-report/react/components/Header/HeaderContainer.jsx.html +62 -23
  105. package/coverage/lcov-report/react/components/Header/HeaderLogo.jsx.html +70 -10
  106. package/coverage/lcov-report/react/components/Header/HeaderMenuButton.js.html +8 -8
  107. package/coverage/lcov-report/react/components/Header/HeaderMenuItem.jsx.html +40 -40
  108. package/coverage/lcov-report/react/components/Header/HeaderMenuLink.js.html +15 -15
  109. package/coverage/lcov-report/react/components/Header/HeaderMenuSignOutButton.js.html +10 -10
  110. package/coverage/lcov-report/react/components/Header/HeaderMobileButton.js.html +5 -5
  111. package/coverage/lcov-report/react/components/Header/HeaderUI.jsx.html +47 -35
  112. package/coverage/lcov-report/react/components/Header/HelpIcon.jsx.html +2 -2
  113. package/coverage/lcov-report/react/components/Header/ImpersonatorBanner.jsx.html +56 -38
  114. package/coverage/lcov-report/react/components/Header/NavigationButtonIcon.jsx.html +2 -2
  115. package/coverage/lcov-report/react/components/Header/header.js.html +5 -5
  116. package/coverage/lcov-report/react/components/Header/hooks.js.html +9 -9
  117. package/coverage/lcov-report/react/components/Header/index.html +33 -33
  118. package/coverage/lcov-report/react/components/Header/utag-helpers.js.html +2 -2
  119. package/coverage/lcov-report/{components/SideNav/AnimationGroup → react/components/HeaderSearchBar}/index.html +22 -22
  120. package/coverage/lcov-report/react/components/HeaderSearchBar/index.jsx.html +325 -0
  121. package/coverage/lcov-report/react/components/Infotip/Infotip.jsx.html +13 -13
  122. package/coverage/lcov-report/react/components/Infotip/InfotipContent.jsx.html +19 -13
  123. package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +6 -6
  124. package/coverage/lcov-report/react/components/Infotip/index.html +1 -1
  125. package/coverage/lcov-report/react/components/Infotip/index.js.html +2 -2
  126. package/coverage/lcov-report/react/components/Modal/LegacyModal.jsx.html +11 -11
  127. package/coverage/lcov-report/react/components/Modal/Modal.jsx.html +47 -47
  128. package/coverage/lcov-report/react/components/Modal/index.html +32 -32
  129. package/coverage/lcov-report/react/components/Modal/index.jsx.html +24 -24
  130. package/coverage/lcov-report/react/components/NotificationBanner/CollapsedView.js.html +7 -7
  131. package/coverage/lcov-report/react/components/NotificationBanner/ExpandedView.js.html +6 -6
  132. package/coverage/lcov-report/react/components/NotificationBanner/index.html +1 -1
  133. package/coverage/lcov-report/react/components/NotificationBanner/index.js.html +31 -31
  134. package/coverage/lcov-report/react/components/SanitizedContent/index.html +11 -11
  135. package/coverage/lcov-report/react/components/SanitizedContent/index.jsx.html +229 -193
  136. package/coverage/lcov-report/{components/SideNav/Links/NavLinkInline.jsx.html → react/components/Session/Session.jsx.html} +105 -159
  137. package/coverage/lcov-report/{components/SideNav/Links/index.js.html → react/components/Session/SessionDialogWrapped.jsx.html} +20 -23
  138. package/coverage/lcov-report/{components/SideNav/Details → react/components/Session}/index.html +29 -29
  139. package/coverage/lcov-report/{components/SideNav/UI/index.js.html → react/components/Session/index.jsx.html} +5 -5
  140. package/coverage/lcov-report/react/components/SessionDialog/index.html +1 -1
  141. package/coverage/lcov-report/react/components/SessionDialog/sessionDialog.js.html +2 -2
  142. package/coverage/lcov-report/react/components/SessionDialogUI.jsx.html +30 -90
  143. package/coverage/lcov-report/react/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +8 -8
  144. package/coverage/lcov-report/react/components/SideNav/AnimationGroup/index.html +1 -1
  145. package/coverage/lcov-report/react/components/SideNav/Chart/ScoreChart.jsx.html +2 -2
  146. package/coverage/lcov-report/react/components/SideNav/Chart/index.html +1 -1
  147. package/coverage/lcov-report/react/components/SideNav/Chart/index.js.html +1 -1
  148. package/coverage/lcov-report/react/components/SideNav/Content/LevelOneContent.jsx.html +56 -26
  149. package/coverage/lcov-report/react/components/SideNav/Content/LevelTwoContent.jsx.html +1 -1
  150. package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.html +26 -26
  151. package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.js.html +20 -44
  152. package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/utils.js.html +94 -88
  153. package/coverage/lcov-report/react/components/SideNav/Content/index.html +5 -5
  154. package/coverage/lcov-report/react/components/SideNav/Content/index.js.html +2 -2
  155. package/coverage/lcov-report/react/components/SideNav/Details/IndividualDetails.jsx.html +3 -3
  156. package/coverage/lcov-report/react/components/SideNav/Details/PracticeDetails.jsx.html +28 -10
  157. package/coverage/lcov-report/react/components/SideNav/Details/index.html +13 -13
  158. package/coverage/lcov-report/react/components/SideNav/Details/index.js.html +3 -3
  159. package/coverage/lcov-report/react/components/SideNav/Links/CmsSwitchLink.jsx.html +5 -5
  160. package/coverage/lcov-report/react/components/SideNav/Links/NavItemInline.jsx.html +8 -8
  161. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkContainer.jsx.html +3 -3
  162. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkDrawer.jsx.html +131 -71
  163. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkInline.jsx.html +19 -16
  164. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkToggle.jsx.html +11 -11
  165. package/coverage/lcov-report/react/components/SideNav/Links/index.html +17 -17
  166. package/coverage/lcov-report/react/components/SideNav/Links/index.js.html +6 -6
  167. package/coverage/lcov-report/react/components/SideNav/UI/SideNavUI.jsx.html +154 -100
  168. package/coverage/lcov-report/react/components/SideNav/UI/default-markup.js.html +97 -0
  169. package/coverage/lcov-report/react/components/SideNav/UI/index.html +36 -21
  170. package/coverage/lcov-report/react/components/SideNav/UI/index.js.html +2 -2
  171. package/coverage/lcov-report/react/components/SideNav/helpers.js.html +38 -1064
  172. package/coverage/lcov-report/react/components/SideNav/index.html +27 -27
  173. package/coverage/lcov-report/react/components/SideNav/index.js.html +17 -83
  174. package/coverage/lcov-report/react/components/Tooltip/Tooltip.jsx.html +1 -1
  175. package/coverage/lcov-report/react/components/Tooltip/index.html +1 -1
  176. package/coverage/lcov-report/react/components/Tooltip/index.js.html +1 -1
  177. package/coverage/lcov-report/react/components/Tooltip/position.js.html +1 -1
  178. package/coverage/lcov-report/react/components/hooks/index.html +14 -14
  179. package/coverage/lcov-report/react/components/hooks/useGetConfig.js.html +17 -20
  180. package/coverage/lcov-report/react/components/index.html +21 -21
  181. package/coverage/lcov-report/react/index.html +1 -1
  182. package/coverage/lcov-report/react/index.js.html +3 -3
  183. package/coverage/lcov-report/react/lib/Chevron.jsx.html +1 -1
  184. package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +72 -72
  185. package/coverage/lcov-report/react/lib/index.html +15 -15
  186. package/coverage/lcov-report/react/lib/svg-definitions.svg.html +1 -1
  187. package/coverage/lcov-report/react/session/index.html +54 -39
  188. package/coverage/lcov-report/react/session/index.js.html +1 -1
  189. package/coverage/lcov-report/react/session/isAuthV2.js.html +151 -0
  190. package/coverage/lcov-report/react/session/logout.js.html +61 -55
  191. package/coverage/lcov-report/react/session/refresh.js.html +68 -59
  192. package/coverage/lcov-report/react/session/ttl.js.html +44 -80
  193. package/coverage/lcov-report/session/index.html +53 -53
  194. package/coverage/lcov-report/session/index.js.html +13 -13
  195. package/coverage/lcov-report/session/logout.js.html +145 -127
  196. package/coverage/lcov-report/session/refresh.js.html +90 -90
  197. package/coverage/lcov-report/session/ttl.js.html +77 -77
  198. package/coverage/lcov.info +1079 -1326
  199. package/dist/browser.js +1 -1
  200. package/dist/browser.js.map +1 -1
  201. package/dist/index.js +1 -1
  202. package/dist/index.js.map +1 -1
  203. package/dist/react/index.js +1 -1
  204. package/dist/react/index.js.map +1 -1
  205. package/package.json +2 -2
  206. package/styles/_main.scss +2 -2
  207. package/styles/qppds/components/_header.scss +72 -50
  208. package/styles/qppds/components/_search.scss +60 -1
  209. package/styles/qppds/settings/variables/_color.module.scss +46 -0
  210. package/styles/qppds/settings/variables/_color.scss +0 -45
  211. package/styles/qppds/settings/variables/_layout.module.scss +23 -0
  212. package/styles/qppds/settings/variables/_layout.scss +0 -23
  213. package/styles/qppds/settings/variables/_type.module.scss +38 -0
  214. package/styles/qppds/settings/variables/_type.scss +0 -37
  215. package/styles/qppds/settings/variables/_z-index.module.scss +8 -0
  216. package/styles/qppds/settings/variables/_z-index.scss +0 -5
  217. package/coverage/lcov-report/components/Footer/LegacyFooterUI.jsx.html +0 -667
  218. package/coverage/lcov-report/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +0 -166
  219. package/coverage/lcov-report/components/SideNav/Content/LevelOneContent.jsx.html +0 -709
  220. package/coverage/lcov-report/components/SideNav/Content/LevelTwoContent.jsx.html +0 -733
  221. package/coverage/lcov-report/components/SideNav/Content/index.js.html +0 -97
  222. package/coverage/lcov-report/components/SideNav/Details/PracticeDetails.jsx.html +0 -220
  223. package/coverage/lcov-report/components/SideNav/Details/index.js.html +0 -97
  224. package/coverage/lcov-report/components/SideNav/Links/NavLinkContainer.jsx.html +0 -199
  225. package/coverage/lcov-report/components/SideNav/Links/NavLinkDrawer.jsx.html +0 -832
  226. package/coverage/lcov-report/components/SideNav/Links/index.html +0 -206
  227. package/coverage/lcov-report/components/SideNav/UI/SideNavUI.jsx.html +0 -1084
  228. package/coverage/lcov-report/lib/svg-definitions.svg.html +0 -460
@@ -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">
@@ -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 cssCancelBtn = showCancelButton ? "show-cancel-button" : "";
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={`${cssCancelBtn} ${cssMenuDropdownStatus}`}>
54
- <HeaderLogo isDevPre={isDevPre} />
55
- {children}
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 showDevPre = isDevPre.isDevPre;
9
- if (showDevPre) {
8
+ const searchHeaderClass = hasSearchBar ? " header-logo-search" : "";
9
+ const headerLogoClass = `header-logo${searchHeaderClass}`;
10
+ if (isDevPre) {
10
11
  return (
11
- <div className="header-logo">
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="header-logo"
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="header-logo"
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.object,
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="&#x2713;" />
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;
@@ -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 [isInactiveDialogOpen, setIsInactiveDialogOpen] = useState(false);
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
- setIsInactiveDialogOpen(true);
46
+ setIsOpen(true);
81
47
  }
82
48
  }
83
49
  }
84
- isSessionValid();
85
- const interval = setInterval(
86
- isSessionValid,
87
- DEFAULT_SESSION_CHECK_INTERVAL,
88
- );
50
+
51
+ ttlInterval = setInterval(isSessionValid, DEFAULT_SESSION_CHECK_INTERVAL);
89
52
 
90
53
  return () => {
91
- clearInterval(interval);
54
+ clearInterval(ttlInterval);
92
55
  didCancel = true;
93
56
  };
94
57
  }, []);
95
58
 
96
- return <>{isInactiveDialogOpen && <InactiveDialog />}</>;
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
- let { qpp_auth_token } = cookie.parse(document.cookie);
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 = isMultiRoleUser(document.cookie);
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
- qpp_has_authorizations: hasAuthorizations,
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 = ROLE_OPTIONS.filter(
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 || ROLE_OPTIONS[0].value;
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={ROLE_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
@@ -193,6 +193,7 @@ const NavLinkDrawer = ({
193
193
  link.label ? link.label.split(" ").join("") : ""
194
194
  }`}
195
195
  data-track-label={link.label}
196
+ data-cy={link.label}
196
197
  target="_self"
197
198
  >
198
199
  {link.label}
@@ -67,6 +67,7 @@ const NavLinkInline = ({
67
67
  data-track-action={`GoTo${label ? label.split(" ").join("") : ""}`}
68
68
  data-track-label={label}
69
69
  aria-label={label}
70
+ data-cy={label}
70
71
  target={`${target ? target : "_self"}`}
71
72
  >
72
73
  <svg