Skip to content

Commit 4b0c8a7

Browse files
Made structural changes
1 parent 1da3b88 commit 4b0c8a7

File tree

5 files changed

+150
-160
lines changed

5 files changed

+150
-160
lines changed

src/components/CovidApp.js

Lines changed: 52 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -8,67 +8,47 @@ import Map from "./Map/Map";
88
import DisplayTable from "./DisplayTable";
99
import TinyCharts from "./TinyCharts";
1010
import styles from "../styles/CovidAppStyles";
11-
12-
const stateCodes = {
13-
"Andhra Pradesh": "AP",
14-
"Arunachal Pradesh": "AR",
15-
Assam: "AS",
16-
Bihar: "BR",
17-
Chhattisgarh: "CT",
18-
Goa: "GA",
19-
Gujarat: "GJ",
20-
Haryana: "HR",
21-
"Himachal Pradesh": "HP",
22-
Jharkhand: "JH",
23-
Karnataka: "KA",
24-
Kerala: "KL",
25-
"Madhya Pradesh": "MP",
26-
Maharashtra: "MH",
27-
Manipur: "MN",
28-
Meghalaya: "ML",
29-
Mizoram: "MZ",
30-
Nagaland: "NL",
31-
Odisha: "OR",
32-
Punjab: "PB",
33-
Rajasthan: "RJ",
34-
Sikkim: "SK",
35-
"Tamil Nadu": "TN",
36-
Telengana: "TG",
37-
Tripura: "TR",
38-
Uttarakhand: "UT",
39-
"Uttar Pradesh": "UP",
40-
"West Bengal": "WB",
41-
"Andaman and Nicobar Islands": "AN",
42-
Chandigarh: "CH",
43-
"Dadra and Nagar Haveli": "DN",
44-
"Daman and Diu": "DD",
45-
Delhi: "DL",
46-
"Jammu and Kashmir": "JK",
47-
Ladakh: "LA",
48-
Lakshadweep: "LD",
49-
Puducherry: "PY",
50-
};
11+
import axios from "axios";
12+
import stateCodes from "../constants/stateCodes";
13+
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
14+
import { faSyncAlt } from "@fortawesome/free-solid-svg-icons";
5115

