qpp-style 9.22.2 → 9.22.3

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 (195) hide show
  1. package/coverage/clover.xml +386 -382
  2. package/coverage/coverage-final.json +72 -73
  3. package/coverage/lcov-report/components/Accordion/index.html +1 -1
  4. package/coverage/lcov-report/components/Accordion/index.jsx.html +4 -4
  5. package/coverage/lcov-report/components/Button/index.html +116 -0
  6. package/coverage/lcov-report/components/Button/index.js.html +355 -0
  7. package/coverage/lcov-report/components/Error/Collapsible.jsx.html +1 -1
  8. package/coverage/lcov-report/components/Error/ErrorUI.jsx.html +1 -1
  9. package/coverage/lcov-report/components/Error/index.html +1 -1
  10. package/coverage/lcov-report/components/Footer/FooterUI.jsx.html +189 -348
  11. package/coverage/lcov-report/components/Footer/SocialLinks.jsx.html +11 -11
  12. package/coverage/lcov-report/components/Footer/Subscribe.jsx.html +11 -11
  13. package/coverage/lcov-report/components/Footer/index.html +29 -44
  14. package/coverage/lcov-report/components/{SideNav/UI → GovBanner}/index.html +27 -42
  15. package/coverage/lcov-report/components/GovBanner/index.js.html +436 -0
  16. package/coverage/lcov-report/components/{SideNav/Links/NavLinkInline.jsx.html → Header/HeaderAccountMenu.jsx.html} +118 -157
  17. package/coverage/lcov-report/components/{SideNav/Details/IndividualDetails.jsx.html → Header/HeaderCancel.jsx.html} +18 -24
  18. package/coverage/lcov-report/components/Header/HeaderContainer.jsx.html +280 -0
  19. package/coverage/lcov-report/components/{SideNav/Links/CmsSwitchLink.jsx.html → Header/HeaderLogo.jsx.html} +61 -58
  20. package/coverage/lcov-report/components/{SideNav/Links/NavItemInline.jsx.html → Header/HeaderMenuButton.js.html} +63 -75
  21. package/coverage/lcov-report/components/{SideNav/Content/LevelTwoContent.jsx.html → Header/HeaderMenuItem.jsx.html} +305 -236
  22. package/coverage/lcov-report/components/Header/HeaderMenuLink.js.html +253 -0
  23. package/coverage/lcov-report/components/Header/HeaderMenuSignOutButton.js.html +271 -0
  24. package/coverage/lcov-report/components/{SideNav/Links/NavLinkToggle.jsx.html → Header/HeaderMobileButton.js.html} +54 -45
  25. package/coverage/lcov-report/components/{Footer/LegacyFooterUI.jsx.html → Header/HeaderUI.jsx.html} +198 -303
  26. package/coverage/lcov-report/components/Header/HelpIcon.jsx.html +181 -0
  27. package/coverage/lcov-report/components/Header/ImpersonatorBanner.jsx.html +331 -0
  28. package/coverage/lcov-report/components/{SideNav/AnimationGroup/AnimationGroup.jsx.html → Header/NavigationButtonIcon.jsx.html} +48 -48
  29. package/coverage/lcov-report/components/Header/hooks.js.html +283 -0
  30. package/coverage/lcov-report/components/Header/index.html +326 -0
  31. package/coverage/lcov-report/components/{SideNav/Links/index.js.html → Header/utag-helpers.js.html} +28 -40
  32. package/coverage/lcov-report/components/Infotip/Infotip.jsx.html +5 -5
  33. package/coverage/lcov-report/components/Infotip/InfotipIcon.jsx.html +5 -5
  34. package/coverage/lcov-report/components/Infotip/index.html +1 -1
  35. package/coverage/lcov-report/components/Infotip/index.js.html +1 -1
  36. package/coverage/lcov-report/components/Modal/LegacyModal.jsx.html +3 -3
  37. package/coverage/lcov-report/components/Modal/Modal.jsx.html +5 -5
  38. package/coverage/lcov-report/components/Modal/index.html +1 -1
  39. package/coverage/lcov-report/components/Modal/index.jsx.html +5 -5
  40. package/coverage/lcov-report/components/{SideNav/Links/NavLinkContainer.jsx.html → NotificationBanner/CollapsedView.js.html} +61 -58
  41. package/coverage/lcov-report/components/{SideNav/Details/PracticeDetails.jsx.html → NotificationBanner/ExpandedView.js.html} +64 -64
  42. package/coverage/lcov-report/components/{SideNav/Details → NotificationBanner}/index.html +46 -46
  43. package/coverage/lcov-report/components/{SideNav/Content/LevelOneContent.jsx.html → NotificationBanner/index.js.html} +281 -242
  44. package/coverage/lcov-report/components/SanitizedContent/index.html +1 -1
  45. package/coverage/lcov-report/components/SanitizedContent/index.jsx.html +1 -1
  46. package/coverage/lcov-report/components/SessionDialogUI.jsx.html +4 -4
  47. package/coverage/lcov-report/components/SideNav/Chart/ScoreChart.jsx.html +7 -7
  48. package/coverage/lcov-report/components/SideNav/Chart/index.html +1 -16
  49. package/coverage/lcov-report/components/SideNav/{AnimationGroup → Content/SelectRole}/index.html +30 -30
  50. package/coverage/lcov-report/components/SideNav/Content/SelectRole/utils.js.html +505 -0
  51. package/coverage/lcov-report/components/SideNav/helpers.js.html +895 -10
  52. package/coverage/lcov-report/components/SideNav/index.html +17 -17
  53. package/coverage/lcov-report/components/Tooltip/Tooltip.jsx.html +8 -8
  54. package/coverage/lcov-report/components/Tooltip/index.html +1 -1
  55. package/coverage/lcov-report/components/Tooltip/index.js.html +1 -1
  56. package/coverage/lcov-report/components/Tooltip/position.js.html +1 -1
  57. package/coverage/lcov-report/components/hooks/index.html +5 -5
  58. package/coverage/lcov-report/components/hooks/useGetConfig.js.html +18 -15
  59. package/coverage/lcov-report/components/index.html +1 -1
  60. package/coverage/lcov-report/index.html +56 -56
  61. package/coverage/lcov-report/lib/Chevron.jsx.html +5 -5
  62. package/coverage/lcov-report/lib/SvgComponents.jsx.html +105 -12
  63. package/coverage/lcov-report/lib/index.html +15 -30
  64. package/coverage/lcov-report/react/components/Accordion/index.html +1 -1
  65. package/coverage/lcov-report/react/components/Accordion/index.jsx.html +1 -1
  66. package/coverage/lcov-report/react/components/Button/index.html +1 -1
  67. package/coverage/lcov-report/react/components/Button/index.js.html +1 -1
  68. package/coverage/lcov-report/react/components/Dropdown/index.html +1 -1
  69. package/coverage/lcov-report/react/components/Dropdown/index.js.html +1 -1
  70. package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +1 -1
  71. package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +1 -1
  72. package/coverage/lcov-report/react/components/Error/error.js.html +1 -1
  73. package/coverage/lcov-report/react/components/Error/index.html +1 -1
  74. package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +32 -17
  75. package/coverage/lcov-report/react/components/Footer/LegacyFooterUI.jsx.html +1 -1
  76. package/coverage/lcov-report/react/components/Footer/SocialLinks.jsx.html +1 -1
  77. package/coverage/lcov-report/react/components/Footer/Subscribe.jsx.html +1 -1
  78. package/coverage/lcov-report/react/components/Footer/footer.js.html +1 -1
  79. package/coverage/lcov-report/react/components/Footer/index.html +1 -1
  80. package/coverage/lcov-report/react/components/GovBanner/index.html +1 -1
  81. package/coverage/lcov-report/react/components/GovBanner/index.js.html +3 -3
  82. package/coverage/lcov-report/react/components/Header/HeaderAccountMenu.jsx.html +26 -251
  83. package/coverage/lcov-report/react/components/Header/HeaderCancel.jsx.html +1 -1
  84. package/coverage/lcov-report/react/components/Header/HeaderContainer.jsx.html +2 -2
  85. package/coverage/lcov-report/react/components/Header/HeaderLogo.jsx.html +4 -4
  86. package/coverage/lcov-report/react/components/Header/HeaderMenuButton.js.html +1 -1
  87. package/coverage/lcov-report/react/components/Header/HeaderMenuItem.jsx.html +19 -19
  88. package/coverage/lcov-report/react/components/Header/HeaderMenuLink.js.html +1 -1
  89. package/coverage/lcov-report/react/components/Header/HeaderMenuSignOutButton.js.html +1 -1
  90. package/coverage/lcov-report/react/components/Header/HeaderMobileButton.js.html +2 -2
  91. package/coverage/lcov-report/react/components/Header/HeaderUI.jsx.html +89 -113
  92. package/coverage/lcov-report/react/components/Header/HelpIcon.jsx.html +2 -2
  93. package/coverage/lcov-report/react/components/Header/ImpersonatorBanner.jsx.html +5 -5
  94. package/coverage/lcov-report/react/components/Header/NavigationButtonIcon.jsx.html +1 -1
  95. package/coverage/lcov-report/react/components/Header/header.js.html +1 -1
  96. package/coverage/lcov-report/react/components/Header/hooks.js.html +59 -17
  97. package/coverage/lcov-report/react/components/Header/index.html +28 -28
  98. package/coverage/lcov-report/react/components/Header/utag-helpers.js.html +1 -1
  99. package/coverage/lcov-report/react/components/Infotip/Infotip.jsx.html +4 -4
  100. package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +1 -1
  101. package/coverage/lcov-report/react/components/Infotip/index.html +1 -1
  102. package/coverage/lcov-report/react/components/Infotip/index.js.html +1 -1
  103. package/coverage/lcov-report/react/components/Modal/LegacyModal.jsx.html +1 -1
  104. package/coverage/lcov-report/react/components/Modal/Modal.jsx.html +1 -1
  105. package/coverage/lcov-report/react/components/Modal/index.html +1 -1
  106. package/coverage/lcov-report/react/components/Modal/index.jsx.html +1 -1
  107. package/coverage/lcov-report/react/components/NotificationBanner/CollapsedView.js.html +49 -28
  108. package/coverage/lcov-report/react/components/NotificationBanner/ExpandedView.js.html +1 -1
  109. package/coverage/lcov-report/react/components/NotificationBanner/index.html +11 -11
  110. package/coverage/lcov-report/react/components/NotificationBanner/index.js.html +32 -32
  111. package/coverage/lcov-report/react/components/SanitizedContent/index.html +1 -1
  112. package/coverage/lcov-report/react/components/SanitizedContent/index.jsx.html +1 -1
  113. package/coverage/lcov-report/react/components/SessionDialog/index.html +1 -1
  114. package/coverage/lcov-report/react/components/SessionDialog/sessionDialog.js.html +1 -1
  115. package/coverage/lcov-report/react/components/SessionDialogUI.jsx.html +1 -1
  116. package/coverage/lcov-report/react/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +1 -1
  117. package/coverage/lcov-report/react/components/SideNav/AnimationGroup/index.html +1 -1
  118. package/coverage/lcov-report/react/components/SideNav/Chart/ScoreChart.jsx.html +1 -1
  119. package/coverage/lcov-report/react/components/SideNav/Chart/index.html +1 -1
  120. package/coverage/lcov-report/react/components/SideNav/Chart/index.js.html +1 -1
  121. package/coverage/lcov-report/react/components/SideNav/Content/LevelOneContent.jsx.html +1 -1
  122. package/coverage/lcov-report/react/components/SideNav/Content/LevelTwoContent.jsx.html +1 -1
  123. package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.html +13 -13
  124. package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.js.html +1 -1
  125. package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/utils.js.html +60 -24
  126. package/coverage/lcov-report/react/components/SideNav/Content/index.html +1 -1
  127. package/coverage/lcov-report/react/components/SideNav/Content/index.js.html +1 -1
  128. package/coverage/lcov-report/react/components/SideNav/Details/IndividualDetails.jsx.html +1 -1
  129. package/coverage/lcov-report/react/components/SideNav/Details/PracticeDetails.jsx.html +1 -1
  130. package/coverage/lcov-report/react/components/SideNav/Details/index.html +1 -1
  131. package/coverage/lcov-report/react/components/SideNav/Details/index.js.html +1 -1
  132. package/coverage/lcov-report/react/components/SideNav/Links/CmsSwitchLink.jsx.html +1 -1
  133. package/coverage/lcov-report/react/components/SideNav/Links/NavItemInline.jsx.html +1 -1
  134. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkContainer.jsx.html +1 -1
  135. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkDrawer.jsx.html +3 -3
  136. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkInline.jsx.html +1 -1
  137. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkToggle.jsx.html +1 -1
  138. package/coverage/lcov-report/react/components/SideNav/Links/index.html +1 -1
  139. package/coverage/lcov-report/react/components/SideNav/Links/index.js.html +1 -1
  140. package/coverage/lcov-report/react/components/SideNav/UI/SideNavUI.jsx.html +2 -20
  141. package/coverage/lcov-report/react/components/SideNav/UI/index.html +1 -1
  142. package/coverage/lcov-report/react/components/SideNav/UI/index.js.html +1 -1
  143. package/coverage/lcov-report/react/components/SideNav/helpers.js.html +78 -12
  144. package/coverage/lcov-report/react/components/SideNav/index.html +19 -19
  145. package/coverage/lcov-report/react/components/SideNav/index.js.html +1 -1
  146. package/coverage/lcov-report/react/components/Tooltip/Tooltip.jsx.html +1 -1
  147. package/coverage/lcov-report/react/components/Tooltip/index.html +1 -1
  148. package/coverage/lcov-report/react/components/Tooltip/index.js.html +1 -1
  149. package/coverage/lcov-report/react/components/Tooltip/position.js.html +1 -1
  150. package/coverage/lcov-report/react/components/hooks/index.html +19 -19
  151. package/coverage/lcov-report/react/components/hooks/useGetConfig.js.html +37 -37
  152. package/coverage/lcov-report/react/components/index.html +1 -1
  153. package/coverage/lcov-report/react/index.html +1 -1
  154. package/coverage/lcov-report/react/index.js.html +1 -1
  155. package/coverage/lcov-report/react/lib/Chevron.jsx.html +2 -2
  156. package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +7 -4
  157. package/coverage/lcov-report/react/lib/index.html +5 -20
  158. package/coverage/lcov-report/react/lib/svg-definitions.svg.html +1 -1
  159. package/coverage/lcov-report/react/session/index.html +1 -1
  160. package/coverage/lcov-report/react/session/index.js.html +1 -1
  161. package/coverage/lcov-report/react/session/logout.js.html +1 -1
  162. package/coverage/lcov-report/react/session/refresh.js.html +1 -1
  163. package/coverage/lcov-report/react/session/ttl.js.html +1 -1
  164. package/coverage/lcov-report/session/index.html +20 -20
  165. package/coverage/lcov-report/session/index.js.html +1 -1
  166. package/coverage/lcov-report/session/logout.js.html +24 -15
  167. package/coverage/lcov-report/session/refresh.js.html +2 -2
  168. package/coverage/lcov-report/session/ttl.js.html +2 -2
  169. package/coverage/lcov.info +581 -577
  170. package/dist/browser.js +1 -1
  171. package/dist/index.js +1 -1
  172. package/dist/react/index.js +1 -1
  173. package/package.json +4 -4
  174. package/coverage/lcov-report/components/SideNav/Chart/index.js.html +0 -94
  175. package/coverage/lcov-report/components/SideNav/Content/index.html +0 -146
  176. package/coverage/lcov-report/components/SideNav/Content/index.js.html +0 -97
  177. package/coverage/lcov-report/components/SideNav/Details/index.js.html +0 -97
  178. package/coverage/lcov-report/components/SideNav/Links/NavLinkDrawer.jsx.html +0 -832
  179. package/coverage/lcov-report/components/SideNav/Links/index.html +0 -206
  180. package/coverage/lcov-report/components/SideNav/UI/SideNavUI.jsx.html +0 -1084
  181. package/coverage/lcov-report/components/SideNav/UI/index.js.html +0 -94
  182. package/coverage/lcov-report/lib/svg-definitions.svg.html +0 -460
  183. package/styles/components/_footer.scss +0 -593
  184. package/styles/components/_header.scss +0 -890
  185. package/styles/components/_sidebar.scss +0 -8
  186. package/styles/components/sidebar/_animations.scss +0 -38
  187. package/styles/components/sidebar/_cms.scss +0 -61
  188. package/styles/components/sidebar/_details.scss +0 -58
  189. package/styles/components/sidebar/_links.scss +0 -415
  190. package/styles/components/sidebar/_sidebar-animation.scss +0 -121
  191. package/styles/components/sidebar/_sidebar-tooltip.scss +0 -33
  192. package/styles/components/sidebar/_sidebar.scss +0 -141
  193. package/styles/components/sidebar/project-specific/_wi.scss +0 -42
  194. package/styles/qppds/components/_infotip-content.scss +0 -47
  195. package/styles/qppds/components/_spinner.scss +0 -46
