-
Notifications
You must be signed in to change notification settings - Fork 125
/
App.jsx
118 lines (112 loc) · 4.09 KB
/
App.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import React, { useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { Switch } from 'react-router-dom';
import { selectUser } from '@department-of-veterans-affairs/platform-user/selectors';
import backendServices from '@department-of-veterans-affairs/platform-user/profile/backendServices';
import { RequiredLoginView } from '@department-of-veterans-affairs/platform-user/RequiredLoginView';
import FEATURE_FLAG_NAMES from '@department-of-veterans-affairs/platform-utilities/featureFlagNames';
import {
DowntimeNotification,
externalServices,
} from '@department-of-veterans-affairs/platform-monitoring/DowntimeNotification';
import AuthorizedRoutes from './AuthorizedRoutes';
import SmBreadcrumbs from '../components/shared/SmBreadcrumbs';
import Navigation from '../components/Navigation';
import ScrollToTop from '../components/shared/ScrollToTop';
import { useDatadogRum } from '../../shared/hooks/useDatadogRum';
import { getAllTriageTeamRecipients } from '../actions/recipients';
const App = () => {
const dispatch = useDispatch();
const user = useSelector(selectUser);
const userServices = user.profile.services; // mhv_messaging_policy.rb defines if messaging service is avaialble when a user is in Premium status upon structuring user services from the user profile in services.rb
const { featureTogglesLoading, appEnabled } = useSelector(
state => {
return {
featureTogglesLoading: state.featureToggles.loading,
appEnabled:
state.featureToggles[
FEATURE_FLAG_NAMES.mhvSecureMessagingToVaGovRelease
],
};
},
state => state.featureToggles,
);
useEffect(
() => {
if (user.login.currentlyLoggedIn) {
dispatch(getAllTriageTeamRecipients());
}
},
[user.login.currentlyLoggedIn, dispatch],
);
const datadogRumConfig = {
applicationId: '02c72297-5059-4ed8-8472-874276f4a9b2',
clientToken: 'pub1325dfe255119729611410e2f47f4f99',
site: 'ddog-gov.com',
service: 'va.gov-mhv-secure-messaging',
sessionSampleRate: 100, // controls the percentage of overall sessions being tracked
sessionReplaySampleRate: 50, // is applied after the overall sample rate, and controls the percentage of sessions tracked as Browser RUM & Session Replay
trackInteractions: true,
trackFrustrations: true,
trackUserInteractions: true,
trackResources: true,
trackLongTasks: true,
defaultPrivacyLevel: 'mask-user-input',
};
useDatadogRum(datadogRumConfig, user);
if (featureTogglesLoading) {
return (
<div className="vads-l-grid-container">
<va-loading-indicator
message="Loading your secure messages..."
setFocus
data-testid="feature-flag-loading-indicator"
/>
</div>
);
}
/* if the user is not whitelisted or feature flag is disabled, redirect to the SM info page */
if (!appEnabled) {
window.location.replace('/health-care/secure-messaging');
return <></>;
}
return (
<RequiredLoginView
user={user}
serviceRequired={[backendServices.MESSAGING]}
>
{user.login.currentlyLoggedIn &&
!userServices.includes(backendServices.MESSAGING) ? (
window.location.replace('/health-care/secure-messaging')
) : (
<div className="vads-l-grid-container">
<SmBreadcrumbs />
<div
className="secure-messaging-container
vads-u-display--flex
vads-u-flex-direction--column
medium-screen:vads-u-flex-direction--row"
>
<DowntimeNotification
appTitle="Secure Messaging"
dependencies={[
externalServices.mhvPlatform,
externalServices.mhvSm,
]}
>
<Navigation />
<ScrollToTop />
<Switch>
<AuthorizedRoutes />
</Switch>
</DowntimeNotification>
</div>
<div className="bottom-container">
<va-back-to-top />
</div>
</div>
)}
</RequiredLoginView>
);
};
export default App;