Skip to content

Commit f3d634b

Browse files
committed
Complete Calculator App
1 parent 3ad73c1 commit f3d634b

File tree

2 files changed

+103
-2
lines changed

2 files changed

+103
-2
lines changed

06. Calculator/src/Calculator.jsx

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,47 @@
1+
import { useState } from "react";
2+
13
function Calculator() {
4+
const [inputValue, setInputValue] = useState("");
5+
6+
const display = (value) => setInputValue(inputValue + value);
7+
8+
// I know, eval() is not recommended in production.
9+
const calculate = () => setInputValue(eval(inputValue));
10+
const clear = () => setInputValue("");
11+
12+
13+
return (
14+
<form className="calculator" name="calc">
15+
<input type="text" className="value" value={inputValue} />
16+
17+
<span className="num clear" onClick={() => clear()}>
18+
C
19+
</span>
20+
21+
<span onClick={() => display("/")}>/</span>
22+
<span onClick={() => display("*")}>*</span>
23+
<span onClick={() => display("7")}>7</span>
24+
<span onClick={() => display("8")}>8</span>
25+
<span onClick={() => display("9")}>9</span>
26+
<span onClick={() => display("-")}>-</span>
27+
<span onClick={() => display("4")}>4</span>
28+
<span onClick={() => display("5")}>5</span>
29+
<span onClick={() => display("6")}>6</span>
30+
<span className="plus" onClick={() => display("+")}>
31+
+
32+
</span>
233

3-
4-
return <div>Calculator</div>;
34+
<span onClick={() => display("1")}>1</span>
35+
<span onClick={() => display("2")}>2</span>
36+
<span onClick={() => display("3")}>3</span>
37+
<span onClick={() => display("0")}>0</span>
38+
<span onClick={() => display("0")}>00</span>
39+
<span onClick={() => display(".")}>.</span>
40+
<span className="num equal" onClick={() => calculate()}>
41+
=
42+
</span>
43+
</form>
44+
);
545
}
646

747
export default Calculator;

06. Calculator/src/index.css

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
* {
2+
margin: 0;
3+
padding: 0;
4+
box-sizing: border-box;
5+
font-family: sans-serif;
6+
}
7+
8+
body {
9+
display: flex;
10+
justify-content: center;
11+
align-items: center;
12+
min-height: 100vh;
13+
background: #1b1b1b;
14+
}
15+
16+
.calculator {
17+
position: relative;
18+
display: grid;
19+
}
20+
21+
.calculator .value {
22+
grid-column: span 4;
23+
height: 100px;
24+
text-align: right;
25+
border: none;
26+
outline: none;
27+
padding: 10px;
28+
font-size: 18px;
29+
}
30+
31+
.calculator span {
32+
display: grid;
33+
width: 60px;
34+
height: 60px;
35+
background: #292929;
36+
place-items: center;
37+
border: 1px solid rgba(0, 0, 0, 0.1);
38+
color: #fff;
39+
}
40+
41+
.calculator span:active {
42+
background: rgb(255, 163, 26);
43+
color: #fff;
44+
}
45+
46+
.calculator span.clear {
47+
grid-column: span 2;
48+
width: 120px;
49+
background: rgb(255, 163, 26);
50+
/* color: #fff; */
51+
}
52+
53+
.calculator span.plus {
54+
grid-row: span 2;
55+
height: 120px;
56+
}
57+
58+
.calculator span.equal {
59+
background: rgb(255, 163, 26);
60+
/* background: #03b1ff; */
61+
}

0 commit comments

Comments
 (0)