feat: add calculation methods

This commit is contained in:
sirlolcat 2022-06-03 05:01:28 +04:30
parent c0f15cf713
commit 8c090978fd
2 changed files with 56 additions and 18 deletions

View File

@ -4,12 +4,12 @@ import Item from './Item';
function App() { function App() {
return ( return (
<div className="App"> <div className="App">
<Item name="+5 Dexterity Vest" sellIn={10} quality={20} isConjured={true} /> <Item name="+5 Dexterity Vest" sellIn={10} quality={20} isConjured={false} />
<Item name="Aged Brie" sellIn={2} quality={0} isConjured={false} /> <Item name="Aged Brie" sellIn={2} quality={0} isConjured={false} />
<Item name="Elixir of the Mongoose" sellIn={5} quality={7} isConjured={false} /> <Item name="Elixir of the Mongoose" sellIn={5} quality={7} isConjured={false} />
<Item name="Sulfuras, Hand of Ragnaros" sellIn={0} quality={80} isConjured={false} /> <Item name="Sulfuras, Hand of Ragnaros" sellIn={1} quality={80} isConjured={false} />
<Item name="Backstage passes to a TAFKAL80ETC concert" sellIn={15} quality={20} isConjured={false} /> <Item name="Backstage passes to a TAFKAL80ETC concert" sellIn={15} quality={20} isConjured={false} />
<Item name="Conjured Mana Cake" sellIn={3} quality={6} isConjured={false} /> <Item name="Conjured Mana Cake" sellIn={3} quality={6} isConjured={true} />
</div> </div>
); );
} }

View File

@ -1,22 +1,60 @@
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
function calculateQuality(quality: number, isConjured: boolean): number { function calculateQuality(name:string, quality: number, sellIn: number,isConjured: boolean): number {
const calculatedQuality = quality; const sellInAmount = sellIn;
const calculatedBias = isConjured ? 2 : 1;
if(calculatedQuality > 50) { let calculatedQuality = quality;
let degradeRate = 1;
let qualityIdentifier = 1;
if(sellInAmount <= 0) {
return calculatedQuality;
}
if(name.includes("Sulfuras")) {
return 80;
};
if(calculatedQuality >= 50) {
return 50; return 50;
} else if(calculatedQuality < 0) { } else if(calculatedQuality <= 0) {
return 0; return 0;
} }
if(isConjured) {
degradeRate = 2;
}
if(name.includes('Aged Brie')) {
qualityIdentifier = -1;
}
return calculatedQuality * calculatedBias; if(name.includes('Backstage passes')) {
if(sellInAmount <= 10 && sellInAmount > 5) {
qualityIdentifier = -3;
} else if(sellInAmount <= 5 && sellInAmount > 0) {
qualityIdentifier = -2;
} else if(sellInAmount <= 0) {
qualityIdentifier = 0;
degradeRate = 0;
}
}
return degradeRate * calculatedQuality - qualityIdentifier;
}; };
function calculateSellIn(sellIn: number): number { function calculateSellIn(name:string, sellIn: number): number {
return sellIn - 1; let sellInAmount = sellIn;
if(name.includes("Sulfuras")) {
return sellInAmount;
};
if(sellInAmount <= 0) {
return 0;
}
return sellIn - 1;
}; };
type ItemProps = { type ItemProps = {
@ -49,17 +87,17 @@ const Item = (props: ItemProps) => {
return ( return (
<div> <div>
<p color={isConjured ? 'Red' : 'Green'}>The name {name}</p> <p color={isConjured ? 'Red' : 'Green'}>{name}</p>
<p>The quality {quality}</p> <p>{quality}</p>
<p>The sellIn {sellIn}</p> <p>{sellIn}</p>
<br></br> <br></br>
<button onClick={() => { <button onClick={() => {
setSellIn(calculateSellIn(sellIn)); setQuality(calculateQuality(name, sellIn, quality, isConjured));
setQuality(calculateQuality(quality, isConjured)); setSellIn(calculateSellIn(name, sellIn));
}}> }}>
Next Day Purchase
</button> </button>
<br></br> <br></br>
</div> </div>