"use client" import { Fragment, useState } from "react" import { Minus } from "react-feather" import { Lang } from "@/constants/languages" import { _ } from "@/lib/translation" import CheckCircle from "@/components/Icons/CheckCircle" import ChevronDown from "@/components/Icons/ChevronDown" import Image from "@/components/Image" import Title from "@/components/Title" import levelsData from "./data/EN.json" import styles from "./overviewTable.module.css" import { BenefitCardProps, BenefitValueProps, ComparisonLevel, LevelSummaryProps, OverviewTableTitleProps, } from "@/types/components/loyalty/blocks" // These should ultimately be fetched from Contentstack const titleTranslations = { [Lang.en]: [ { text: "7 delightful levels", highlight: true }, { text: "of friendship", highlight: false }, ], // TODO: Add translations for the following languages [Lang.da]: [ { text: "7 delightful levels", highlight: true }, { text: "of friendship", highlight: false }, ], [Lang.no]: [ { text: "7 delightful levels", highlight: true }, { text: "of friendship", highlight: false }, ], [Lang.sv]: [ { text: "7 delightful levels", highlight: true }, { text: "of friendship", highlight: false }, ], [Lang.fi]: [ { text: "7 delightful levels", highlight: true }, { text: "of friendship", highlight: false }, ], [Lang.de]: [ { text: "7 delightful levels", highlight: true }, { text: "of friendship", highlight: false }, ], } function OverviewTableTitle({ texts }: OverviewTableTitleProps) { return ( {texts.map(({ text, highlight }, idx) => ( <Fragment key={idx}> <span className={highlight ? styles.highlight : ""}>{text}</span> {idx < texts.length - 1 && " "} </Fragment> ))} ) } function getLevelByTier(tier: number) { return levelsData.levels.find( (level) => level.tier === tier ) as ComparisonLevel } function createComparison(levelA: ComparisonLevel, levelB: ComparisonLevel) { const unlockedBenefitsA = levelA.benefits.filter( (benefit) => benefit.unlocked ) const unlockedBenefitsB = levelB.benefits.filter( (benefit) => benefit.unlocked ) const higherLevelBenefits = unlockedBenefitsA.length > unlockedBenefitsB.length ? unlockedBenefitsA : unlockedBenefitsB return higherLevelBenefits.map((benefit, idx) => { const aBenefit = levelA.benefits[idx] const bBenefit = levelB.benefits[idx] return ( ) }) } export default function OverviewTable() { 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) { const tier = parseInt(event.target.value) const level = getLevelByTier(tier) setSelectedLevelA(level) } function handleSelectChangeB(event: React.ChangeEvent) { const tier = parseInt(event.target.value) const level = getLevelByTier(tier) setSelectedLevelB(level) } const levelOptions = levelsData.levels.map((level) => ({ label: level.name, value: level.tier, })) return (

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Arcu risus quis varius quam quisque id diam vel. Rhoncus urna neque viverra justo. Mattis aliquam faucibus purus in massa. Id cursus metus aliquam eleifend mi in nulla posuere.

level.tier === selectedLevelB.tier ) as ComparisonLevel } />
{createComparison(selectedLevelA, selectedLevelB)}
) } type SelectProps = { options: { label: string value: number }[] defaultOption: number onChange: (event: React.ChangeEvent) => void } // TODO: replace with Select component from TempDesignSystem function Select({ options, defaultOption, onChange }: SelectProps) { return (
) } function LevelSummary({ level }: LevelSummaryProps) { return (
{level.name} {level.requirement}

{level.description}

) } function BenefitCard({ comparedValues, title, description }: BenefitCardProps) { return (
{title}

{description}

) } function BenefitValue({ benefit }: BenefitValueProps) { if (!benefit.unlocked) { return } if (!benefit.value) { return } return (
{benefit.value} {benefit.valueDetails && ( {benefit.valueDetails} )}
) }