calculator/src/Components/Calculator.js

65 lines
1.7 KiB
JavaScript
Raw Normal View History

2023-07-04 11:15:57 +00:00
import { useState } from "react";
import NumPad from "./NumPad";
import Operators from "./Operators";
export default function Calculator(props){
2023-07-04 15:09:09 +00:00
const [main,setMain] = useState(0)
2023-07-04 11:15:57 +00:00
const [memory,setMemory] = useState(0)
const [operation,setOperation] = useState("")
const map = {
conc:(numberString)=>{setMain(prev=>prev+numberString)},
2023-07-04 11:15:57 +00:00
zero:()=>this.conc("0"),
one:()=>this.conc("1"),
two:()=>this.conc("2"),
three:()=>this.conc("3"),
four:()=>this.conc("4"),
five:()=>this.conc("5"),
six:()=>this.conc("6"),
seven:()=>this.conc("7"),
eight:()=>this.conc("8"),
nine:()=>this.conc("9"),
decimal:()=>{
if(!/./g.test(main)){
this.conc(".")
}
},
add:()=>this.rcvOperator("add"),
subtract:()=>this.rcvOperator("subtract"),
multiply:()=>this.rcvOperator("multiply"),
divide:()=>this.rcvOperator("divide"),
rcvOperator:(operator)=>{
setMemory(main)
setMain("0")
setOperation(operator)
},
2023-07-04 15:09:09 +00:00
operations:{
add:(a,b)=>{return a+b},
subtract:(a,b)=>{return a-b},
multiply:(a,b)=>{return a*b},
divide:(a,b)=>{return a/b},
},
equals:()=>{setMain(prev=>{this.operations[operation](prev,memory)})}
}
function handleInput(content){
map[content]()
2023-07-04 11:15:57 +00:00
}
return(
<>
<div id="display">
<p id="memory">{memory}</p>
2023-07-04 15:09:09 +00:00
<p id="main">{main}</p>
2023-07-04 11:15:57 +00:00
<p id="operation">{operation}</p>
</div>
2023-07-04 15:15:29 +00:00
<NumPad handlemain={handleInput}/>
<Operators handlemain={handleInput}/>
2023-07-04 11:15:57 +00:00
</>
)
}