@@ -3,15 +3,15 @@
3
3
  <html lang="en">
4
4
 
5
5
  <head>
6
- <title>Code coverage report for components/SideNav/Content/LevelOneContent.jsx</title>
6
+ <title>Code coverage report for components/NotificationBanner/index.js</title>
7
7
  <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../../prettify.css" />
9
- <link rel="stylesheet" href="../../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
11
  <meta name="viewport" content="width=device-width, initial-scale=1" />
12
12
  <style type='text/css'>
13
13
  .coverage-summary .sorter {
14
- background-image: url(../../../sort-arrow-sprite.png);
14
+ background-image: url(../../sort-arrow-sprite.png);
15
15
  }
16
16
  </style>
17
17
  </head>
@@ -19,34 +19,34 @@
19
19
  <body>
20
20
  <div class='wrapper'>
21
21
  <div class='pad1'>
22
- <h1><a href="../../../index.html">All files</a> / <a href="index.html">components/SideNav/Content</a> LevelOneContent.jsx</h1>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">components/NotificationBanner</a> index.js</h1>
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">55.26% </span>
26
+ <span class="strong">60% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>21/38</span>
28
+ <span class='fraction'>36/60</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">31.81% </span>
33
+ <span class="strong">32.14% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>14/44</span>
35
+ <span class='fraction'>9/28</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">16.66% </span>
40
+ <span class="strong">57.14% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>1/6</span>
42
+ <span class='fraction'>8/14</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">55.26% </span>
47
+ <span class="strong">60% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>21/38</span>
49
+ <span class='fraction'>36/60</span>
50
50
  </div>
