Skip to content

Commit 2933248

Browse files
committed
Merge branch 'release-0.2.18' into main
2 parents a43fd9c + d3d6398 commit 2933248

37 files changed

+9943
-590
lines changed

client/package-lock.json

Lines changed: 218 additions & 127 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client/package.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
{
22
"name": "client",
3-
"version": "0.2.17",
3+
"version": "0.2.18",
44
"private": true,
55
"proxy": "http://localhost:5000",
66
"scripts": {
77
"precommit": "lint-staged",
88
"start": "react-scripts start",
99
"build": "react-scripts build",
1010
"test": "react-scripts test",
11+
"test:ci": "react-scripts test --watchAll=false",
1112
"eject": "react-scripts eject",
1213
"lint": "eslint -c .eslintrc.json --ignore-path .eslintignore **/*.{js,jsx}",
1314
"lint:fix": "eslint -c .eslintrc.json --ignore-path .eslintignore --fix **/*.{js,jsx}"
@@ -31,8 +32,10 @@
3132
"@fortawesome/fontawesome-svg-core": "^1.2.27",
3233
"@fortawesome/free-solid-svg-icons": "^5.12.1",
3334
"@fortawesome/react-fontawesome": "^0.1.9",
35+
"@microsoft/applicationinsights-react-js": "^3.0.5",
36+
"@microsoft/applicationinsights-web": "^2.5.10",
3437
"@storybook/preset-create-react-app": "^3.1.4",
35-
"axios": "^0.19.2",
38+
"axios": "^0.21.1",
3639
"clsx": "^1.1.0",
3740
"formik": "^2.1.4",
3841
"moment": "^2.24.0",
@@ -57,7 +60,7 @@
5760
"eslint-plugin-jest": "^23.8.2",
5861
"eslint-plugin-prettier": "^3.1.3",
5962
"eslint-plugin-react": "^7.20.0",
60-
"lint-staged": "^10.0.8",
63+
"lint-staged": "^10.5.3",
6164
"nock": "^13.0.4",
6265
"prettier": "^2.0.5",
6366
"react-test-renderer": "^16.13.0",
@@ -66,6 +69,6 @@
6669
},
6770
"lint-staged": {
6871
"*.{js,css,md}": "prettier --write",
69-
"*.js": "eslint --cache --fix"
72+
"*.js": "lint"
7073
}
7174
}

client/src/App.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,23 @@ const useStyles = createUseStyles({
3030
}
3131
});
3232

33-
const App = ({ account, setLoggedInAccount, hasConfirmedTransition }) => {
33+
const App = ({
34+
account,
35+
setLoggedInAccount,
36+
hasConfirmedTransition,
37+
tdmWizardContentContainerRef,
38+
mainContentContainerRef
39+
}) => {
3440
const classes = useStyles();
3541

3642
return (
3743
<React.Fragment>
3844
<Header account={account} />
39-
<div className={classes.root}>
45+
<div
46+
className={classes.root}
47+
id="main-content-container"
48+
ref={mainContentContainerRef}
49+
>
4050
<Route
4151
exact
4252
path="/"
@@ -58,6 +68,7 @@ const App = ({ account, setLoggedInAccount, hasConfirmedTransition }) => {
5868
account={account}
5969
hasConfirmedNavTransition={hasConfirmedTransition}
6070
setLoggedInAccount={setLoggedInAccount}
71+
tdmWizardContentContainerRef={tdmWizardContentContainerRef}
6172
/>
6273
)}
6374
/>
@@ -95,6 +106,7 @@ const App = ({ account, setLoggedInAccount, hasConfirmedTransition }) => {
95106
);
96107
}}
97108
/>
109+
98110
<Route path="/forgotpassword" component={ResetPasswordRequest} />
99111
<Route path="/resetPassword/:token" component={ResetPassword} />
100112
<Route path="/contactus" component={ContactUs} />
@@ -119,7 +131,9 @@ App.propTypes = {
119131
isSecurityAdmin: PropTypes.bool
120132
}),
121133
setLoggedInAccount: PropTypes.func,
122-
hasConfirmedTransition: PropTypes.bool
134+
hasConfirmedTransition: PropTypes.bool,
135+
mainContentContainerRef: PropTypes.object,
136+
tdmWizardContentContainerRef: PropTypes.object
123137
};
124138

