qpp-style 9.28.3-mo-beta.0 → 9.28.4-mo-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 (33) hide show
  1. package/components/Accordion/index.jsx +5 -1
  2. package/components/SideNav/Content/SelectRole/index.js +10 -18
  3. package/components/SideNav/Content/SelectRole/utils.js +41 -13
  4. package/components/SideNav/Links/NavLinkDrawer.jsx +20 -3
  5. package/components/SideNav/helpers.js +10 -2
  6. package/dist/browser.js +1 -1
  7. package/dist/browser.js.map +1 -1
  8. package/dist/index.js +1 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/react/index.js +1 -1
  11. package/dist/react/index.js.map +1 -1
  12. package/images/icons/svg/checkmark.svg +2 -2
  13. package/images/icons/svg/chevron-down.svg +6 -6
  14. package/images/icons/svg/chevron-left.svg +5 -5
  15. package/images/icons/svg/chevron-right.svg +5 -5
  16. package/images/icons/svg/chevron-up.svg +5 -5
  17. package/images/icons/svg/clipboard.svg +1 -1
  18. package/images/icons/svg/divide.svg +3 -3
  19. package/images/icons/svg/doctors-and-clinicians-preview.svg +3 -3
  20. package/images/icons/svg/equals.svg +3 -3
  21. package/images/icons/svg/exclamation.svg +4 -5
  22. package/images/icons/svg/info.svg +7 -10
  23. package/images/icons/svg/manage-user-access.svg +3 -3
  24. package/images/icons/svg/multiply.svg +3 -3
  25. package/images/icons/svg/performance-feedback.svg +1 -1
  26. package/images/icons/svg/plus.svg +3 -3
  27. package/images/icons/svg/preview.svg +6 -8
  28. package/images/icons/svg/reporting.svg +6 -8
  29. package/images/icons/svg/save-disk.svg +2 -2
  30. package/images/icons/svg/subtract.svg +2 -2
  31. package/images/icons/svg/targeted-review.svg +6 -6
  32. package/package.json +2 -1
  33. package/styles/components/_accordion.scss +7 -0
@@ -38,7 +38,9 @@ const Accordion = (props) => {
38
38
  return (
39
39
  <div className="accordion-section" data-testid="accordion">
40
40
  <button
41
- className={`accordion ${setActive}`}
41
+ className={`accordion ${setActive} ${
42
+ setActive && props.isSticky ? 'sticky' : ''
43
+ }`}
42
44
  aria-label={props.title}
43
45
  aria-pressed={ariaPressed}
44
46
  aria-expanded={ariaPressed}
@@ -83,11 +85,13 @@ Accordion.propTypes = {
83
85
  centerItem: PropTypes.string,
84
86
  rightItem: PropTypes.string,
85
87
  isOpen: PropTypes.bool,
88
+ isSticky: PropTypes.bool,
86
89
  };
87
90
 
88
91
  Accordion.defaultProps = {
89
92
  title: '',
90
93
  isOpen: false,
94
+ isSticky: false,
91
95
  };
92
96
 
93
97
  export default Accordion;
@@ -54,26 +54,18 @@ const SelectRole = ({ selectedRole, setSelectedRole }) => {
54
54
  }
55
55
  }, []);
56
56
 
57
- const singleRoleUser = ROLE_OPTIONS.length === 1;
58
-
59
- const MultiRoleDropdown = () => (
60
- <Dropdown
61
- value={selectedRole}
62
- name="user-role-selection"
63
- ariaLabel="Select User Role"
64
- className="qpp-u-width--100 SelectRole__Dropdown"
65
- options={ROLE_OPTIONS}
66
- onChange={handleSelection}
67
- disabled={isHelpdeskRoleAndImpersonating}
68
- />
69
- );
70
-
71
57
  return (
72
58
  <div className="SelectRole__Container">
73
- <p className="SelectRole__Text">
74
- You are viewing as a{singleRoleUser ? ` ${selectedRole}` : ''}
75
- </p>
76
- {!singleRoleUser && <MultiRoleDropdown />}
59
+ <p className="SelectRole__Text">You are viewing as a</p>
60
+ <Dropdown
61
+ value={selectedRole}
62
+ name="user-role-selection"
63
+ ariaLabel="Select User Role"
64
+ className="qpp-u-width--100 SelectRole__Dropdown"
65
+ options={ROLE_OPTIONS}
66
+ onChange={handleSelection}
67
+ disabled={isHelpdeskRoleAndImpersonating}
68
+ />
77
69
  </div>
78
70
  );
79
71
  };
@@ -11,19 +11,27 @@ const extractCookieValues = (cookies) => {
11
11
  return [hasAuthorizations, cmsInternalRoles];
12
12
  };
13
13
 
14
+ const reviewerRoles = [
15
+ 'QPP Self-Nomination',
16
+ 'QPP Targeted Review & Exceptions',
17
+ 'QPP Case Management - PIMMS Reviewer',
18
+ 'QPP Case Management - ACO PAC Reviewer',
19
+ 'QPP Case Management - CMS Reviewer',
20
+ ];
21
+
22
+ const cmsRoles = [
23
+ 'QPP Content Management - Author',
24
+ 'QPP Content Management - Approver',
25
+ 'QPP Content Management - Admin',
26
+ 'QPP Front-end - Author',
27
+ ];
28
+
14
29
  /**
15
30
  * Check if internal cms role is a Reviewer role
16
31
  * @param {string} cmsInternalRole
17
32
  * @returns {boolean}
18
33
  */
