qpp-style 9.52.0 → 9.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/components/Header/HeaderUI.jsx +1 -1
  2. package/components/SideNav/Content/LevelOneContent.jsx +22 -21
  3. package/components/SideNav/Content/SelectRole/utils.js +13 -0
  4. package/components/SideNav/UI/SideNavUI.jsx +82 -24
  5. package/coverage/clover.xml +157 -131
  6. package/coverage/coverage-final.json +10 -10
  7. package/coverage/lcov-report/components/Dropdown/index.html +116 -0
  8. package/coverage/lcov-report/components/Dropdown/index.js.html +289 -0
  9. package/coverage/lcov-report/components/SanitizedContent/index.html +19 -19
  10. package/coverage/lcov-report/components/SanitizedContent/index.jsx.html +434 -437
  11. package/coverage/lcov-report/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +163 -0
  12. package/coverage/lcov-report/components/SideNav/AnimationGroup/index.html +116 -0
  13. package/coverage/lcov-report/components/SideNav/Content/LevelOneContent.jsx.html +265 -0
  14. package/coverage/lcov-report/components/SideNav/Content/SelectRole/index.html +35 -20
  15. package/coverage/lcov-report/components/SideNav/Content/SelectRole/index.js.html +298 -0
  16. package/coverage/lcov-report/components/SideNav/Content/SelectRole/utils.js.html +229 -208
  17. package/coverage/lcov-report/components/SideNav/Content/index.html +131 -0
  18. package/coverage/lcov-report/components/SideNav/Content/index.js.html +94 -0
  19. package/coverage/lcov-report/components/SideNav/Details/IndividualDetails.jsx.html +136 -0
  20. package/coverage/lcov-report/components/SideNav/Details/PracticeDetails.jsx.html +235 -0
  21. package/coverage/lcov-report/components/SideNav/Details/index.html +146 -0
  22. package/coverage/lcov-report/components/SideNav/Details/index.js.html +97 -0
  23. package/coverage/lcov-report/components/SideNav/Links/CmsSwitchLink.jsx.html +205 -0
  24. package/coverage/lcov-report/components/SideNav/Links/NavItemInline.jsx.html +244 -0
  25. package/coverage/lcov-report/components/SideNav/Links/NavLinkContainer.jsx.html +184 -0
  26. package/coverage/lcov-report/components/SideNav/Links/NavLinkDrawer.jsx.html +988 -0
  27. package/coverage/lcov-report/components/SideNav/Links/NavLinkInline.jsx.html +418 -0
  28. package/coverage/lcov-report/components/SideNav/Links/NavLinkToggle.jsx.html +184 -0
  29. package/coverage/lcov-report/components/SideNav/Links/index.html +206 -0
  30. package/coverage/lcov-report/components/SideNav/Links/index.js.html +124 -0
  31. package/coverage/lcov-report/components/SideNav/UI/DynamicContent.jsx.html +628 -0
  32. package/coverage/lcov-report/components/SideNav/UI/SideNavUI.jsx.html +712 -0
  33. package/coverage/lcov-report/components/SideNav/UI/default-markup.js.html +97 -0
  34. package/coverage/lcov-report/components/SideNav/UI/index.html +161 -0
  35. package/coverage/lcov-report/components/SideNav/UI/index.js.html +94 -0
  36. package/coverage/lcov-report/components/SideNav/helpers.js.html +77 -1157
  37. package/coverage/lcov-report/components/SideNav/index.html +22 -22
  38. package/coverage/lcov-report/index.html +46 -46
  39. package/coverage/lcov-report/lib/SvgComponents.jsx.html +1225 -1246
  40. package/coverage/lcov-report/lib/index.html +22 -37
  41. package/coverage/lcov-report/react/components/Accordion/index.html +1 -1
  42. package/coverage/lcov-report/react/components/Accordion/index.jsx.html +1 -1
  43. package/coverage/lcov-report/react/components/Button/index.html +1 -1
  44. package/coverage/lcov-report/react/components/Button/index.js.html +1 -1
  45. package/coverage/lcov-report/react/components/Dropdown/index.html +21 -21
  46. package/coverage/lcov-report/react/components/Dropdown/index.js.html +27 -27
  47. package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +1 -1
  48. package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +1 -1
  49. package/coverage/lcov-report/react/components/Error/error.js.html +1 -1
  50. package/coverage/lcov-report/react/components/Error/index.html +1 -1
  51. package/coverage/lcov-report/react/components/Footer/FooterTooltip.jsx.html +1 -1
  52. package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +1 -1
  53. package/coverage/lcov-report/react/components/Footer/SocialLinks.jsx.html +1 -1
  54. package/coverage/lcov-report/react/components/Footer/Subscribe.jsx.html +1 -1
  55. package/coverage/lcov-report/react/components/Footer/footer.js.html +1 -1
  56. package/coverage/lcov-report/react/components/Footer/index.html +1 -1
  57. package/coverage/lcov-report/react/components/GovBanner/index.html +1 -1
  58. package/coverage/lcov-report/react/components/GovBanner/index.js.html +1 -1
  59. package/coverage/lcov-report/react/components/Header/HeaderAccountMenu.jsx.html +1 -1
  60. package/coverage/lcov-report/react/components/Header/HeaderCancel.jsx.html +1 -1
  61. package/coverage/lcov-report/react/components/Header/HeaderContainer.jsx.html +1 -1
  62. package/coverage/lcov-report/react/components/Header/HeaderLogo.jsx.html +1 -1
  63. package/coverage/lcov-report/react/components/Header/HeaderMenuButton.js.html +1 -1
  64. package/coverage/lcov-report/react/components/Header/HeaderMenuItem.jsx.html +1 -1
  65. package/coverage/lcov-report/react/components/Header/HeaderMenuLink.js.html +1 -1
  66. package/coverage/lcov-report/react/components/Header/HeaderMenuSignOutButton.js.html +1 -1
  67. package/coverage/lcov-report/react/components/Header/HeaderMobileButton.js.html +1 -1
  68. package/coverage/lcov-report/react/components/Header/HeaderUI.jsx.html +2 -2
  69. package/coverage/lcov-report/react/components/Header/HelpIcon.jsx.html +1 -1
  70. package/coverage/lcov-report/react/components/Header/ImpersonatorBanner.jsx.html +1 -1
  71. package/coverage/lcov-report/react/components/Header/NavigationButtonIcon.jsx.html +1 -1
  72. package/coverage/lcov-report/react/components/Header/PreviewBanner.jsx.html +1 -1
  73. package/coverage/lcov-report/react/components/Header/header.js.html +1 -1
  74. package/coverage/lcov-report/react/components/Header/hooks.js.html +1 -1
  75. package/coverage/lcov-report/react/components/Header/index.html +1 -1
  76. package/coverage/lcov-report/react/components/Header/utag-helpers.js.html +1 -1
  77. package/coverage/lcov-report/react/components/HeaderSearchBar/index.html +1 -1
  78. package/coverage/lcov-report/react/components/HeaderSearchBar/index.jsx.html +1 -1
  79. package/coverage/lcov-report/react/components/Infotip/Infotip.jsx.html +1 -1
  80. package/coverage/lcov-report/react/components/Infotip/InfotipContent.jsx.html +1 -1
  81. package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +1 -1
  82. package/coverage/lcov-report/react/components/Infotip/index.html +1 -1
  83. package/coverage/lcov-report/react/components/Infotip/index.js.html +1 -1
  84. package/coverage/lcov-report/react/components/Modal/LegacyModal.jsx.html +1 -1
  85. package/coverage/lcov-report/react/components/Modal/Modal.jsx.html +1 -1
  86. package/coverage/lcov-report/react/components/Modal/index.html +1 -1
  87. package/coverage/lcov-report/react/components/Modal/index.jsx.html +1 -1
  88. package/coverage/lcov-report/react/components/NotificationBanner/CollapsedView.js.html +1 -1
  89. package/coverage/lcov-report/react/components/NotificationBanner/ExpandedView.js.html +1 -1
  90. package/coverage/lcov-report/react/components/NotificationBanner/index.html +1 -1
  91. package/coverage/lcov-report/react/components/NotificationBanner/index.js.html +1 -1
  92. package/coverage/lcov-report/react/components/SanitizedContent/index.html +1 -1
  93. package/coverage/lcov-report/react/components/SanitizedContent/index.jsx.html +7 -7
  94. package/coverage/lcov-report/react/components/Session/Session.jsx.html +1 -1
  95. package/coverage/lcov-report/react/components/Session/SessionDialogWrapped.jsx.html +1 -1
  96. package/coverage/lcov-report/react/components/Session/index.html +1 -1
  97. package/coverage/lcov-report/react/components/Session/index.jsx.html +1 -1
  98. package/coverage/lcov-report/react/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +3 -3
  99. package/coverage/lcov-report/react/components/SideNav/AnimationGroup/index.html +1 -1
  100. package/coverage/lcov-report/react/components/SideNav/Content/LevelOneContent.jsx.html +47 -44
  101. package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.html +31 -31
  102. package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.js.html +45 -45
  103. package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/utils.js.html +105 -66
  104. package/coverage/lcov-report/react/components/SideNav/Content/index.html +12 -12
  105. package/coverage/lcov-report/react/components/SideNav/Content/index.js.html +1 -1
  106. package/coverage/lcov-report/react/components/SideNav/Details/IndividualDetails.jsx.html +1 -1
  107. package/coverage/lcov-report/react/components/SideNav/Details/PracticeDetails.jsx.html +1 -1
  108. package/coverage/lcov-report/react/components/SideNav/Details/index.html +1 -1
  109. package/coverage/lcov-report/react/components/SideNav/Details/index.js.html +1 -1
  110. package/coverage/lcov-report/react/components/SideNav/Links/CmsSwitchLink.jsx.html +1 -1
  111. package/coverage/lcov-report/react/components/SideNav/Links/NavItemInline.jsx.html +1 -1
  112. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkContainer.jsx.html +1 -1
  113. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkDrawer.jsx.html +1 -1
  114. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkInline.jsx.html +1 -1
  115. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkToggle.jsx.html +4 -4
  116. package/coverage/lcov-report/react/components/SideNav/Links/index.html +1 -1
  117. package/coverage/lcov-report/react/components/SideNav/Links/index.js.html +1 -1
  118. package/coverage/lcov-report/react/components/SideNav/UI/DynamicContent.jsx.html +1 -1
  119. package/coverage/lcov-report/react/components/SideNav/UI/SideNavUI.jsx.html +236 -62
  120. package/coverage/lcov-report/react/components/SideNav/UI/default-markup.js.html +1 -1
  121. package/coverage/lcov-report/react/components/SideNav/UI/index.html +20 -20
  122. package/coverage/lcov-report/react/components/SideNav/UI/index.js.html +1 -1
  123. package/coverage/lcov-report/react/components/SideNav/helpers.js.html +4 -4
  124. package/coverage/lcov-report/react/components/SideNav/index.html +1 -1
  125. package/coverage/lcov-report/react/components/SideNav/index.js.html +1 -1
  126. package/coverage/lcov-report/react/components/hooks/index.html +1 -1
  127. package/coverage/lcov-report/react/components/hooks/useGetConfig.js.html +1 -1
  128. package/coverage/lcov-report/react/index.html +1 -1
  129. package/coverage/lcov-report/react/index.js.html +1 -1
  130. package/coverage/lcov-report/react/lib/Chevron.jsx.html +1 -1
  131. package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +2 -2
  132. package/coverage/lcov-report/react/lib/index.html +1 -1
  133. package/coverage/lcov-report/react/session/index.html +1 -1
  134. package/coverage/lcov-report/react/session/index.js.html +1 -1
  135. package/coverage/lcov-report/react/session/logout.js.html +1 -1
  136. package/coverage/lcov-report/react/session/refresh.js.html +1 -1
  137. package/coverage/lcov-report/react/session/ttl.js.html +1 -1
  138. package/coverage/lcov.info +310 -255
  139. package/dist/browser.js +1 -1
  140. package/dist/browser.js.map +1 -1
  141. package/dist/index.js +1 -1
  142. package/dist/index.js.map +1 -1
  143. package/dist/react/index.js +1 -1
  144. package/dist/react/index.js.LICENSE.txt +0 -10
  145. package/dist/react/index.js.map +1 -1
  146. package/package.json +15 -15
  147. package/test/components/SideNavUI.test.js +88 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qpp-style",