125139
export default withToastProvider(App);

client/src/AppInsights.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// AppInsights.js
2+
import { ApplicationInsights } from "@microsoft/applicationinsights-web";
3+
import { ReactPlugin } from "@microsoft/applicationinsights-react-js";
4+
import { createBrowserHistory } from "history";
5+
6+
const browserHistory = createBrowserHistory({ basename: "" });
7+
const reactPlugin = new ReactPlugin();
8+
const appInsights = new ApplicationInsights({
9+
config: {
10+
instrumentationKey: "b04010da-8444-48d2-a8e1-fcc931a8330d",
11+
//instrumentationKey: "4965664a-5e02-4704-98a4-7c08c5d238ac",
12+
extensions: [reactPlugin],
13+
extensionConfig: {
14+
[reactPlugin.identifier]: { history: browserHistory }
15+
}
16+
}
17+
});
18+
appInsights.loadAppInsights();
19+
export { reactPlugin, appInsights };

client/src/AppWrapper.js

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
1-
import React, { useState, useEffect } from "react";
1+
import React, { useState, useEffect, useRef } from "react";
22
import { BrowserRouter as Router } from "react-router-dom";
33
import { UserContext } from "./components/user-context";
44
import App from "./App";
5+
import ErrorPage from "./components/ErrorPage";
56
import NavConfirmModal from "./components/NavConfirmModal";
7+
import {
8+
AppInsightsContext,
9+
AppInsightsErrorBoundary
10+
} from "@microsoft/applicationinsights-react-js";
11+
import { reactPlugin } from "./AppInsights";
612

