qpp-style 1.0.0-cc.77 → 1.0.0-cc.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/Breadcrumb/Breadcrumb.stories.js +18 -0
- package/components/Breadcrumb/index.js +4 -4
- package/components/Header/HeaderMenuItem.jsx +1 -10
- package/components/Header/HeaderUI.jsx +2 -1
- package/components/Header/ImpersonatorBanner.jsx +55 -0
- package/components/SideNav/Content/LevelOneContent.jsx +18 -4
- package/components/SideNav/UI/SideNavUI.jsx +2 -0
- package/components/SideNav/UI/default-content.json +23 -0
- package/coverage/clover.xml +213 -141
- package/coverage/coverage-final.json +36 -34
- package/coverage/lcov-report/index.html +100 -85
- package/coverage/lcov-report/react/components/Accordion/index.html +1 -1
- package/coverage/lcov-report/react/components/Accordion/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Button/index.html +111 -0
- package/coverage/lcov-report/react/components/Button/index.js.html +350 -0
- package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +5 -5
- package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Error/error.js.html +1 -1
- package/coverage/lcov-report/react/components/Error/index.html +4 -4
- package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +160 -118
- package/coverage/lcov-report/react/components/Footer/LegacyFooterUI.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Footer/SocialLinks.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Footer/Subscribe.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Footer/footer.js.html +1 -1
- package/coverage/lcov-report/react/components/Footer/index.html +19 -19
- package/coverage/lcov-report/react/components/Header/HeaderAccountMenu.jsx.html +2 -2
- package/coverage/lcov-report/react/components/Header/HeaderCancel.jsx.html +3 -3
- package/coverage/lcov-report/react/components/Header/HeaderContainer.jsx.html +14 -5
- package/coverage/lcov-report/react/components/Header/HeaderLogo.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Header/HeaderMenuButton.js.html +1 -1
- package/coverage/lcov-report/react/components/Header/HeaderMenuItem.jsx.html +3 -3
- package/coverage/lcov-report/react/components/Header/HeaderMenuLink.js.html +1 -1
- package/coverage/lcov-report/react/components/Header/HeaderMenuSignOutButton.js.html +2 -2
- package/coverage/lcov-report/react/components/Header/HeaderMobileButton.js.html +2 -2
- package/coverage/lcov-report/react/components/Header/HeaderUI.jsx.html +24 -3
- package/coverage/lcov-report/react/components/Header/HelpIcon.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Header/ImpersonatorBanner.jsx.html +245 -0
- package/coverage/lcov-report/react/components/Header/NavigationButtonIcon.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Header/header.js.html +8 -2
- package/coverage/lcov-report/react/components/Header/hooks.js.html +2 -2
- package/coverage/lcov-report/react/components/Header/index.html +36 -21
- package/coverage/lcov-report/react/components/Header/utag-helpers.js.html +1 -1
- package/coverage/lcov-report/react/components/Infotip/Infotip.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Infotip/index.html +1 -1
- package/coverage/lcov-report/react/components/Infotip/index.js.html +1 -1
- package/coverage/lcov-report/react/components/Modal/LegacyModal.jsx.html +3 -3
- package/coverage/lcov-report/react/components/Modal/Modal.jsx.html +5 -5
- package/coverage/lcov-report/react/components/Modal/index.html +10 -10
- package/coverage/lcov-report/react/components/Modal/index.jsx.html +2 -2
- package/coverage/lcov-report/react/components/NotificationBanner/index.html +3 -3
- package/coverage/lcov-report/react/components/NotificationBanner/index.js.html +4 -4
- package/coverage/lcov-report/react/components/SanitizedContent/index.html +1 -1
- package/coverage/lcov-report/react/components/SanitizedContent/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/SessionDialog/index.html +1 -1
- package/coverage/lcov-report/react/components/SessionDialog/sessionDialog.js.html +1 -1
- package/coverage/lcov-report/react/components/SessionDialogUI.jsx.html +2 -2
- package/coverage/lcov-report/react/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +24 -9
- package/coverage/lcov-report/react/components/SideNav/AnimationGroup/index.html +11 -11
- package/coverage/lcov-report/react/components/SideNav/Chart/ScoreChart.jsx.html +2 -2
- package/coverage/lcov-report/react/components/SideNav/Chart/index.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Chart/index.js.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Content/LevelOneContent.jsx.html +32 -14
- package/coverage/lcov-report/react/components/SideNav/Content/LevelTwoContent.jsx.html +3 -3
- package/coverage/lcov-report/react/components/SideNav/Content/index.html +22 -22
- package/coverage/lcov-report/react/components/SideNav/Content/index.js.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Details/IndividualDetails.jsx.html +3 -3
- package/coverage/lcov-report/react/components/SideNav/Details/PracticeDetails.jsx.html +3 -3
- package/coverage/lcov-report/react/components/SideNav/Details/index.html +9 -9
- package/coverage/lcov-report/react/components/SideNav/Details/index.js.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Links/CmsSwitchLink.jsx.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Links/NavItemInline.jsx.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkContainer.jsx.html +3 -3
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkDrawer.jsx.html +149 -17
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkInline.jsx.html +3 -3
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkToggle.jsx.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/Links/index.html +23 -23
- package/coverage/lcov-report/react/components/SideNav/Links/index.js.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/UI/SideNavUI.jsx.html +33 -12
- package/coverage/lcov-report/react/components/SideNav/UI/index.html +19 -19
- package/coverage/lcov-report/react/components/SideNav/UI/index.js.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/helpers.js.html +3 -3
- package/coverage/lcov-report/react/components/SideNav/index.html +1 -1
- package/coverage/lcov-report/react/components/SideNav/index.js.html +1 -1
- package/coverage/lcov-report/react/components/Tooltip/Tooltip.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Tooltip/index.html +1 -1
- package/coverage/lcov-report/react/components/Tooltip/index.js.html +1 -1
- package/coverage/lcov-report/react/components/Tooltip/position.js.html +1 -1
- package/coverage/lcov-report/react/components/hooks/index.html +3 -3
- package/coverage/lcov-report/react/components/hooks/useGetConfig.js.html +2 -2
- package/coverage/lcov-report/react/components/index.html +3 -3
- package/coverage/lcov-report/react/index.html +6 -6
- package/coverage/lcov-report/react/index.js.html +3 -3
- package/coverage/lcov-report/react/lib/Chevron.jsx.html +1 -1
- package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +1 -1
- package/coverage/lcov-report/react/lib/index.html +3 -3
- package/coverage/lcov-report/react/lib/svg-definitions.svg.html +1 -1
- package/coverage/lcov-report/react/session/index.html +21 -21
- package/coverage/lcov-report/react/session/index.js.html +1 -1
- package/coverage/lcov-report/react/session/logout.js.html +40 -13
- package/coverage/lcov-report/react/session/refresh.js.html +7 -7
- package/coverage/lcov-report/react/session/ttl.js.html +2 -2
- package/coverage/lcov.info +498 -327
- package/dist/browser.js +1 -1
- package/dist/browser.js.LICENSE.txt +17 -0
- package/dist/browser.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.LICENSE.txt +17 -0
- package/dist/index.js.map +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/package.json +6 -6
- package/session/logout.js +11 -2
- package/styles/qppds/components/sidebar/_sidebar.scss +2 -1
|
@@ -32,6 +32,24 @@ export const ExampleLightBreadcrumb = () => (
|
|
|
32
32
|
|
|
33
33
|
ExampleLightBreadcrumb.storyName = 'Light';
|
|
34
34
|
|
|
35
|
+
export const ExampleScreenreaderOnlyBreadcrumb = () => (
|
|
36
|
+
<div className="qppds qpp-u-padding--16 qpp-u-fill--blue-80">
|
|
37
|
+
<Breadcrumb
|
|
38
|
+
newBreadcrumb={boolean('newBreadcrumb', true)}
|
|
39
|
+
crumbs={[
|
|
40
|
+
{
|
|
41
|
+
url: '/',
|
|
42
|
+
category: 'MainContent',
|
|
43
|
+
label: 'Home',
|
|
44
|
+
title: 'Home',
|
|
45
|
+
},
|
|
46
|
+
'Mips Overview',
|
|
47
|
+
]}
|
|
48
|
+
/>
|
|
49
|
+
</div>
|
|
50
|
+
);
|
|
51
|
+
ExampleScreenreaderOnlyBreadcrumb.storyName = 'SR Only Breadcrumb';
|
|
52
|
+
|
|
35
53
|
export const ExampleDarkBreadcrumb = () => (
|
|
36
54
|
<div className="qppds qpp-u-padding--16">
|
|
37
55
|
<Breadcrumb
|
|
@@ -50,12 +50,12 @@ const Breadcrumb = ({
|
|
|
50
50
|
return (
|
|
51
51
|
<li
|
|
52
52
|
key={crumb}
|
|
53
|
-
className=
|
|
53
|
+
className={`${
|
|
54
|
+
i === crumbs.length - 1 ? 'sr-only' : ''
|
|
55
|
+
} qpp-c-breadcrumbs__list-itemqpp-c-breadcrumbs__list-item--current`}
|
|
54
56
|
aria-current="page"
|
|
55
57
|
>
|
|
56
|
-
<span
|
|
57
|
-
{crumb}
|
|
58
|
-
</span>
|
|
58
|
+
<span>{crumb}</span>
|
|
59
59
|
</li>
|
|
60
60
|
);
|
|
61
61
|
}
|
|
@@ -33,7 +33,6 @@ const excludedClickOutClasses = [
|
|
|
33
33
|
|
|
34
34
|
const HeaderMenuItem = ({
|
|
35
35
|
handleClick,
|
|
36
|
-
isMobileMenuExpanded,
|
|
37
36
|
columns,
|
|
38
37
|
menuName,
|
|
39
38
|
rows,
|
|
@@ -77,19 +76,12 @@ const HeaderMenuItem = ({
|
|
|
77
76
|
) {
|
|
78
77
|
return;
|
|
79
78
|
}
|
|
80
|
-
setOpenMobileSubMenu('')
|
|
81
79
|
closeMenus();
|
|
82
80
|
};
|
|
83
81
|
document.addEventListener('mousedown', listener);
|
|
84
82
|
return () => document.removeEventListener('mousedown', listener);
|
|
85
83
|
}, [menuRef]);
|
|
86
84
|
|
|
87
|
-
useEffect(() => {
|
|
88
|
-
if (!isMobileMenuExpanded || !isOpen){
|
|
89
|
-
setOpenMobileSubMenu('')
|
|
90
|
-
}
|
|
91
|
-
}, [isMobileMenuExpanded, isOpen])
|
|
92
|
-
|
|
93
85
|
return (
|
|
94
86
|
<li
|
|
95
87
|
key={`header-item-${menuIdentifier}`}
|
|
@@ -170,7 +162,7 @@ const HeaderMenuItem = ({
|
|
|
170
162
|
>
|
|
171
163
|
<Accordion
|
|
172
164
|
title={c.heading}
|
|
173
|
-
isOpen={
|
|
165
|
+
isOpen={openMobileSubMenu === c.heading}
|
|
174
166
|
>
|
|
175
167
|
<ul>
|
|
176
168
|
{c.items.map((item) => {
|
|
@@ -220,7 +212,6 @@ HeaderMenuItem.propTypes = {
|
|
|
220
212
|
subtitle: PropTypes.string.isRequired,
|
|
221
213
|
className: PropTypes.string,
|
|
222
214
|
handleClick: PropTypes.func.isRequired,
|
|
223
|
-
isMobileMenuExpanded: PropTypes.bool.isRequired,
|
|
224
215
|
};
|
|
225
216
|
HeaderMenuItem.defaultProps = {
|
|
226
217
|
menuName: '',
|
|
@@ -6,6 +6,7 @@ import HeaderCancel from './HeaderCancel.jsx';
|
|
|
6
6
|
import HeaderContainer from './HeaderContainer';
|
|
7
7
|
import HeaderMenuItem from './HeaderMenuItem';
|
|
8
8
|
import HeaderMobileButton from './HeaderMobileButton';
|
|
9
|
+
import ImpersonatorBanner from './ImpersonatorBanner';
|
|
9
10
|
import HelpIcon from './HelpIcon';
|
|
10
11
|
import defaultHeaderContent from './default-content.json';
|
|
11
12
|
import { HeaderStateProvider } from './hooks';
|
|
@@ -110,7 +111,6 @@ const HeaderUI = ({
|
|
|
110
111
|
handleClick={() => {
|
|
111
112
|
setIsMobileMenuExpanded(!isMobileMenuExpanded);
|
|
112
113
|
}}
|
|
113
|
-
isMobileMenuExpanded={isMobileMenuExpanded}
|
|
114
114
|
key={header.name}
|
|
115
115
|
{...header}
|
|
116
116
|
/>
|
|
@@ -127,6 +127,7 @@ const HeaderUI = ({
|
|
|
127
127
|
</ul>
|
|
128
128
|
</nav>
|
|
129
129
|
</HeaderContainer>
|
|
130
|
+
<ImpersonatorBanner />
|
|
130
131
|
</HeaderStateProvider>
|
|
131
132
|
);
|
|
132
133
|
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import cookie from 'cookie';
|
|
3
|
+
import axios from 'axios';
|
|
4
|
+
import CloseIcon from '@material-ui/icons/Close';
|
|
5
|
+
|
|
6
|
+
import { TextButton } from '../Button';
|
|
7
|
+
import { deleteImpersonatedUser } from '../../session/logout';
|
|
8
|
+
|
|
9
|
+
const ImpersonatorBanner = () => {
|
|
10
|
+
const { qpp_auth_token: token = null, qpp_impersonated_user: user = null } =
|
|
11
|
+
cookie.parse(document.cookie);
|
|
12
|
+
|
|
13
|
+
const className = [
|
|
14
|
+
'qpp-u-display--flex',
|
|
15
|
+
'qpp-u-justify-content--between',
|
|
16
|
+
'qpp-u-fill--gold-20',
|
|
17
|
+
'qpp-u-padding-x--40',
|
|
18
|
+
'qpp-u-padding-y--24',
|
|
19
|
+
'qpp-u-font-size--14',
|
|
20
|
+
'qpp-u-color--gray-80',
|
|
21
|
+
].join(' ');
|
|
22
|
+
|
|
23
|
+
const onClick = () => {
|
|
24
|
+
const fn = () => {
|
|
25
|
+
deleteImpersonatedUser({ qpp_impersonated_user: user });
|
|
26
|
+
window.location.reload();
|
|
27
|
+
};
|
|
28
|
+
return axios
|
|
29
|
+
.delete('/api/auth/users/impersonate', {
|
|
30
|
+
headers: {
|
|
31
|
+
Accept: 'application/vnd.qpp.cms.gov.v1+json',
|
|
32
|
+
Authorization: `Bearer ${token}`,
|
|
33
|
+
},
|
|
34
|
+
})
|
|
35
|
+
.then(fn, fn);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
token &&
|
|
40
|
+
user && (
|
|
41
|
+
<div className={className}>
|
|
42
|
+
<div>
|
|
43
|
+
VIEW ONLY | You are currently impersonating HARP user:{' '}
|
|
44
|
+
<strong>{user}</strong>
|
|
45
|
+
</div>
|
|
46
|
+
<TextButton onClick={onClick} className="qpp-u-color--gray-80">
|
|
47
|
+
Exit Impersonation Mode
|
|
48
|
+
<CloseIcon />
|
|
49
|
+
</TextButton>
|
|
50
|
+
</div>
|
|
51
|
+
)
|
|
52
|
+
);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export default ImpersonatorBanner;
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
PhysicianCompareIcon,
|
|
19
19
|
StarIcon,
|
|
20
20
|
TargetIcon,
|
|
21
|
+
IndividualReporting,
|
|
21
22
|
} from '../../../lib/SvgComponents';
|
|
22
23
|
import {
|
|
23
24
|
dashboardUrl,
|
|
@@ -45,6 +46,7 @@ const getIcon = (url) =>
|
|
|
45
46
|
'/user/exception/#/landing': HardshipIcon,
|
|
46
47
|
'/user/targeted-review/#/landing': TargetIcon,
|
|
47
48
|
'/user/test-data': MyTestDataIcon,
|
|
49
|
+
'/user/self-nomination/#/landing': IndividualReporting,
|
|
48
50
|
}[url] || null);
|
|
49
51
|
|
|
50
52
|
const LevelOneContent = ({
|
|
@@ -59,6 +61,8 @@ const LevelOneContent = ({
|
|
|
59
61
|
qpp_ehr_authorized,
|
|
60
62
|
qpp_has_non_registry_authorizations,
|
|
61
63
|
qpp_auth_token,
|
|
64
|
+
qpp_cms_internal_authorized,
|
|
65
|
+
qpp_can_impersonate,
|
|
62
66
|
} = cookie.parse(document.cookie);
|
|
63
67
|
|
|
64
68
|
let name = '';
|
|
@@ -67,15 +71,20 @@ const LevelOneContent = ({
|
|
|
67
71
|
name = `${firstName} ${lastName}`;
|
|
68
72
|
}
|
|
69
73
|
|
|
74
|
+
const canImpersonate = qpp_can_impersonate === 'true';
|
|
70
75
|
const hasAuthorizations = qpp_has_authorizations === 'true';
|
|
71
76
|
const hasApmPayments = user_has_apm_payments === 'true';
|
|
72
77
|
const isDevPre = qpp_is_dev_pre === 'true';
|
|
78
|
+
const isInternalReviewer = qpp_cms_internal_authorized === 'true';
|
|
73
79
|
const ehrAuthorized = qpp_ehr_authorized === 'true';
|
|
74
80
|
const hasNonRegistryAuthorizations =
|
|
75
81
|
qpp_has_non_registry_authorizations === 'true';
|
|
76
82
|
|
|
77
83
|
const linkClass = isExpanded ? 'link-inline' : 'link-collapsed';
|
|
78
|
-
|
|
84
|
+
let content = isDevPre ? levelOneContent?.devPre : levelOneContent?.default;
|
|
85
|
+
if (isInternalReviewer) {
|
|
86
|
+
content = levelOneContent?.internalReviewers
|
|
87
|
+
}
|
|
79
88
|
|
|
80
89
|
// Mapping side nav link urls to the conditions that determine their inclusion in the side nav
|
|
81
90
|
const urlConditionMap = {
|
|
@@ -85,6 +94,7 @@ const LevelOneContent = ({
|
|
|
85
94
|
[physicianCompareUrl]: hasNonRegistryAuthorizations,
|
|
86
95
|
[reportsPortalUrl]: hasAuthorizations,
|
|
87
96
|
[facilityBasedPreviewBaseUrl]: hasAuthorizations,
|
|
97
|
+
'/user/impersonate': canImpersonate,
|
|
88
98
|
|
|
89
99
|
// dev pre
|
|
90
100
|
'/user/applications': ehrAuthorized,
|
|
@@ -109,10 +119,13 @@ const LevelOneContent = ({
|
|
|
109
119
|
};
|
|
110
120
|
|
|
111
121
|
const { pathname, hash } = window.location;
|
|
122
|
+
const filteredListOfLinks = (listOfLinks || []).filter((sublink) => {
|
|
123
|
+
return !(sublink.url in urlConditionMap && !urlConditionMap[sublink.url]);
|
|
124
|
+
});
|
|
112
125
|
if (
|
|
113
|
-
|
|
126
|
+
filteredListOfLinks?.length > 0 &&
|
|
114
127
|
(pathname === url ||
|
|
115
|
-
|
|
128
|
+
filteredListOfLinks.some(
|
|
116
129
|
(sublink) =>
|
|
117
130
|
pathname === sublink.url || `${pathname}${hash}` === sublink.url
|
|
118
131
|
))
|
|
@@ -121,7 +134,7 @@ const LevelOneContent = ({
|
|
|
121
134
|
<NavLinkDrawer
|
|
122
135
|
key={`nav-drawer-${url}-${label}`}
|
|
123
136
|
leftIcon={Icon}
|
|
124
|
-
listOfLinks={
|
|
137
|
+
listOfLinks={filteredListOfLinks}
|
|
125
138
|
isExpanded={isExpanded}
|
|
126
139
|
staticDrawer={false}
|
|
127
140
|
openByDefault
|
|
@@ -164,6 +177,7 @@ LevelOneContent.propTypes = {
|
|
|
164
177
|
default: PropTypes.arrayOf(PropTypes.object),
|
|
165
178
|
devPre: PropTypes.arrayOf(PropTypes.object),
|
|
166
179
|
viewer: PropTypes.arrayOf(PropTypes.object),
|
|
180
|
+
internalReviewers: PropTypes.arrayOf(PropTypes.object),
|
|
167
181
|
}),
|
|
168
182
|
};
|
|
169
183
|
|
|
@@ -297,6 +297,7 @@ SideNavUI.propTypes = {
|
|
|
297
297
|
content: PropTypes.shape({
|
|
298
298
|
default: PropTypes.arrayOf(PropTypes.object),
|
|
299
299
|
devPre: PropTypes.arrayOf(PropTypes.object),
|
|
300
|
+
internalReviewers: PropTypes.arrayOf(PropTypes.object),
|
|
300
301
|
viewer: PropTypes.arrayOf(PropTypes.object),
|
|
301
302
|
}),
|
|
302
303
|
}),
|
|
@@ -318,6 +319,7 @@ SideNavUI.defaultProps = {
|
|
|
318
319
|
content: {
|
|
319
320
|
default: [],
|
|
320
321
|
devPre: [],
|
|
322
|
+
internalReviewers: [],
|
|
321
323
|
viewer: [],
|
|
322
324
|
},
|
|
323
325
|
},
|
|
@@ -42,6 +42,10 @@
|
|
|
42
42
|
"url": "/user/manage-access",
|
|
43
43
|
"label": "Manage Access",
|
|
44
44
|
"listOfLinks": [
|
|
45
|
+
{
|
|
46
|
+
"url": "/user/impersonate",
|
|
47
|
+
"label": "QPP User Impersonation"
|
|
48
|
+
},
|
|
45
49
|
{
|
|
46
50
|
"url": "/user/self-nomination/#/landing",
|
|
47
51
|
"label": "Registry/QCDR Self-Nomination",
|
|
@@ -72,5 +76,24 @@
|
|
|
72
76
|
"label": "Developer Tools"
|
|
73
77
|
}
|
|
74
78
|
],
|
|
79
|
+
"internalReviewers": [
|
|
80
|
+
{
|
|
81
|
+
"url": "/user/submissions",
|
|
82
|
+
"label": "Dashboard Home"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"url": "/user/exception/#/landing",
|
|
86
|
+
"label": "Exceptions Application"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"className": "stroke-based-icon",
|
|
90
|
+
"url": "/user/targeted-review/#/landing",
|
|
91
|
+
"label": "Targeted Review"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"url": "/user/self-nomination/#/landing",
|
|
95
|
+
"label": "Self Nomination"
|
|
96
|
+
}
|
|
97
|
+
],
|
|
75
98
|
"viewer": []
|
|
76
99
|
}
|