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("")
|
|
|
|
|
2023-07-05 18:03:52 +00:00
|
|
|
const map = {
|
|
|
|
conc:(numberString)=>{setMain(prev=>prev+numberString)},
|
2023-07-04 11:15:57 +00:00
|
|
|
|
2023-07-05 18:03:52 +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
|
|
|
|
2023-07-05 18:03:52 +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
|
|
|
</>
|
|
|
|
)
|
|
|
|
}
|