19
34
  export const isReviewerRole = (cmsInternalRole) => {
20
- const reviewerRoles = [
21
- 'QPP Self-Nomination',
22
- 'QPP Targeted Review & Exceptions',
23
- 'QPP Case Management - PIMMS Reviewer',
24
- 'QPP Case Management - ACO PAC Reviewer',
25
- 'QPP Case Management - CMS Reviewer',
26
- ];
27
35
  return reviewerRoles.includes(cmsInternalRole);
28
36
  };
29
37
 
@@ -49,15 +57,35 @@ const hasHelpdeskRole = (cmsInternalRoles) => {
49
57
 
50
58
  const hasContentMgmtRole = (cmsInternalRoles) => {
51
59
  if (!cmsInternalRoles) return false;
52
- const cmsRoles = [
53
- 'QPP Content Management - Author',
54
- 'QPP Content Management - Approver',
55
- 'QPP Content Management - Admin',
56
- 'QPP Front-end - Author',
57
- ];
58
60
  return cmsInternalRoles.some((role) => cmsRoles.includes(role));
59
61
  };
60
62
 
63
+ const includesRole = (arr, roles) => roles.some((role) => arr.includes(role));
64
+
65
+ /**
66
+ * Check if internal cms roles includes only Content Manager roles
67
+ * @param {array} internalAuthz array of values
68
+ * @returns {boolean}
69
+ */
70
+ export const isOnlyContentManager = (internalAuthz) => {
71
+ return (
72
+ includesRole(internalAuthz, cmsRoles) &&
73
+ !includesRole(internalAuthz, reviewerRoles)
74
+ );
75
+ };
76
+
77
+ /**
78
+ * Check if internal cms roles includes only Internal Reviewers roles
79
+ * @param {array} internalAuthz array of values
80
+ * @returns {boolean}
81
+ */
82
+ export const isOnlyInternalReviewer = (internalAuthz) => {
83
+ return (
84
+ includesRole(internalAuthz, reviewerRoles) &&
85
+ !includesRole(internalAuthz, cmsRoles)
86
+ );
87
+ };
88
+
61
89
  /**
62
90
  * Transforms cookie values into optios format for use in role seelction dropdown
63
91
  * @param {array} values extracted & parsed vookie values
@@ -28,6 +28,9 @@ const NavLinkDrawer = ({
28
28
  }) => {
29
29
  const [isOpen, setIsOpen] = useState(openByDefault);
30
30
  const MANAGE_ACCESS = '/user/manage-access';
31
+ const ELIGIBILITY_REPORTING = '/user/dashboard';
32
+ const REGISTRATION = '/user/registration';
33
+ const SUBMISSION_FEEDBACK = '/user/submissions/feedback';
31
34
 
32
35
  const toggleDrawer = () => {
33
36
  if (!isExpanded && typeof sidebarExpand === 'function') {
@@ -44,11 +47,25 @@ const NavLinkDrawer = ({
44
47
  };
45
48
 
46
49
  const reRouteHandler = () => {
47
- if (url === MANAGE_ACCESS) {
48
- return (window.location.href = MANAGE_ACCESS);
50
+ if (url) {
51
+ window.location.href = url;
49
52
  }
50
53
  };
51
54
 
55
+ const parentRerouteUrls = [
56
+ MANAGE_ACCESS,
57
+ ELIGIBILITY_REPORTING,
58
+ REGISTRATION,
59
+ SUBMISSION_FEEDBACK,
60
+ ];
61
+
62
+ const parentReroute = (url) => {
63
+ if (parentRerouteUrls.includes(url)) {
64
+ return false;
65
+ }
66
+ return true;
67
+ };
68
+
52
69
  const isLinkActive = (link, func) => {
53
70
  if (typeof func === 'function') {
54
71
  return func(link);
@@ -201,7 +218,7 @@ const NavLinkDrawer = ({
201
218
  {...(!isAlwaysOpen ? { 'aria-pressed': isOpen } : {})}
202
219
  tabIndex="0"
203
220
  aria-label={label}
204
- {...((url !== MANAGE_ACCESS && isAlwaysOpen) || disabled
221
+ {...((parentReroute(url) && isAlwaysOpen) || disabled
205
222
  ? { disabled: isAlwaysOpen || disabled }
206
223
  : {})}
207
224
  className={`${className} ${expandedClass} ${highlightTitle(
@@ -17,7 +17,11 @@ import {
17
17
  AuthorContentIcon,
18
18
  RegistrationIcon,
19
19
  } from '../../lib/SvgComponents';
20
- import { isReviewerRole } from './Content/SelectRole/utils';
20
+ import {
21
+ isReviewerRole,
22
+ isOnlyInternalReviewer,
23
+ isOnlyContentManager,
24
+ } from './Content/SelectRole/utils';
21
25
 
22
26
  const submissionsUrl = '/user/submissions';
23
27
  const dashboardUrl = '/user/dashboard';
@@ -193,7 +197,11 @@ const isMultiRoleUser = (docCookie) => {
193
197
  return activeRoles.add(element);
194
198
  });
195
199
 
196
- return activeRoles.size > 1;
200
+ return (
201
+ !isOnlyContentManager(internalAuthz) &&
202
+ !isOnlyInternalReviewer(internalAuthz) &&
203
+ activeRoles.size > 1
204
+ );
197
205
  };
198
206
 
199
207
  /**