From a5367354b6834ec9e3f8ffea9f3a189c44f3d26a Mon Sep 17 00:00:00 2001 From: Arvid Norlin Date: Tue, 21 May 2024 09:42:42 +0200 Subject: [PATCH] add perk comparison logic --- .../DynamicContent/OverviewTable/index.tsx | 71 ++++++++++++++----- 1 file changed, 52 insertions(+), 19 deletions(-) diff --git a/components/Loyalty/Blocks/DynamicContent/OverviewTable/index.tsx b/components/Loyalty/Blocks/DynamicContent/OverviewTable/index.tsx index 2dd4fe70a..2a2a479a4 100644 --- a/components/Loyalty/Blocks/DynamicContent/OverviewTable/index.tsx +++ b/components/Loyalty/Blocks/DynamicContent/OverviewTable/index.tsx @@ -13,28 +13,56 @@ import levelsData from "./data/EN.json" import styles from "./overviewTable.module.css" -const defaultCardProps = { - title: "title", - 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 getLevelByTier(tier: number) { + return levelsData.levels.find((level) => level.tier === tier) as Level +} + +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 ( + + ) + })} + + ) } export default function OverviewTable() { - const [selectedLevelA, setSelectedLevelA] = useState("1") - const [selectedLevelB, setSelectedLevelB] = useState("2") + const [selectedLevelA, setSelectedLevelA] = useState(getLevelByTier(1)) + 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) { - setSelectedLevelA(event.target.value) + const tier = parseInt(event.target.value) + const level = getLevelByTier(tier) + setSelectedLevelA(level) } function handleSelectChangeB(event: React.ChangeEvent) { - setSelectedLevelB(event.target.value) + const tier = parseInt(event.target.value) + const level = getLevelByTier(tier) + setSelectedLevelB(level) } const levelOptions = levelsData.levels.map((level) => ({ label: level.name, - value: `${level.tier}`, + value: level.tier, })) return (
@@ -63,13 +91,13 @@ export default function OverviewTable() {
`${level.tier}` === selectedLevelB + (level) => level.tier === selectedLevelB.tier ) as Level } />
- - - + {createComparison(selectedLevelA, selectedLevelB)} ) @@ -100,9 +126,9 @@ export default function OverviewTable() { type SelectProps = { options: { label: string - value: string + value: number }[] - defaultOption: string + defaultOption: number onChange: (event: React.ChangeEvent) => void } @@ -134,6 +160,13 @@ type Level = { description: string requirement: string icon: string + benefits: [ + { + name: string + description: string + unlocked: boolean + }, + ] } type LevelSummaryProps = {