3
- "version": "9.52.0",
3
+ "version": "9.53.0",
4
4
  "description": "Shared style guide across the QPP program.",
5
5
  "main": "dist/index.js",
6
6
  "homepage": "https://cmsgov.github.io/qpp-style",
@@ -19,41 +19,41 @@
19
19
  "lint": "eslint 'components/**/*.{js,jsx}'"
20
20
  },
21
21
  "devDependencies": {
22
- "@babel/eslint-parser": "^7.28.6",
22
+ "@babel/eslint-parser": "^7.29.7",
23
23
  "@svgr/webpack": "^8.0.1",
24
24
  "@testing-library/react": "^16.3.2",
25
- "@types/node": "^24.12.2",
25
+ "@types/node": "^24.13.3",
26
26
  "@types/webpack": "^5.28.5",
27
- "autoprefixer": "^10.5.0",
28
- "babel-jest": "^30.3.0",
27
+ "autoprefixer": "^10.5.2",
28
+ "babel-jest": "^30.4.1",
29
29
  "babel-loader": "^10.1.1",
30
30
  "babel-plugin-transform-es2015-modules-umd": "^6.24.1",
31
31
  "copy-webpack-plugin": "^14.0.0",
32
32
  "css-loader": "^7.1.4",
33
- "eslint": "^9.39.4",
33
+ "eslint": "^9.39.5",
34
34
  "eslint-config-prettier": "^10.1.8",
35
35
  "eslint-plugin-babel": "^5.3.1",
36
- "eslint-plugin-prettier": "^5.5.5",
36
+ "eslint-plugin-prettier": "^5.5.6",
37
37
  "eslint-plugin-react": "^7.37.5",
38
38
  "eslint-webpack-plugin": "^6.0.0",
39
39
  "gh-pages": "^6.3.0",
40
40
  "husky": "^9.1.7",
41
- "jest": "^30.3.0",
42
- "jest-environment-jsdom": "^30.3.0",
41
+ "jest": "^30.4.2",
42
+ "jest-environment-jsdom": "^30.4.1",
43
43
  "jsonwebtoken": "^9.0.3",
44
44
  "lint-staged": "^16.4.0",
45
45
  "mini-css-extract-plugin": "^2.10.2",
46
- "prettier": "^3.8.3",
46
+ "prettier": "^3.9.5",
47
47
  "react": "^18.3.1",
48
48
  "react-dom": "^18.3.1",
49
49
  "rimraf": "^6.1.3",
50
- "sass": "^1.99.0",
51
- "sass-loader": "^16.0.7",
50
+ "sass": "^1.101.0",
51
+ "sass-loader": "^16.0.8",
52
52
  "style-loader": "^4.0.0",
53
53
  "svgo": "^4.0.1",
54
54
  "svgo-loader": "^4.0.0",
55
- "terser-webpack-plugin": "^5.4.0",
56
- "webpack": "^5.106.2",
55
+ "terser-webpack-plugin": "^5.6.1",
56
+ "webpack": "^5.108.4",
57
57
  "webpack-cli": "^6.0.1"
58
58
  },