51
51
 
52
52
 
@@ -271,18 +271,20 @@
271
271
  <a name='L206'></a><a href='#L206'>206</a>
272
272
  <a name='L207'></a><a href='#L207'>207</a>
273
273
  <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
275
- <span class="cline-any cline-neutral">&nbsp;</span>
276
- <span class="cline-any cline-neutral">&nbsp;</span>
277
- <span class="cline-any cline-neutral">&nbsp;</span>
278
- <span class="cline-any cline-neutral">&nbsp;</span>
279
- <span class="cline-any cline-neutral">&nbsp;</span>
280
- <span class="cline-any cline-neutral">&nbsp;</span>
281
- <span class="cline-any cline-neutral">&nbsp;</span>
282
- <span class="cline-any cline-neutral">&nbsp;</span>
283
- <span class="cline-any cline-neutral">&nbsp;</span>
284
- <span class="cline-any cline-neutral">&nbsp;</span>
285
- <span class="cline-any cline-neutral">&nbsp;</span>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
286
288
  <span class="cline-any cline-neutral">&nbsp;</span>
287
289
  <span class="cline-any cline-neutral">&nbsp;</span>
288
290
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -290,47 +292,78 @@
290
292
  <span class="cline-any cline-neutral">&nbsp;</span>
291
293
  <span class="cline-any cline-neutral">&nbsp;</span>