5216
class CovidApp extends Component {
5317
constructor(props) {
5418
super(props);
5519

5620
this.state = {
57-
completeData: [],
21+
data: [],
5822
isLoading: false,
5923
mapData: [],
6024
tableData: [],
6125
};
62-
this.getData = this.getData.bind(this);
63-
this.loadingStatus = this.loadingStatus.bind(this);
6426
this.formatData = this.formatData.bind(this);
6527
this.findId = this.findId.bind(this);
6628
this.handleFormat = this.handleFormat.bind(this);
6729
this.tableData = this.tableData.bind(this);
6830
}
6931

70-
formatData(completeData) {
71-
const newArr = completeData.slice(-1).map((data) => data.regional);
32+
componentDidMount() {
33+
this.fetchData();
34+
}
35+
36+
async fetchData() {
37+
this.setState({ isLoading: !this.state.isLoading });
38+
const response = await axios.get(
39+
"https://api.rootnet.in/covid19-in/stats/history"
40+
);
41+
this.setState(
42+
(st) => ({
43+
data: response.data.data,
44+
isLoading: !st.isLoading,
45+
}),
46+
this.handleFormat
47+
);
48+
}
49+
50+
formatData(data) {
51+
const newArr = data.slice(-1).map((data) => data.regional);
7252
const formatedData = newArr.flat().map((region, i) => {
7353
return {
7454
id: this.findId(region.loc),
@@ -79,12 +59,12 @@ class CovidApp extends Component {
7959
return formatedData;
8060
}
8161

82-
tableData(completeData) {
83-
const newArr = completeData
62+
tableData(data) {
63+
const newArr = data
8464
.slice(-1)
8565
.map((data) => data.regional)
8666
.flat();
87-
const data = newArr.map((region, i) => {
67+
const newData = newArr.map((region, i) => {
8868
return {
8969
id: region.loc,
9070
name: region.loc,
@@ -94,7 +74,7 @@ class CovidApp extends Component {
9474
active: region.totalConfirmed - (region.discharged + region.deaths),
9575
};
9676
});
97-
return data;
77+
return newData;
9878
}
9979

10080
findId(location) {
@@ -105,36 +85,36 @@ class CovidApp extends Component {
10585
}
10686
}
10787

108-
getData(data, isLoading) {
109-
this.setState(
110-
{
111-
completeData: data,
112-
isLoading: isLoading,
113-
},
114-
this.handleFormat
115-
);
116-
}
11788
handleFormat() {
118-
const newdata = this.formatData(this.state.completeData);
119-
const tableData = this.tableData(this.state.completeData);
120-
// console.log(tableData);
89+
const newdata = this.formatData(this.state.data);
90+
const tableData = this.tableData(this.state.data);
12191
this.setState({ mapData: newdata, tableData: tableData });
12292
}
12393

124-
loadingStatus(loadingStatus) {
125-
this.setState({ isLoading: loadingStatus });
126-
}
127-
12894
render() {
12995
const { classes, setDarkMode, isDarkMode } = this.props;
130-
const { mapData, tableData } = this.state;
96+
const { mapData, tableData, isLoading } = this.state;
13197

98+
if (isLoading) {
99+
return (
100+
<div className={classes.loadingIcon}>
101+
<FontAwesomeIcon icon={faSyncAlt} className={classes.refreshIcon} />
102+
</div>
103+
);
104+
}
132105
return (
133106
<>
134107
<div className={classes.header}>
135108
<h1 className={classes.heading}>
136109
<span>Covid-19</span> India Trend
137110
</h1>
111+
<div className={classes.btnBox}>
112+
<FontAwesomeIcon
113+
icon={faSyncAlt}
114+
className={classes.button}
115+
onClick={this.fetchData}
116+
/>
117+
</div>
138118
<div className="darkModeButton">
139119
<label className="switch">
140120
<input type="checkbox" onChange={setDarkMode} />
@@ -144,7 +124,7 @@ class CovidApp extends Component {
144124
</div>
145125
<Overview
146126
isDarkMode={isDarkMode}
147-
getData={this.getData}
127+
data={this.state.data}
148128
loadingStatus={this.loadingStatus}
149129
/>
150130
{!this.state.isLoading && (
@@ -163,7 +143,7 @@ class CovidApp extends Component {
163143
style={{ background: "rgba(249, 52, 94,.1)" }}
164144
>
165145
<TinyCharts
166-
data={this.state.completeData}
146+
data={this.state.data}
167147
isLoading={this.state.isLoading}
168148
dataKey="confirmed"
169149
stroke={colors.red}
@@ -177,7 +157,7 @@ class CovidApp extends Component {
177157
style={{ background: "rgba(250, 100, 0,.1)" }}
178158
>
179159
<TinyCharts
180-
data={this.state.completeData}
160+
data={this.state.data}
181161
isLoading={this.state.isLoading}
182162
dataKey="active"
183163
stroke={colors.orange}
@@ -191,7 +171,7 @@ class CovidApp extends Component {
191171
style={{ background: "rgba(28, 177, 66,.1)" }}
192172
>
193173
<TinyCharts
194-
data={this.state.completeData}
174+
data={this.state.data}
195175
isLoading={this.state.isLoading}
196176
dataKey="discharged"
197177
stroke={colors.green}
@@ -205,7 +185,7 @@ class CovidApp extends Component {
205185
style={{ background: "rgba(98, 54, 255,.1)" }}
206186
>
207187
<TinyCharts
208-
data={this.state.completeData}
188+
data={this.state.data}
209189
isLoading={this.state.isLoading}
210190
dataKey="deaths"
211191
stroke={colors.purple}
@@ -214,10 +194,7 @@ class CovidApp extends Component {
214194
<h3 style={{ color: colors.purple }}>Deceased</h3>
215195
</div>
216196
</div>
217-
<Charts
218-
data={this.state.completeData}
219-
isLoading={this.state.isLoading}
220-
/>
197+
<Charts data={this.state.data} isLoading={this.state.isLoading} />
221198
</div>
222199
<div className={classes.tableContainer}>
223200
<h2 className={classes.tableHeading}>
@@ -227,9 +204,6 @@ class CovidApp extends Component {
227204
</div>
228205
</div>
229206
)}
230-
{/* {!this.state.isLoading && (
231-
232-
)} */}
233207
</>
234208
);
235209
}

src/components/Overview.js

Lines changed: 35 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import React, { Component } from "react";
22
import DisplayPanels from "./DisplayPanels";
3-
import axios from "axios";
43
import { withStyles } from "@material-ui/styles";
54
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
65
import { faSyncAlt } from "@fortawesome/free-solid-svg-icons";
@@ -13,92 +12,70 @@ class Overview extends Component {
1312
currentDay: {},
1413
previousDay: {},
1514
dataChanges: {},
16-
completeData: {},
1715
isLoading: false,
1816
};
1917
this.calculateChange = this.calculateChange.bind(this);
20-
this.fetchData = this.fetchData.bind(this);
18+
this.getData = this.getData.bind(this);
19+
this.setData = this.setData.bind(this);
2120
}
2221

2322
componentDidMount() {
24-
this.fetchData();
23+
this.getData(this.props.data);
2524
}
2625

27-
async fetchData() {
28-
this.setState(
29-
{ isLoading: !this.state.isLoading },
30-
this.props.loadingStatus(!this.state.isLoading)
31-
);
32-
const response = await axios.get(
33-
"https://api.rootnet.in/covid19-in/stats/history"
34-
);
35-
const data = response.data.data.slice(-2);
36-
const previousDay = data[0].summary;
37-
const currentDay = data[1].summary;
38-
this.setState(
39-
{
40-
previousDay: {
41-
confirmed: previousDay.total,
42-
recovered: previousDay.discharged,
43-
deaths: previousDay.deaths,
44-
activeCases:
45-
previousDay.total - (previousDay.discharged + previousDay.deaths),
46-
},
47-
currentDay: {
48-
confirmed: currentDay.total,
49-
recovered: currentDay.discharged,
50-
deaths: currentDay.deaths,
51-
activeCases:
52-
currentDay.total - (currentDay.discharged + currentDay.deaths),
26+
setData() {
27+
this.getData();
28+
}
29+
30+
getData(propsData) {
31+
const data = propsData.slice(-2);
32+
try {
33+
const previousDay = data[0].summary;
34+
const currentDay = data[1].summary;
35+
this.setState(
36+
{
37+
previousDay: {
38+
confirmed: previousDay.total,
39+
recovered: previousDay.discharged,
40+
deaths: previousDay.deaths,
41+
activeCases:
42+
previousDay.total - (previousDay.discharged + previousDay.deaths),
43+
},
44+
currentDay: {
45+
confirmed: currentDay.total,
46+
recovered: currentDay.discharged,
47+
deaths: currentDay.deaths,
48+
activeCases:
49+
currentDay.total - (currentDay.discharged + currentDay.deaths),
50+
},
5351
},
54-
completeData: response.data.data,
55-
},
56-
this.calculateChange
57-
);
52+
this.calculateChange
53+
);
54+
} catch {}
5855
}
5956

6057
calculateChange() {
61-
const { previousDay, currentDay, isLoading } = this.state;
58+
const { previousDay, currentDay } = this.state;
6259
let newObj = Object.keys(currentDay).reduce((a, k) => {
6360
a[k] = currentDay[k] - previousDay[k];
6461
return a;
6562
}, {});
6663
const newState = {
6764
...this.state,
6865
dataChanges: newObj,
69-
isLoading: !isLoading,
7066
};
71-
this.setState(
72-
{
73-
...newState,
74-
},
75-
this.props.getData(newState.completeData, newState.isLoading)
76-
);
67+
this.setState({
68+
...newState,
69+
});
7770
}
7871

7972
render() {
8073
const { confirmed, recovered, deaths, activeCases } = this.state.currentDay;
8174
const dataChange = this.state.dataChanges;
8275
const { classes, isDarkMode } = this.props;
83-
const { isLoading } = this.state;
84-
85-
if (isLoading) {
86-
return (
87-
<div className={classes.loadingIcon}>
88-
<FontAwesomeIcon icon={faSyncAlt} className={classes.refreshIcon} />
89-
</div>
90-
);
91-
}
9276

9377
return (
9478
<div className={classes.root}>
95-
<div className={classes.btnBox}>
96-
<FontAwesomeIcon
97-
icon={faSyncAlt}
98-
className={classes.button}
99-
onClick={this.fetchData}
100-
/>
101-
</div>
10279
<div className={classes.panels}>
10380
<DisplayPanels
10481
title="Confirmed"

0 commit comments

Comments
 (0)