add perk comparison logic

This commit is contained in:
Arvid Norlin
2024-05-21 09:42:42 +02:00
parent c171c909cb
commit a5367354b6

View File

@@ -13,28 +13,56 @@ import levelsData from "./data/EN.json"
import styles from "./overviewTable.module.css" import styles from "./overviewTable.module.css"
const defaultCardProps = { function getLevelByTier(tier: number) {
title: "title", return levelsData.levels.find((level) => level.tier === tier) as Level
description: `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do }
eiusmod tempor incididunt ut labore et dolore magna aliqua.`,
comparedValues: { a: false, b: true }, function createComparison(levelA: Level, levelB: Level) {
const comparedLevels = [levelA, levelB].sort(
(a, b) => a.benefits.length - b.benefits.length
)
return (
<>
{comparedLevels[1].benefits
.filter((benefit) => benefit.unlocked)
.map((benefit, idx) => {
return (
<PerkCard
key={benefit.name}
title={benefit.name}
description={benefit.description}
comparedValues={{
a: comparedLevels[0].benefits[idx].unlocked,
b: comparedLevels[1].benefits[idx].unlocked,
}}
/>
)
})}
</>
)
} }
export default function OverviewTable() { export default function OverviewTable() {
const [selectedLevelA, setSelectedLevelA] = useState("1") const [selectedLevelA, setSelectedLevelA] = useState(getLevelByTier(1))
const [selectedLevelB, setSelectedLevelB] = useState("2") const [selectedLevelB, setSelectedLevelB] = useState(getLevelByTier(2))
// TODO Come up with a nice wat to make these two a single reusable function
function handleSelectChangeA(event: React.ChangeEvent<HTMLSelectElement>) { function handleSelectChangeA(event: React.ChangeEvent<HTMLSelectElement>) {
setSelectedLevelA(event.target.value) const tier = parseInt(event.target.value)
const level = getLevelByTier(tier)
setSelectedLevelA(level)
} }
function handleSelectChangeB(event: React.ChangeEvent<HTMLSelectElement>) { function handleSelectChangeB(event: React.ChangeEvent<HTMLSelectElement>) {
setSelectedLevelB(event.target.value) const tier = parseInt(event.target.value)
const level = getLevelByTier(tier)
setSelectedLevelB(level)
} }
const levelOptions = levelsData.levels.map((level) => ({ const levelOptions = levelsData.levels.map((level) => ({
label: level.name, label: level.name,
value: `${level.tier}`, value: level.tier,
})) }))
return ( return (
<div className={styles.container}> <div className={styles.container}>
@@ -63,13 +91,13 @@ export default function OverviewTable() {
<div className={styles.columnHeader}> <div className={styles.columnHeader}>
<Select <Select
options={levelOptions} options={levelOptions}
defaultOption={selectedLevelA} defaultOption={selectedLevelA.tier}
onChange={handleSelectChangeA} onChange={handleSelectChangeA}
/> />
<LevelSummary <LevelSummary
level={ level={
levelsData.levels.find( levelsData.levels.find(
(level) => `${level.tier}` === selectedLevelA (level) => level.tier === selectedLevelA.tier
) as Level ) as Level
} }
/> />
@@ -77,21 +105,19 @@ export default function OverviewTable() {
<div className={styles.columnHeader}> <div className={styles.columnHeader}>
<Select <Select
options={levelOptions} options={levelOptions}
defaultOption={selectedLevelB} defaultOption={selectedLevelB.tier}
onChange={handleSelectChangeB} onChange={handleSelectChangeB}
/> />
<LevelSummary <LevelSummary
level={ level={
levelsData.levels.find( levelsData.levels.find(
(level) => `${level.tier}` === selectedLevelB (level) => level.tier === selectedLevelB.tier
) as Level ) as Level
} }
/> />
</div> </div>
</div> </div>
<PerkCard {...defaultCardProps} /> {createComparison(selectedLevelA, selectedLevelB)}
<PerkCard {...defaultCardProps} />
<PerkCard {...defaultCardProps} />
</div> </div>
</div> </div>
) )
@@ -100,9 +126,9 @@ export default function OverviewTable() {
type SelectProps = { type SelectProps = {
options: { options: {
label: string label: string
value: string value: number
}[] }[]
defaultOption: string defaultOption: number
onChange: (event: React.ChangeEvent<HTMLSelectElement>) => void onChange: (event: React.ChangeEvent<HTMLSelectElement>) => void
} }
@@ -134,6 +160,13 @@ type Level = {
description: string description: string
requirement: string requirement: string
icon: string icon: string
benefits: [
{
name: string
description: string
unlocked: boolean
},
]
} }
type LevelSummaryProps = { type LevelSummaryProps = {