292
294
  <span class="cline-any cline-neutral">&nbsp;</span>
295
+ <span class="cline-any cline-yes">1x</span>
296
+ <span class="cline-any cline-no">&nbsp;</span>
297
+ <span class="cline-any cline-no">&nbsp;</span>
298
+ <span class="cline-any cline-no">&nbsp;</span>
299
+ <span class="cline-any cline-no">&nbsp;</span>
293
300
  <span class="cline-any cline-neutral">&nbsp;</span>
294
301
  <span class="cline-any cline-neutral">&nbsp;</span>
295
302
  <span class="cline-any cline-neutral">&nbsp;</span>
296
303
  <span class="cline-any cline-neutral">&nbsp;</span>
304
+ <span class="cline-any cline-yes">1x</span>
297
305
  <span class="cline-any cline-neutral">&nbsp;</span>
298
306
  <span class="cline-any cline-neutral">&nbsp;</span>
299
307
  <span class="cline-any cline-neutral">&nbsp;</span>
300
308
  <span class="cline-any cline-neutral">&nbsp;</span>
301
309
  <span class="cline-any cline-neutral">&nbsp;</span>
302
310
  <span class="cline-any cline-neutral">&nbsp;</span>
311
+ <span class="cline-any cline-yes">2x</span>
303
312
  <span class="cline-any cline-neutral">&nbsp;</span>
313
+ <span class="cline-any cline-yes">2x</span>
314
+ <span class="cline-any cline-yes">2x</span>
315
+ <span class="cline-any cline-yes">2x</span>
316
+ <span class="cline-any cline-yes">2x</span>
317
+ <span class="cline-any cline-yes">2x</span>
318
+ <span class="cline-any cline-yes">2x</span>
319
+ <span class="cline-any cline-yes">2x</span>
320
+ <span class="cline-any cline-yes">2x</span>
304
321
  <span class="cline-any cline-neutral">&nbsp;</span>
322
+ <span class="cline-any cline-yes">2x</span>
305
323
  <span class="cline-any cline-neutral">&nbsp;</span>
324
+ <span class="cline-any cline-yes">1x</span>
306
325
  <span class="cline-any cline-neutral">&nbsp;</span>
307
326
  <span class="cline-any cline-yes">1x</span>
308
327
  <span class="cline-any cline-no">&nbsp;</span>
309
328
  <span class="cline-any cline-neutral">&nbsp;</span>
310
329
  <span class="cline-any cline-neutral">&nbsp;</span>
330
+ <span class="cline-any cline-yes">1x</span>
331
+ <span class="cline-any cline-no">&nbsp;</span>
311
332
  <span class="cline-any cline-neutral">&nbsp;</span>
312
333
  <span class="cline-any cline-neutral">&nbsp;</span>
334
+ <span class="cline-any cline-yes">1x</span>
313
335
  <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-yes">1x</span>
337
+ <span class="cline-any cline-yes">1x</span>
314
338
  <span class="cline-any cline-neutral">&nbsp;</span>
315
339
  <span class="cline-any cline-neutral">&nbsp;</span>
316
340
  <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-yes">2x</span>
317
342
  <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-yes">1x</span>
344
+ <span class="cline-any cline-yes">1x</span>
318
345
  <span class="cline-any cline-neutral">&nbsp;</span>
319
346
  <span class="cline-any cline-neutral">&nbsp;</span>
320
347
  <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-yes">2x</span>
349
+ <span class="cline-any cline-yes">1x</span>
350
+ <span class="cline-any cline-yes">1x</span>
321
351
  <span class="cline-any cline-neutral">&nbsp;</span>
352
+ <span class="cline-any cline-yes">1x</span>
322
353
  <span class="cline-any cline-neutral">&nbsp;</span>
323
354
  <span class="cline-any cline-neutral">&nbsp;</span>
324
355
  <span class="cline-any cline-neutral">&nbsp;</span>
356
+ <span class="cline-any cline-yes">1x</span>
325
357
  <span class="cline-any cline-neutral">&nbsp;</span>
326
358
  <span class="cline-any cline-neutral">&nbsp;</span>
327
- <span class="cline-any cline-neutral">&nbsp;</span>
328
- <span class="cline-any cline-neutral">&nbsp;</span>
329
- <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-yes">2x</span>
330
360
  <span class="cline-any cline-yes">1x</span>
361
+ <span class="cline-any cline-no">&nbsp;</span>
362
+ <span class="cline-any cline-no">&nbsp;</span>
331
363
  <span class="cline-any cline-neutral">&nbsp;</span>
332
364
  <span class="cline-any cline-neutral">&nbsp;</span>
333
365
  <span class="cline-any cline-neutral">&nbsp;</span>
366
+ <span class="cline-any cline-no">&nbsp;</span>
334
367
  <span class="cline-any cline-neutral">&nbsp;</span>
335
368
  <span class="cline-any cline-neutral">&nbsp;</span>
336
369
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -341,46 +374,34 @@
341
374
  <span class="cline-any cline-neutral">&nbsp;</span>
342
375
  <span class="cline-any cline-neutral">&nbsp;</span>
343
376
  <span class="cline-any cline-neutral">&nbsp;</span>
344
- <span class="cline-any cline-yes">1x</span>
345
377
  <span class="cline-any cline-neutral">&nbsp;</span>
346
- <span class="cline-any cline-yes">1x</span>
347
- <span class="cline-any cline-yes">1x</span>
348
- <span class="cline-any cline-yes">1x</span>
349
- <span class="cline-any cline-yes">1x</span>
350
378
  <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-yes">2x</span>
380
+ <span class="cline-any cline-yes">2x</span>
351
381
  <span class="cline-any cline-neutral">&nbsp;</span>
352
- <span class="cline-any cline-yes">1x</span>
353
- <span class="cline-any cline-yes">1x</span>
354
- <span class="cline-any cline-yes">1x</span>
355
- <span class="cline-any cline-yes">1x</span>
356
- <span class="cline-any cline-yes">1x</span>
357
382
  <span class="cline-any cline-neutral">&nbsp;</span>
358
383
  <span class="cline-any cline-neutral">&nbsp;</span>
359
- <span class="cline-any cline-yes">1x</span>
360
384
  <span class="cline-any cline-neutral">&nbsp;</span>
361
- <span class="cline-any cline-yes">1x</span>
362
385
  <span class="cline-any cline-neutral">&nbsp;</span>
363
- <span class="cline-any cline-yes">1x</span>
364
- <span class="cline-any cline-yes">1x</span>
365
- <span class="cline-any cline-yes">1x</span>
366
386
  <span class="cline-any cline-neutral">&nbsp;</span>
