From 7dd60576cc306510ed1c6b09d1608e9ce8d4502b Mon Sep 17 00:00:00 2001 From: Arvid Norlin Date: Fri, 10 May 2024 14:09:48 +0200 Subject: [PATCH] feat: use hardcodded benefits data --- .../LoyaltyLevels/data/index.ts | 19 +++++++++++ .../DynamicContent/LoyaltyLevels/index.tsx | 34 +++++++++++++------ .../Blocks/Benefits/CurrentLevel/index.tsx | 32 +++++++++++++---- .../MyPages/Blocks/Benefits/data/index.ts | 19 +++++++++++ types/components/loyalty/blocks.ts | 15 ++++++-- 5 files changed, 100 insertions(+), 19 deletions(-) create mode 100644 components/Loyalty/Blocks/DynamicContent/LoyaltyLevels/data/index.ts create mode 100644 components/MyPages/Blocks/Benefits/data/index.ts diff --git a/components/Loyalty/Blocks/DynamicContent/LoyaltyLevels/data/index.ts b/components/Loyalty/Blocks/DynamicContent/LoyaltyLevels/data/index.ts new file mode 100644 index 000000000..04054d3fd --- /dev/null +++ b/components/Loyalty/Blocks/DynamicContent/LoyaltyLevels/data/index.ts @@ -0,0 +1,19 @@ +import { Lang } from "@/constants/languages" + +import DA from "./DA.json" +import DE from "./DE.json" +import EN from "./EN.json" +import FI from "./FI.json" +import NO from "./NO.json" +import SV from "./SV.json" + +const levelsData = { + [Lang.en]: EN, + [Lang.sv]: SV, + [Lang.no]: NO, + [Lang.fi]: FI, + [Lang.da]: DA, + [Lang.de]: DE, +} + +export default levelsData diff --git a/components/Loyalty/Blocks/DynamicContent/LoyaltyLevels/index.tsx b/components/Loyalty/Blocks/DynamicContent/LoyaltyLevels/index.tsx index 5541f649d..e2b6e6b9c 100644 --- a/components/Loyalty/Blocks/DynamicContent/LoyaltyLevels/index.tsx +++ b/components/Loyalty/Blocks/DynamicContent/LoyaltyLevels/index.tsx @@ -1,24 +1,30 @@ +"use client" + +import { useParams } from "next/navigation" import { Check } from "react-feather" +import { Lang } from "@/constants/languages" import { _ } from "@/lib/translation" -import { serverClient } from "@/lib/trpc/server" import Image from "@/components/Image" import Button from "@/components/TempDesignSystem/Button" import Link from "@/components/TempDesignSystem/Link" import Title from "@/components/Title" +import levelsData from "./data" + import styles from "./loyaltyLevels.module.css" -import { LevelCardProps } from "@/types/components/loyalty/blocks" +import { Level, LevelCardProps } from "@/types/components/loyalty/blocks" -export default async function LoyaltyLevels() { - const data = await serverClient().loyalty.levels.all() +export default function LoyaltyLevels() { + const { lang } = useParams() + const { levels } = levelsData[lang as Lang] return (
- {data.map((level) => ( + {levels.map((level: Level) => ( ))}
@@ -32,17 +38,23 @@ export default async function LoyaltyLevels() { } function LevelCard({ level }: LevelCardProps) { + const { lang } = useParams() + + const pointsString = `${level.requiredPoints.toLocaleString(lang)}p` + const qualifications = level.requiredNights + ? `${pointsString} ${_("or")} ${level.requiredNights} ${_("nights")}` + : pointsString return (
- {level.tier} + + {level.tier} + {level.name} -

- {level.requiredPoints} {_("or")} {level.requiredNights} {_("nights")} -

+

{qualifications}

{level.topBenefits.map((benefit) => ( -

+

- {benefit} + {benefit.title}

))}
diff --git a/components/MyPages/Blocks/Benefits/CurrentLevel/index.tsx b/components/MyPages/Blocks/Benefits/CurrentLevel/index.tsx index 12b18e987..4e2ec4867 100644 --- a/components/MyPages/Blocks/Benefits/CurrentLevel/index.tsx +++ b/components/MyPages/Blocks/Benefits/CurrentLevel/index.tsx @@ -1,9 +1,12 @@ import Link from "next/link" +import { Lang } from "@/constants/languages" import { serverClient } from "@/lib/trpc/server" import Title from "@/components/Title" +import levelsData from "../data" + import styles from "./current.module.css" import { AccountPageComponentProps } from "@/types/components/myPages/myPage/accountPage" @@ -13,7 +16,20 @@ export default async function CurrentBenefitsBlock({ subtitle, link, }: AccountPageComponentProps) { - const benefits = await serverClient().user.benefits.current() + const user = await serverClient().user.get() + // TODO: level should be fetched from the `user` object once available + // TAKE NOTE: we need clarification on how benefits stack from different levels + // in order to determine if a benefit is specific to a level or if it is a cumulative benefit + // we might have to add a new boolean property "exclusive" or similar + const userLevel = 1 + + const currentLevel = levelsData[Lang.en].levels.find( + (level) => level.tier === userLevel + ) + if (!currentLevel) { + // TODO: handle this case? + return null + } return (
@@ -38,13 +54,17 @@ export default async function CurrentBenefitsBlock({ {subtitle &&

{subtitle}

}
- {benefits.map((benefit) => ( - + {currentLevel.topBenefits.map((benefit, idx) => ( + - <span className={styles.value}>{benefit.value}</span>{" "} - {benefit.explanation} + <span className={styles.value}>{benefit.value}</span> + {benefit.explaination ? ` ${benefit.explaination}` : ""} -

{benefit.subtitle}

+

{benefit.description}

))}
diff --git a/components/MyPages/Blocks/Benefits/data/index.ts b/components/MyPages/Blocks/Benefits/data/index.ts new file mode 100644 index 000000000..04054d3fd --- /dev/null +++ b/components/MyPages/Blocks/Benefits/data/index.ts @@ -0,0 +1,19 @@ +import { Lang } from "@/constants/languages" + +import DA from "./DA.json" +import DE from "./DE.json" +import EN from "./EN.json" +import FI from "./FI.json" +import NO from "./NO.json" +import SV from "./SV.json" + +const levelsData = { + [Lang.en]: EN, + [Lang.sv]: SV, + [Lang.no]: NO, + [Lang.fi]: FI, + [Lang.da]: DA, + [Lang.de]: DE, +} + +export default levelsData diff --git a/types/components/loyalty/blocks.ts b/types/components/loyalty/blocks.ts index 2c73c8d58..120fe2460 100644 --- a/types/components/loyalty/blocks.ts +++ b/types/components/loyalty/blocks.ts @@ -21,13 +21,24 @@ export type CardGridProps = Pick export type Content = { content: RteBlockContent["content"]["content"] } +type Benefit = { title: string; description: string } + +export type Level = { + tier: number + name: string + requiredPoints: number + requiredNights?: number + logo: string + topBenefits: Benefit[] +} + export type LevelCardProps = { level: { tier: number name: string requiredPoints: number - requiredNights: string - topBenefits: string[] + requiredNights?: number + topBenefits: Benefit[] logo: string } }