From da9924b7bd18ed5dee76336f71b9d96ee6b7b85a Mon Sep 17 00:00:00 2001 From: Andrzej Stepien Date: Thu, 6 Jul 2023 12:08:28 +0200 Subject: [PATCH] all tests pass! --- src/Components/Calculator.js | 53 ++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/src/Components/Calculator.js b/src/Components/Calculator.js index ce1a4f6..ef5cafb 100644 --- a/src/Components/Calculator.js +++ b/src/Components/Calculator.js @@ -3,7 +3,6 @@ import KeyPad from "./KeyPad"; export default function Calculator(props){ const [main,setMain] = useState("0") - const [mainInitialised, setMainInitialised] = useState(true) const [memory,setMemory] = useState("") const [operation,setOperation] = useState("") @@ -14,7 +13,7 @@ export default function Calculator(props){ }else{ setMain(prev=>prev+numberString) } - setMainInitialised(false) + }, zero:function(){this.conc("0")}, @@ -38,17 +37,28 @@ export default function Calculator(props){ multiply:function(){this.rcvOperator("multiply")}, divide:function(){this.rcvOperator("divide")}, - rcvOperator:function(operator){ - const operatorAlreadyEntered = operation===""?false:true - console.log(operatorAlreadyEntered) - setOperation(operator) - if(!mainInitialised && !operatorAlreadyEntered){ - setMemory(prev=>{return this.calculate(main,prev)}) - }else{ - setMemory(main) + rcvOperator:function(operator){ + if(main==="-"){ + setMain("") + }else if(main!==""){ + if(memory===""){ + setMemory(main) + }else{ + setMemory(prev=>{return this.calculate(main,prev)}) + } + setMain("") } - setMainInitialised(true) - setMain("0") + if(main==="" && operator==="subtract"){ + setMain(prev=>{ + if(prev[0]!=="-"){ + return "-"+prev + } + }) + }else{ + setOperation(operator) + } + + }, operations:{ @@ -60,16 +70,18 @@ export default function Calculator(props){ clear:()=>{ setMain("0") - setMainInitialised(true) setMemory("") setOperation("") }, equals:function(){ - setMain(prev=>{ - return this.calculate(prev,memory) - }) - setMemory("") - setOperation("") + if(operation!=="" && main !==""){ + setMain(prev=>{ + return this.calculate(prev,memory) + }) + setMemory("") + setOperation("") + } + }, calculate:function(a,b){ return this.operations[operation](parseFloat(a),parseFloat(b)).toString() @@ -84,10 +96,9 @@ export default function Calculator(props){ return( <>
-

{memory}

+

{"memory: "+memory}

{main}

-

{operation}

-

{JSON.stringify(mainInitialised)}

+

{"operation: "+operation}