367
387
  <span class="cline-any cline-neutral">&nbsp;</span>
388
+ <span class="cline-any cline-yes">2x</span>
389
+ <span class="cline-any cline-no">&nbsp;</span>
368
390
  <span class="cline-any cline-no">&nbsp;</span>
369
391
  <span class="cline-any cline-neutral">&nbsp;</span>
370
- <span class="cline-any cline-neutral">&nbsp;</span>
371
- <span class="cline-any cline-neutral">&nbsp;</span>
392
+ <span class="cline-any cline-no">&nbsp;</span>
372
393
  <span class="cline-any cline-no">&nbsp;</span>
373
394
  <span class="cline-any cline-neutral">&nbsp;</span>
374
395
  <span class="cline-any cline-neutral">&nbsp;</span>
375
396
  <span class="cline-any cline-neutral">&nbsp;</span>
376
397
  <span class="cline-any cline-neutral">&nbsp;</span>
377
- <span class="cline-any cline-yes">1x</span>
378
398
  <span class="cline-any cline-neutral">&nbsp;</span>
379
399
  <span class="cline-any cline-neutral">&nbsp;</span>
380
400
  <span class="cline-any cline-neutral">&nbsp;</span>
381
401
  <span class="cline-any cline-neutral">&nbsp;</span>
382
402
  <span class="cline-any cline-neutral">&nbsp;</span>
383
403
  <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-no">&nbsp;</span>
384
405
  <span class="cline-any cline-neutral">&nbsp;</span>
385
406
  <span class="cline-any cline-neutral">&nbsp;</span>
386
407
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -398,14 +419,19 @@
398
419
  <span class="cline-any cline-neutral">&nbsp;</span>
399
420
  <span class="cline-any cline-neutral">&nbsp;</span>
400
421
  <span class="cline-any cline-neutral">&nbsp;</span>
401
- <span class="cline-any cline-yes">1x</span>
402
- <span class="cline-any cline-no">&nbsp;</span>
403
422
  <span class="cline-any cline-neutral">&nbsp;</span>
423
+ <span class="cline-any cline-yes">2x</span>
424
+ <span class="cline-any cline-no">&nbsp;</span>
425
+ <span class="cline-any cline-no">&nbsp;</span>
426
+ <span class="cline-any cline-no">&nbsp;</span>
427
+ <span class="cline-any cline-no">&nbsp;</span>
404
428
  <span class="cline-any cline-neutral">&nbsp;</span>
405
429
  <span class="cline-any cline-no">&nbsp;</span>
406
430
  <span class="cline-any cline-no">&nbsp;</span>
407
431
  <span class="cline-any cline-neutral">&nbsp;</span>
408
432
  <span class="cline-any cline-neutral">&nbsp;</span>
433
+ <span class="cline-any cline-yes">2x</span>
434
+ <span class="cline-any cline-no">&nbsp;</span>
409
435
  <span class="cline-any cline-no">&nbsp;</span>
410
436
  <span class="cline-any cline-no">&nbsp;</span>
411
437
  <span class="cline-any cline-no">&nbsp;</span>
@@ -415,19 +441,14 @@
415
441
  <span class="cline-any cline-neutral">&nbsp;</span>
416
442
  <span class="cline-any cline-neutral">&nbsp;</span>
417
443
  <span class="cline-any cline-neutral">&nbsp;</span>
418
- <span class="cline-any cline-no">&nbsp;</span>
419
- <span class="cline-any cline-no">&nbsp;</span>
420
- <span class="cline-any cline-no">&nbsp;</span>
421
444
  <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-no">&nbsp;</span>
423
445
  <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-yes">2x</span>
424
447
  <span class="cline-any cline-neutral">&nbsp;</span>
425
448
  <span class="cline-any cline-neutral">&nbsp;</span>
426
449
  <span class="cline-any cline-neutral">&nbsp;</span>
427
- <span class="cline-any cline-no">&nbsp;</span>
428
450
  <span class="cline-any cline-neutral">&nbsp;</span>
429
451
  <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-no">&nbsp;</span>
431
452
  <span class="cline-any cline-neutral">&nbsp;</span>
432
453
  <span class="cline-any cline-neutral">&nbsp;</span>
433
454
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -441,7 +462,6 @@
441
462
  <span class="cline-any cline-neutral">&nbsp;</span>
442
463
  <span class="cline-any cline-neutral">&nbsp;</span>
443
464
  <span class="cline-any cline-neutral">&nbsp;</span>
444
- <span class="cline-any cline-no">&nbsp;</span>
445
465
  <span class="cline-any cline-neutral">&nbsp;</span>
446
466
  <span class="cline-any cline-neutral">&nbsp;</span>
447
467
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -452,10 +472,9 @@
452
472
  <span class="cline-any cline-neutral">&nbsp;</span>
453
473
  <span class="cline-any cline-neutral">&nbsp;</span>
454
474
  <span class="cline-any cline-neutral">&nbsp;</span>
455
- <span class="cline-any cline-no">&nbsp;</span>
475
+ <span class="cline-any cline-yes">1x</span>
456
476
  <span class="cline-any cline-neutral">&nbsp;</span>
457
477
  <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-yes">1x</span>
459
478
  <span class="cline-any cline-neutral">&nbsp;</span>
460
479
  <span class="cline-any cline-neutral">&nbsp;</span>
461
480
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -479,214 +498,234 @@
479
498
  <span class="cline-any cline-neutral">&nbsp;</span>
480
499
  <span class="cline-any cline-neutral">&nbsp;</span>
481
500
  <span class="cline-any cline-neutral">&nbsp;</span>
482
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import React from 'react';
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-neutral">&nbsp;</span>
503
+ <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-neutral">&nbsp;</span>
506
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-neutral">&nbsp;</span>
508
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import React, { useState, useEffect, useRef } from 'react';
483
509
  import PropTypes from 'prop-types';
484
- import cookie from 'cookie';
485
- import jwtDecode from 'jwt-decode';
510
+ import ExpandedView from './ExpandedView';
511
+ import CollapsedView from './CollapsedView';
512
+ import { withGetConfig } from '../hooks/useGetConfig';
486
513
  &nbsp;
