Skip to content

Commit 732aa7f

Browse files
Add dark Mode
1 parent 699f4f0 commit 732aa7f

File tree

8 files changed

+154
-27
lines changed

8 files changed

+154
-27
lines changed

src/App.js

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,31 @@
1-
import React from "react";
1+
import React, { Component } from "react";
22
import "./App.css";
33
import CovidApp from "./components/CovidApp";
4+
import Paper from "./components/Paper";
45

5-
function App() {
6-
return (
7-
<div>
8-
<CovidApp />
9-
</div>
10-
);
6+
class App extends Component {
7+
constructor(props) {
8+
super(props);
9+
this.state = {
10+
isDarkMode: false,
11+
};
12+
this.setDarkMode = this.setDarkMode.bind(this);
13+
}
14+
15+
setDarkMode(e) {
16+
this.setState({ isDarkMode: e.target.checked });
17+
}
18+
19+
render() {
20+
return (
21+
<Paper isDarkMode={this.state.isDarkMode}>
22+
<CovidApp
23+
setDarkMode={this.setDarkMode}
24+
isDarkMode={this.state.isDarkMode}
25+
/>
26+
</Paper>
27+
);
28+
}
1129
}
1230

1331
export default App;

src/components/CodeApp.css

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
.switch {
2+
position: relative;
3+
display: inline-block;
4+
width: 60px;
5+
height: 34px;
6+
}
7+
8+
.darkModeButton {
9+
margin-left: auto;
10+
}
11+
12+
/* Hide default HTML checkbox */
13+
.switch input {
14+
opacity: 0;
15+
width: 0;
16+
height: 0;
17+
}
18+
19+
20+
/* The slider */
21+
.slider {
22+
position: absolute;
23+
cursor: pointer;
24+
top: 0;
25+
left: 0;
26+
right: 0;
27+
bottom: 0;
28+
background-color: #ccc;
29+
-webkit-transition: .4s;
30+
transition: .4s;
31+
}
32+
33+
.slider:before {
34+
position: absolute;
35+
content: "";
36+
height: 26px;
37+
width: 26px;
38+
left: 4px;
39+
bottom: 4px;
40+
background-color: white;
41+
-webkit-transition: .4s;
42+
transition: .4s;
43+
}
44+
45+
input:checked+.slider {
46+
background-color: #FA6400;
47+
}
48+
49+
input:focus+.slider {
50+
box-shadow: 0 0 1px #FA6400;
51+
}
52+
53+
input:checked+.slider:before {
54+
-webkit-transform: translateX(26px);
55+
-ms-transform: translateX(26px);
56+
transform: translateX(26px);
57+
}
58+
59+
/* Rounded sliders */
60+
.slider.round {
61+
border-radius: 34px;
62+
}
63+
64+
.slider.round:before {
65+
border-radius: 50%;
66+
}

src/components/CovidApp.js

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import Overview from "./Overview";
33
import Navbar from "./Navbar";
44
import { withStyles } from "@material-ui/styles";
55
import colors from "../colors";
6+
import "./CodeApp.css";
67

78
const styles = {
89
root: {
@@ -12,7 +13,8 @@ const styles = {
1213
navBar: {
1314
flex: "0 0 10%",
1415
backgroundColor: colors.darkPurple,
15-
color: "rgba(255,255,255,.9)",
16+
color: (props) =>
17+
props.isDarkMode ? "rgba(255,255,255,.87)" : "rgba(255,255,255,.9)",
1618
textTransform: "capitalize",
1719
display: "flex",
1820
justifyContent: "center",
@@ -21,12 +23,18 @@ const styles = {
2123
flex: 1,
2224
padding: "4rem",
2325
},
26+
header: {
27+
display: "flex",
28+
alignItems: "center",
29+
},
2430
heading: {
2531
fontWeight: "500",
26-
color: colors.darkPurple,
32+
color: (props) =>
33+
props.isDarkMode ? "rgb(245, 245, 245)" : colors.darkPurple,
34+
display: "inline-block",
2735
"& span": {
28-
color: colors.purple,
2936
fontWeight: "900",
37+
color: colors.purple,
3038
marginRight: "1rem",
3139
},
3240
},
@@ -40,18 +48,26 @@ class CovidApp extends Component {
4048
}
4149

4250
render() {
43-
const { classes } = this.props;
51+
const { classes, setDarkMode, isDarkMode } = this.props;
4452

4553
return (
4654
<div className={classes.root}>
4755
<div className={classes.navBar}>
48-
<Navbar />
56+
<Navbar isDarkMode={isDarkMode} />
4957
</div>
5058
<div className={classes.mainContent}>
51-
<h1 className={classes.heading}>
52-
<span>Covid-19</span> India Trend
53-
</h1>
54-
<Overview />
59+
<div className={classes.header}>
60+
<h1 className={classes.heading}>
61+
<span>Covid-19</span> India Trend
62+
</h1>
63+
<div className="darkModeButton">
64+
<label className="switch">
65+
<input type="checkbox" onChange={setDarkMode} />
66+
<span className="slider round"></span>
67+
</label>
68+
</div>
69+
</div>
70+
<Overview isDarkMode={isDarkMode} />
5571
</div>
5672
</div>
5773
);

src/components/DisplayPanels.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const styles = {
77
width: "15%",
88
display: "flex",
99
flexDirection: "column",
10-
backgroundColor: "#fff",
10+
backgroundColor: (props) => (props.isDarkMode ? colors.darkPurple : "#fff"),
1111
marginBottom: "3.5rem",
1212
marginTop: "3.5rem",
1313
padding: "1.5rem 3rem",

src/components/Navbar.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ const styles = {
3434
padding: "1rem 0",
3535
},
3636
active: {
37-
color: colors.purple,
37+
color: (props) => (props.isDarkMode ? "rgb(245, 245, 245)" : colors.purple),
3838
position: "relative",
3939
zIndex: "10",
4040
animation: "$float 2s ease infinite",
@@ -45,7 +45,8 @@ const styles = {
4545
width: "165%",
4646
height: "110%",
4747
display: "block",
48-
backgroundColor: "rgb(245, 245, 245)",
48+
backgroundColor: (props) =>
49+
props.isDarkMode ? colors.lightPurple : "rgb(245, 245, 245)",
4950
transform: "translateX(-1rem) skewX(10deg)",
5051
borderRadius: "25px",
5152
zIndex: 10,
@@ -58,7 +59,8 @@ const styles = {
5859
display: "block",
5960
top: 0,
6061
left: 0,
61-
backgroundColor: colors.lightPurple,
62+
backgroundColor: (props) =>
63+
props.isDarkMode ? "rgba(255,255,255,.6)" : colors.lightPurple,
6264
transform: "translate(-.9rem, .4rem) skew(10deg, -5deg)",
6365
borderRadius: "25px",
6466
},

src/components/Overview.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,6 @@ const styles = {
6868
},
6969
},
7070

71-
// refreshIcon: {
72-
// marginRight: "1rem",
73-
// },
74-
7571
refreshIcon: {
7672
fontSize: "10rem",
7773
animationName: "$rotation",
@@ -155,7 +151,7 @@ class Overview extends Component {
155151
render() {
156152
const { confirmed, recovered, deaths, activeCases } = this.state.currentDay;
157153
const dataChange = this.state.dataChanges;
158-
const { classes } = this.props;
154+
const { classes, isDarkMode } = this.props;
159155
const { isLoading } = this.state;
160156

161157
if (isLoading) {
@@ -172,21 +168,25 @@ class Overview extends Component {
172168
<DisplayPanels
173169
title="Confirmed"
174170
number={confirmed}
171+
isDarkMode={isDarkMode}
175172
dataChange={dataChange.confirmed}
176173
/>
177174
<DisplayPanels
178175
title="Active"
179176
number={activeCases}
177+
isDarkMode={isDarkMode}
180178
dataChange={dataChange.activeCases}
181179
/>
182180
<DisplayPanels
183181
title="Recovered"
184182
number={recovered}
183+
isDarkMode={isDarkMode}
185184
dataChange={dataChange.recovered}
186185
/>
187186
<DisplayPanels
188187
title="Deceased"
189188
number={deaths}
189+
isDarkMode={isDarkMode}
190190
dataChange={dataChange.deaths}
191191
/>
192192
</div>

src/components/Paper.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import React, { Component } from "react";
2+
import { withStyles } from "@material-ui/styles";
3+
4+
const styles = {
5+
darkMode: {
6+
backgroundColor: "#121212",
7+
color: "rgba(255,255,255,.87)",
8+
},
9+
};
10+
11+
class Paper extends Component {
12+
constructor(props) {
13+
super(props);
14+
this.state = {};
15+
}
16+
17+
render() {
18+
const { isDarkMode, classes } = this.props;
19+
return (
20+
<div className={isDarkMode && classes.darkMode}>
21+
{this.props.children}
22+
</div>
23+
);
24+
}
25+
}
26+
27+
export default withStyles(styles)(Paper);

src/index.css

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ html {
1010
box-sizing: border-box;
1111
}
1212

13-
14-
1513
body {
1614
font-family: 'Roboto',
1715
sans-serif;

0 commit comments

Comments
 (0)