mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-17 23:41:27 +00:00
feat: add calculation methods
This commit is contained in:
parent
c0f15cf713
commit
8c090978fd
@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
return calculatedQuality * calculatedBias;
|
if(name.includes('Aged Brie')) {
|
||||||
|
qualityIdentifier = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
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>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user