487
- import { NavLinkContainer, NavLinkInline, NavLinkDrawer } from '../Links';
488
- import AnimationGroup from '../AnimationGroup/AnimationGroup';
489
- import defaultContent from '../UI/default-content';
490
- import {
491
- AccountHomeIcon,
492
- DashboardIcon,
493
- FacilityBasedPreviewIcon,
494
- HardshipIcon,
495
- HelpSupportIcon,
496
- ManageUsersIcon,
497
- MyApplicationsIcon,
498
- MyTestDataIcon,
499
- PaymentIcon,
500
- PhysicianCompareIcon,
501
- StarIcon,
502
- TargetIcon,
503
- IndividualReporting,
504
- } from '../../../lib/SvgComponents';
505
- import {
506
- dashboardUrl,
507
- facilityBasedPreviewBaseUrl,
508
- feedbackUrl,
509
- manageUrl,
510
- physicianCompareUrl,
511
- reportsPortalUrl,
512
- submissionsUrl,
513
- } from '../helpers';
514
+ function debounce(fn, ms) {
515
+ let timer;
516
+ return <span class="fstat-no" title="function not covered" >()</span> =&gt; {
517
+ <span class="cstat-no" title="statement not covered" > clearTimeout(timer);</span>
518
+ <span class="cstat-no" title="statement not covered" > timer = setTimeout(<span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
519
+ <span class="cstat-no" title="statement not covered" > timer = null;</span>
520
+ <span class="cstat-no" title="statement not covered" > fn.apply(this, arguments);</span>
521
+ }, ms);
522
+ };
523
+ }
514
524
  &nbsp;