713
const AppWrapper = () => {
814
const [account, setAccount] = useState({});
915
const [confirmTransition, setConfirmTransition] = useState(null);
1016
const [hasConfirmedTransition, setHasConfirmedTransition] = useState(true);
1117
const [isOpenNavConfirmModal, setIsOpenNavConfirmModal] = useState(false);
18+
const tdmWizardContentContainerRef = useRef();
19+
const mainContentContainerRef = useRef();
1220

1321
const setLoggedInAccount = loggedInUser => {
1422
setAccount(loggedInUser);
@@ -44,20 +52,29 @@ const AppWrapper = () => {
4452

4553
return (
4654
<React.Fragment>
47-
<UserContext.Provider value={account}>
48-
<Router getUserConfirmation={getUserConfirmation}>
49-
<NavConfirmModal
50-
confirmTransition={confirmTransition}
51-
isOpenNavConfirmModal={isOpenNavConfirmModal}
52-
setIsOpenNavConfirmModal={setIsOpenNavConfirmModal}
53-
/>
54-
<App
55-
account={account}
56-
setLoggedInAccount={setLoggedInAccount}
57-
hasConfirmedTransition={hasConfirmedTransition}
58-
/>
59-
</Router>
60-
</UserContext.Provider>
55+
<AppInsightsContext.Provider value={reactPlugin}>
56+
<UserContext.Provider value={account}>
57+
<Router getUserConfirmation={getUserConfirmation}>
58+
<AppInsightsErrorBoundary
59+
onError={<ErrorPage />}
60+
appInsights={reactPlugin}
61+
>
62+
<NavConfirmModal
63+
confirmTransition={confirmTransition}
64+
isOpenNavConfirmModal={isOpenNavConfirmModal}
65+
setIsOpenNavConfirmModal={setIsOpenNavConfirmModal}
66+
/>
67+
<App
68+
account={account}
69+
setLoggedInAccount={setLoggedInAccount}
70+
hasConfirmedTransition={hasConfirmedTransition}
71+
tdmWizardContentContainerRef={tdmWizardContentContainerRef}
72+
mainContentContainerRef={mainContentContainerRef}
73+
/>
74+
</AppInsightsErrorBoundary>
75+
</Router>
76+
</UserContext.Provider>
77+
</AppInsightsContext.Provider>
6178
</React.Fragment>
6279
);
6380
};

client/src/components/About.js

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ import React from "react";
22
import SideBar from "./Sidebar";
33
import clsx from "clsx";
44
import { createUseStyles } from "react-jss";
5+
import {
6+
useAppInsightsContext,
7+
useTrackMetric
8+
} from "@microsoft/applicationinsights-react-js";
59

610
import { version } from "../../package.json";
711

@@ -34,11 +38,24 @@ const useStyles = createUseStyles({
3438

3539
const About = () => {
3640
const classes = useStyles();
41+
const appInsights = useAppInsightsContext();
42+
43+
//appInsights.trackMetric("AboutPage Component");
44+
const trackComponent = useTrackMetric(appInsights, "AboutPage");
45+
3746
return (
38-
<div className={classes.root}>
47+
<div
48+
className={classes.root}
49+
onLoad={trackComponent}
50+
onClick={trackComponent}
51+
>
3952
<div className={clsx("tdm-wizard", classes.tdmWizard)}>
4053
<SideBar />
41-
<div className="tdm-wizard-content-container">
54+
<div
55+
className="tdm-wizard-content-container"
56+
onLoad={trackComponent}
57+
onClick={trackComponent}
58+
>
4259
<h1>About TDM Calculator</h1>
4360
<br />
4461
<div className={classes.aboutText}>

client/src/components/Authorization/Login.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ import * as Yup from "yup";
77
import * as accountService from "../../services/account.service";
88
import SideBar from "../Sidebar";
99
import clsx from "clsx";
10+
import {
11+
useAppInsightsContext,
12+
useTrackMetric,
13+
useTrackEvent
14+
} from "@microsoft/applicationinsights-react-js";
1015

1116
const useStyles = createUseStyles({
1217
root: {
@@ -45,6 +50,13 @@ const Login = props => {
4550
.required("Password is required")
4651
});
4752

53+
const appInsights = useAppInsightsContext();
54+
55+
// appInsights.trackMetric("TDMCalculationContainer Component");
56+
const trackLogin = useTrackEvent(appInsights, "Login");
57+
const trackLoginFail = useTrackEvent(appInsights, "Login Failed");
58+
const trackComponent = useTrackMetric(appInsights, "Login");
59+
4860
const handleSubmit = async (
4961
{ email, password },
5062
{ setSubmitting },
@@ -55,6 +67,7 @@ const Login = props => {
5567

5668
if (loginResponse.isSuccess) {
5769
setLoggedInAccount(loginResponse.user);
70+
trackLogin({ user: loginResponse.user.id });
5871
window.dataLayer.push({
5972
event: "login",
6073
action: "success",
@@ -63,6 +76,7 @@ const Login = props => {
6376
history.push("/calculation/1");
6477
} else if (loginResponse.code === "AUTH_NOT_CONFIRMED") {
6578
try {
79+
trackLoginFail({ reason: loginResponse.code });
6680
window.dataLayer.push({
6781
event: "customEvent",
6882
action: "login failed",
@@ -87,6 +101,7 @@ const Login = props => {
87101
setSubmitting(false);
88102
}
89103
} else if (loginResponse.code === "AUTH_NO_ACCOUNT") {
104+
trackLoginFail({ user: email, reason: loginResponse.code });
90105
window.dataLayer.push({
91106
event: "customEvent",
92107
action: "login failed",
@@ -97,6 +112,7 @@ const Login = props => {
97112
new account.`);
98113
setSubmitting(false);
99114
} else {
115+
trackLoginFail({ user: email, reason: loginResponse.code });
100116
window.dataLayer.push({
101117
event: "customEvent",
102118
action: "login failed",
@@ -108,6 +124,7 @@ const Login = props => {
108124
setSubmitting(false);
109125
}
110126
} catch (err) {
127+
trackLoginFail({ user: email, reason: "unexpected error" });
111128
setErrorMsg(err.message);
112129
}
113130
};
@@ -117,7 +134,7 @@ const Login = props => {
117134
<div className={clsx("tdm-wizard", classes.tdmWizard)}>
118135
<div className="tdm-wizard-sidebar" />
119136
<SideBar />
120-
<div className="tdm-wizard-content-container">
137+
<div className="tdm-wizard-content-container" onClick={trackComponent}>
121138
<h1>Welcome to Los Angeles&rsquo; TDM Calculator</h1>
122139
<h3>Please sign into your account to save progress.</h3>
123140
<br />

client/src/components/ErrorPage.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import React from "react";
2+
3+
const ErrorPage = () => {
4+
return <h1>An unhandled error occurred.</h1>;
5+
};
6+
7+
export default ErrorPage;

0 commit comments

Comments
 (0)