59
59
  "lint-staged": {
@@ -84,7 +84,7 @@
84
84
  "url": "https://github.com/CMSgov/qpp-style/issues"
85
85
  },
86
86
  "dependencies": {
87
- "@ariakit/react": "^0.4.25",
87
+ "@ariakit/react": "^0.4.32",
88
88
  "@material-design-icons/svg": "^0.14.15",
89
89
  "cookie": "^1.1.1",
90
90
  "jwt-decode": "^4.0.0",
@@ -1,9 +1,16 @@
1
- import { render } from '@testing-library/react';
1
+ import { render, fireEvent, waitFor, screen } from '@testing-library/react';
2
2
  import jwt from 'jsonwebtoken';
3
3
 
4
4
  import { SideNavUI } from '../../components/SideNav/UI';
5
5
 
6
6
  describe('SideNavUI', () => {
7
+ afterEach(() => {
8
+ localStorage.clear();
9
+ document.cookie = 'selected_role=; expires=Thu, 01 Jan 1970 00:00:00 UTC; Path=/;';
10
+ delete global.fetch;
11
+ window.history.pushState({}, '', '/');
12
+ });
13
+
7
14
  it('renders the sidebar HTML', () => {
8
15
  const token = jwt.sign(
9
16
  {
@@ -19,4 +26,84 @@ describe('SideNavUI', () => {
19
26
  const { container } = render(<SideNavUI svgIcons="" />);
20
27
  expect(container.querySelector('aside')).toBeDefined();
21
28
  });
29
+
30
+ it('re-fetches /config/side-navigation with the new role when the role stays on the same page', async () => {
31
+ localStorage.setItem('selectedUserRole', 'QPP User');
32
+ const sideNavOptions = [
33
+ { name: 'QPP User', value: 'QPP User' },
34
+ { name: 'Reviewer', value: 'Reviewer' },
35
+ ];
36
+ global.fetch = jest.fn().mockResolvedValue({
37
+ json: () =>
38
+ Promise.resolve({
39
+ markup: '<nav>content</nav>',
40
+ sideNavOptions,
41
+ hasMultipleRoles: true,
42
+ }),
43
+ });
44
+
45
+ // Reviewer's default page is /user/reviewers - starting there means
46
+ // selecting Reviewer will NOT trigger a redirect, so the in-place
47
+ // refetch should still happen.
48
+ window.history.pushState({}, '', '/user/reviewers');
49
+
50
+ render(<SideNavUI svgIcons="" />);
51
+
52
+ await waitFor(() => expect(global.fetch).toHaveBeenCalled());
53
+
54
+ const dropdown = await screen.findByLabelText('Select User Role');
55
+ global.fetch.mockClear();
56
+
57
+ fireEvent.change(dropdown, { target: { value: 'Reviewer' } });
58
+
59
+ await waitFor(() =>
60
+ expect(global.fetch).toHaveBeenCalledWith(
61
+ expect.stringContaining('/config/side-navigation?role=Reviewer')
62
+ )
63
+ );
64
+ });
65
+
66
+ it('skips the in-place refetch when the role change triggers a redirect to a different page', async () => {
67
+ localStorage.setItem('selectedUserRole', 'QPP User');
68
+ const sideNavOptions = [
69
+ { name: 'QPP User', value: 'QPP User' },
70
+ { name: 'Reviewer', value: 'Reviewer' },
71
+ ];
72
+ global.fetch = jest.fn().mockResolvedValue({
73
+ json: () =>
74
+ Promise.resolve({
75
+ markup: '<nav>content</nav>',
76
+ sideNavOptions,
77
+ hasMultipleRoles: true,
78
+ }),
79
+ });
80
+
81
+ // QPP User's default page is /user/submissions, which differs from
82
+ // Reviewer's default page (/user/reviewers), so selecting Reviewer
83
+ // triggers a redirect (redirectPage calls window.location.assign, which
84
+ // jsdom doesn't implement and logs a benign "not implemented" error -
85
+ // that's expected here and safe to ignore). The remount that follows a
86
+ // real page navigation is responsible for fetching fresh config, so no
87
+ // in-place refetch should occur in this component during the redirect.
88
+ const consoleErrorSpy = jest
89
+ .spyOn(console, 'error')
90
+ .mockImplementation(() => {});
91
+ window.history.pushState({}, '', '/user/submissions');
92
+
93
+ render(<SideNavUI svgIcons="" />);
94
+
95
+ await waitFor(() => expect(global.fetch).toHaveBeenCalled());
96
+
97
+ const dropdown = await screen.findByLabelText('Select User Role');
98
+ global.fetch.mockClear();
99
+
100
+ fireEvent.change(dropdown, { target: { value: 'Reviewer' } });
101
+
102
+ // Give any (incorrect) in-place refetch a chance to fire before asserting
103
+ // it didn't.
104
+ await new Promise((resolve) => setTimeout(resolve, 0));
105
+ expect(global.fetch).not.toHaveBeenCalled();
106
+
107
+ consoleErrorSpy.mockRestore();
108
+ });
22
109
  });