515
- const getIcon = <span class="fstat-no" title="function not covered" >(u</span>rl) =&gt;
516
- (<span class="cstat-no" title="statement not covered" >{</span>
517
- [dashboardUrl]: DashboardIcon,
518
- [feedbackUrl]: StarIcon,
519
- [manageUrl]: ManageUsersIcon,
520
- [physicianCompareUrl]: PhysicianCompareIcon,
521
- [reportsPortalUrl]: HardshipIcon,
522
- [submissionsUrl]: AccountHomeIcon,
523
- [facilityBasedPreviewBaseUrl]: FacilityBasedPreviewIcon,
524
- '/developers': HelpSupportIcon,
525
- '/resources/help-and-support': HelpSupportIcon,
526
- '/user/apm-incentive-payments': PaymentIcon,
527
- '/user/applications': MyApplicationsIcon,
528
- '/user/exception/#/landing': HardshipIcon,
529
- '/user/targeted-review/#/landing': TargetIcon,
530
- '/user/test-data': MyTestDataIcon,
531
- '/user/self-nomination/#/landing': IndividualReporting,
532
- '/user/reviewers': DashboardIcon,
533
- '/reviewer/exception': HardshipIcon,
534
- '/reviewer/targeted-review': TargetIcon,
535
- '/self-nomination': IndividualReporting,
536
- }[url] || null);
525
+ const NotificationBanner = ({ result }) =&gt; {
526
+ const {
527
+ color = <span class="branch-0 cbranch-no" title="branch not covered" >'blue',</span>
528
+ content,
529
+ dismissable,
530
+ enabled,
531
+ label = <span class="branch-0 cbranch-no" title="branch not covered" >'Update',</span>
532
+ } = result.content;
537
533
  &nbsp;
538
- const LevelOneContent = ({
539
- isExpanded,
540
- config: { linkCallback, useTooltips } = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span>
541
- levelOneContent,
542
- }) =&gt; {
543
- let {
544
- qpp_has_authorizations,
545
- user_has_apm_payments,
546
- qpp_is_dev_pre,
547
- qpp_ehr_authorized,
548
- qpp_has_non_registry_authorizations,
549
- qpp_auth_token,
550
- qpp_cms_internal_authorized,
551
- qpp_can_impersonate,
552
- } = cookie.parse(document.cookie);
534
+ const bannerContainerRef = useRef(null);
535
+ const collapsedWrapperRef = useRef(null);
536
+ const collapsedBannerRef = useRef(null);
537
+ const VIEW_BREAKPOINT = 767;
538
+ const [height, setHeight] = useState('100%');
539
+ const [expanded, setExpanded] = useState();
540
+ const [windowWidth, setWindowWidth] = useState(window.innerWidth);
541
+ const cssDeterminesBannerView = expanded ? 'expanded' : 'collapsed';
553
542
  &nbsp;
554
- let name = '';
555
- <span class="missing-if-branch" title="else path not taken" >E</span>if (qpp_auth_token) {
556
- const { firstName, lastName } = jwtDecode(qpp_auth_token);
557
- name = `${firstName} ${lastName}`;
558
- }
543
+ useEffect(() =&gt; {
544
+ //setBannerHeight on Load &amp; Resize
545
+ setBannerHeight();
559
546
  &nbsp;
560
- const canImpersonate = qpp_can_impersonate === 'true';
561
- const hasAuthorizations = qpp_has_authorizations === 'true';
562
- const hasApmPayments = user_has_apm_payments === 'true';
563
- const isDevPre = qpp_is_dev_pre === 'true';
564
- const internalReviewerNames = JSON.parse(
565
- qpp_cms_internal_authorized || 'null'
566
- );
567
- const ehrAuthorized = qpp_ehr_authorized === 'true';
568
- const hasNonRegistryAuthorizations =
569
- qpp_has_non_registry_authorizations === 'true';
547
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (window.innerWidth &lt;= VIEW_BREAKPOINT) {
548
+ <span class="cstat-no" title="statement not covered" > setExpanded(false);</span>
549
+ }
570
550
  &nbsp;
571
- const linkClass = isExpanded ? 'link-inline' : <span class="branch-1 cbranch-no" title="branch not covered" >'link-collapsed';</span>
572
- let content = isDevPre ? <span class="branch-0 cbranch-no" title="branch not covered" >levelOneContent?.devPre </span>: levelOneContent?.default;
573
- <span class="missing-if-branch" title="if path not taken" >I</span>if (
574
- (internalReviewerNames || []).some(
575
- <span class="fstat-no" title="function not covered" > (n</span>ame) =&gt;
576
- <span class="cstat-no" title="statement not covered" > name === 'QPP Self-Nomination' ||</span>
577
- name === 'QPP Targeted Review &amp; Exceptions'
578
- )
579
- ) {
580
- <span class="cstat-no" title="statement not covered" > content =</span>
581
- levelOneContent?.internalReviewers || defaultContent.internalReviewers;
582
- }
551
+ const debounceBrowserResizeHandler = debounce(<span class="fstat-no" title="function not covered" >()</span> =&gt; {
552
+ <span class="cstat-no" title="statement not covered" > return setWindowWidth(window.innerWidth);</span>
553
+ }, 600);
583
554
  &nbsp;
584
- // Mapping side nav link urls to the conditions that determine their inclusion in the side nav
585
- const urlConditionMap = {
586
- [dashboardUrl]: hasAuthorizations,
587
- [feedbackUrl]: hasAuthorizations,
588
- '/user/apm-incentive-payments': hasApmPayments,
589
- [physicianCompareUrl]: hasNonRegistryAuthorizations,
590
- [reportsPortalUrl]: hasAuthorizations,
591
- [facilityBasedPreviewBaseUrl]: hasAuthorizations,
592
- '/user/helpdesk-viewing-tool': canImpersonate,
555
+ window.addEventListener('resize', debounceBrowserResizeHandler);
593
556
  &nbsp;
594
- '/reviewer/exception': (internalReviewerNames || []).includes(
595
- 'QPP Targeted Review &amp; Exceptions'
596
- ),
597
- '/reviewer/targeted-review': (internalReviewerNames || []).includes(
598
- 'QPP Targeted Review &amp; Exceptions'
599
- ),
600
- '/self-nomination': (internalReviewerNames || []).includes(
601
- 'QPP Self-Nomination'
602
- ),
557
+ return () =&gt; {
558
+ window.removeEventListener('resize', debounceBrowserResizeHandler);
559
+ };
560
+ }, [windowWidth]);
603
561
  &nbsp;
604
- // dev pre
605
- '/user/applications': ehrAuthorized,
606
- '/user/test-data': ehrAuthorized,
562
+ useEffect(() =&gt; {
563
+ // setExpanded =&gt; updates cssDeterminesBannerView
564
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (Object.keys(result).length &gt; 0) {
565
+ setExpanded(isNotificationExpanded());
566
+ }
567
+ }, [result]);
568
+ &nbsp;
569
+ const isNotificationExpanded = () =&gt; {
570
+ const dateDismissed = new Date(result.content.dateDismissed);
571
+ const dateUpdated = new Date(result.content.dateUpdated);
572
+ const notDismissed =
573
+ (isDateValid(dateUpdated) &amp;&amp;
574
+ <span class="branch-1 cbranch-no" title="branch not covered" > isDateValid(dateDismissed) </span>&amp;&amp;
575
+ <span class="branch-2 cbranch-no" title="branch not covered" > dateUpdated &gt;= dateDismissed)</span> ||
576
+ !isDateValid(dateDismissed);
577
+ return notDismissed;
607
578
  };
608
579
  &nbsp;
609
- const navLinks = content.reduce(<span class="fstat-no" title="function not covered" >(a</span>cc, link) =&gt; {
610
- const { url, label, className, listOfLinks, ...rest } = <span class="cstat-no" title="statement not covered" >link;</span>
580
+ const setBannerHeight = () =&gt; {
581
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (content) {
582
+ <span class="cstat-no" title="statement not covered" > bannerContainerRef.current.style.transition = 'none';</span>
583
+ <span class="cstat-no" title="statement not covered" > expanded</span>
584
+ ? collapsedBannerRef.current.setAttribute('tabIndex', '-1')
585
+ : collapsedBannerRef.current.setAttribute('tabIndex', ' ');
611
586
  &nbsp;
612
- // Any links failing the corresponding condition in the urlConditionMap are skipped
613
- <span class="cstat-no" title="statement not covered" > if (url in urlConditionMap &amp;&amp; !urlConditionMap[url]) {</span>
614
- <span class="cstat-no" title="statement not covered" > return acc;</span>
587
+ <span class="cstat-no" title="statement not covered" > setHeight(</span>
588
+ expanded ? '100%' : `${collapsedWrapperRef.current.offsetHeight}px`
589
+ );
615
590
  }
591
+ };
616
592
  &nbsp;
617
- const IconComponent = <span class="cstat-no" title="statement not covered" >getIcon(url);</span>
618
- const Icon = <span class="cstat-no" title="statement not covered" >IconComponent ? &lt;IconComponent /&gt; : null;</span>
619
- const sharedProps = <span class="cstat-no" title="statement not covered" >{</span>
620
- url,
621
- label,
622
- linkCallback,
623
- className: className ? `${linkClass} ${className}` : linkClass,
624
- };
593
+ /**
594
+ * Whether the date is valid, i.e. not null
595
+ *
596
+ * @param {Date} date
597
+ * @return {Boolean}
598
+ */
599
+ &nbsp;
600
+ const isDateValid = (date) =&gt; {
601
+ return !isNaN(Date.parse(date));
602
+ };
603
+ /**
604
+ * Try to find this NotificationBanner instance in localStorage, or else add
605
+ * a minimal version of it, and mark it with a dateDismissed, then update
606
+ * localStorage.
607
+ */
625
608
  &nbsp;
626
- const { pathname, hash } = <span class="cstat-no" title="statement not covered" >window.location;</span>
627
- const filteredListOfLinks = <span class="cstat-no" title="statement not covered" >(listOfLinks || []).filter(<span class="fstat-no" title="function not covered" >(s</span>ublink) =&gt; {</span>
628
- <span class="cstat-no" title="statement not covered" > return !(sublink.url in urlConditionMap &amp;&amp; !urlConditionMap[sublink.url]);</span>
629
- });
630
- <span class="cstat-no" title="statement not covered" > if (</span>
631
- filteredListOfLinks?.length &gt; 0 &amp;&amp;
632
- (pathname === url ||
633
- filteredListOfLinks.some(
634
- <span class="fstat-no" title="function not covered" > (s</span>ublink) =&gt;
635
- <span class="cstat-no" title="statement not covered" > pathname === sublink.url || `${pathname}${hash}` === sublink.url</span>
636
- ))
637
- ) {
638
- <span class="cstat-no" title="statement not covered" > acc.push(</span>
639
- &lt;NavLinkDrawer
640
- key={`nav-drawer-${url}-${label}`}
641
- leftIcon={Icon}
642
- listOfLinks={filteredListOfLinks}
643
- isExpanded={isExpanded}
644
- staticDrawer={false}
645
- openByDefault
646
- isAlwaysOpen
647
- {...sharedProps}
648
- {...rest}
649
- /&gt;
609
+ const markNotificationClosed = <span class="fstat-no" title="function not covered" >()</span> =&gt; {
610
+ const dateDismissed = <span class="cstat-no" title="statement not covered" >new Date().toISOString();</span>
611
+ const storageNotification = <span class="cstat-no" title="statement not covered" >result || {};</span>
612
+ &nbsp;
613
+ <span class="cstat-no" title="statement not covered" > if (storageNotification &amp;&amp; Object.keys(storageNotification).length &gt; 0) {</span>
614
+ <span class="cstat-no" title="statement not covered" > window.localStorage.setItem(</span>
615
+ 'notifications',
616
+ JSON.stringify({
617
+ ...storageNotification,
618
+ content: {
619
+ ...storageNotification.content,
620
+ dateDismissed,
621
+ },
622
+ })
650
623
  );
651
624
  } else {
652
- <span class="cstat-no" title="statement not covered" > acc.push(</span>
653
- &lt;NavLinkInline
654
- key={`nav-link-${url}-${label}`}
655
- icon={Icon}
656
- useTooltips={useTooltips}
657
- showLabel={isExpanded}
658
- {...sharedProps}
659
- {...rest}
660
- /&gt;
625
+ <span class="cstat-no" title="statement not covered" > window.localStorage.setItem(</span>
626
+ 'notifications',
627
+ JSON.stringify({
628
+ ...storageNotification,
629
+ content: {
630
+ name: 'header-notification',
631
+ dateDismissed,
632
+ },
633
+ })
661
634
  );
662
635
  }
663
- <span class="cstat-no" title="statement not covered" > return acc;</span>
664
- }, []);
636
+ };
637
+ &nbsp;
638
+ /**
639
+ * Callback when the user dimisses a notification. Mark it as dismissed in
640
+ * localStorage, empty the contents, and dispatch a custom event to notify
641
+ * any observers that it has been dismissed.
642
+ */
643
+ &nbsp;
644
+ const collapseNotification = <span class="fstat-no" title="function not covered" >(e</span>) =&gt; {
645
+ <span class="cstat-no" title="statement not covered" > e.stopPropagation();</span>
646
+ <span class="cstat-no" title="statement not covered" > markNotificationClosed();</span>
647
+ <span class="cstat-no" title="statement not covered" > collapsedBannerRef.current.setAttribute('tabIndex', ' ');</span>
648
+ <span class="cstat-no" title="statement not covered" > bannerContainerRef.current.style.transition = 'height .2s ease-out';</span>
649
+ &nbsp;
650
+ <span class="cstat-no" title="statement not covered" > setExpanded(false);</span>
651
+ <span class="cstat-no" title="statement not covered" > setHeight(`${collapsedWrapperRef.current.offsetHeight}px`);</span>
652
+ };
653
+ &nbsp;
654
+ const expandNotification = <span class="fstat-no" title="function not covered" >()</span> =&gt; {
655
+ <span class="cstat-no" title="statement not covered" > collapsedBannerRef.current.setAttribute('tabIndex', '-1');</span>
656
+ <span class="cstat-no" title="statement not covered" > bannerContainerRef.current.style.transition = 'height .2s ease-out';</span>
657
+ <span class="cstat-no" title="statement not covered" > setExpanded(true);</span>
658
+ <span class="cstat-no" title="statement not covered" > setHeight('100%');</span>
659
+ };
660
+ &nbsp;
661
+ /**
662
+ * Render the notification if it has any contents.
663
+ *
664
+ * @return {String} HTML content
665
+ */
665
666
  &nbsp;
666
667
  return (
667
- &lt;div className="sidebar-content"&gt;
668
- &lt;AnimationGroup display={isExpanded}&gt;
669
- &lt;h1 className="label"&gt;{name}&lt;/h1&gt;
670
- &lt;/AnimationGroup&gt;
671
- &lt;div className="level-one-nav animation-flat"&gt;
672
- &lt;NavLinkContainer listOfLinks={navLinks} /&gt;
673
- &lt;/div&gt;
674
- &lt;/div&gt;
668
+ &lt;&gt;
669
+ {!content || <span class="branch-1 cbranch-no" title="branch not covered" >!enabled </span>? (
670
+ &lt;div id="notification-banner" /&gt;
671
+ ) : (
672
+ <span class="branch-1 cbranch-no" title="branch not covered" > &lt;div</span>
673
+ ref={bannerContainerRef}
674
+ style={{ height }}
675
+ className={`notification-banner notification-banner-${color} ${cssDeterminesBannerView}`}
676
+ &gt;
677
+ &lt;ExpandedView
678
+ label={label}
679
+ expanded={expanded}
680
+ content={content}
681
+ dismissable={dismissable}
682
+ collapseNotification={collapseNotification}
683
+ /&gt;
684
+ &nbsp;
685
+ &lt;CollapsedView
686
+ expandNotification={expandNotification}
687
+ label={label}
688
+ ref={{ collapsedWrapperRef, collapsedBannerRef }}
689
+ /&gt;
690
+ &lt;/div&gt;
691
+ )}
692
+ &lt;/&gt;
675
693
  );
676
694
  };
677
695
  &nbsp;
678
- LevelOneContent.propTypes = {
679
- isExpanded: PropTypes.bool,
680
- config: PropTypes.object,
681
- levelOneContent: PropTypes.shape({
682
- default: PropTypes.arrayOf(PropTypes.object),
683
- devPre: PropTypes.arrayOf(PropTypes.object),
684
- viewer: PropTypes.arrayOf(PropTypes.object),
685
- internalReviewers: PropTypes.arrayOf(PropTypes.object),
696
+ NotificationBanner.propTypes = {
697
+ result: PropTypes.shape({
698
+ content: PropTypes.shape({
699
+ color: PropTypes.string,
700
+ content: PropTypes.string,
701
+ dateDismissed: PropTypes.string,
702
+ dateUpdated: PropTypes.string,
703
+ dismissable: PropTypes.bool,
704
+ enabled: PropTypes.bool,
705
+ label: PropTypes.string,
706
+ }),
686
707
  }),
687
708
  };
688
709
  &nbsp;
689
- export default LevelOneContent;
710
+ NotificationBanner.defaultProps = {
711
+ result: {
712
+ content: {
713
+ color: 'blue',
714
+ content: null,
715
+ dismissable: true,
716
+ enabled: true,
717
+ label: 'Update',
718
+ },
719
+ },
720
+ };
721
+ &nbsp;
722
+ export default withGetConfig(NotificationBanner, {
723
+ timeout: 5,
724
+ url: '/config/notification',
725
+ localStorageName: 'active_notification',
726
+ equalityCheckExclude: ['dateDismissed', 'dateUpdated'],
727
+ defaultContent: {},
728
+ });
690
729
  &nbsp;</pre></td></tr></table></pre>
691
730
 
692
731
  <div class='push'></div><!-- for sticky footer -->
@@ -694,16 +733,16 @@ export default LevelOneContent;
694
733
  <div class='footer quiet pad2 space-top1 center small'>
695
734
  Code coverage generated by
696
735
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
697
- at Fri Apr 29 2022 13:58:50 GMT-0400 (Eastern Daylight Time)
736
+ at Tue Nov 29 2022 19:35:20 GMT-0800 (Pacific Standard Time)
698
737
  </div>
699
- <script src="../../../prettify.js"></script>
738
+ <script src="../../prettify.js"></script>
700
739
  <script>
701
740
  window.onload = function () {
702
741
  prettyPrint();
703
742
  };
704
743
  </script>
705
- <script src="../../../sorter.js"></script>
706
- <script src="../../../block-navigation.js"></script>
744
+ <script src="../../sorter.js"></script>
745
+ <script src="../../block-navigation.js"></script>
707
746
  </body>
708
747
  </html>
709
748