Files
web/apps/scandic-web/components/MyPages/LevelProgressCard/HighestLevelCard/index.tsx
Chuma Mcphoy (We Ahead) c6da0fb8cb Merged in feat/LOY-316-Level-Progress-Card (pull request #2739)
Feat/LOY-316 Level Progress Card

* feat(LOY-315): Add MembershipOverviewCard

* refactor(LOY-315): abstract sasbooststatus

* feat(LOY-316): build out LevelProgressCard skeleton & variant styling

* feat(LOY-316): Add HighesMembershipCard

* feat(LOY-316): ProgressBarCard base

* refactor(LOY-315): highest level card misc fixes

* feat(LOY-316): Add progress component to design system

* fix(LOY-316): type check

* refactor(LOY-316): calculate currentEarnings correctly

* fix(LOY-316): sas icon showing when not boosted

* fix(LOY-316): css module

* refactor(LOY-316): Restructure components

* feat(LOY-316): Add marker pin 📍

* fix(LOY-316): strict equality checks

* fix(LOY-316): code review fixes

* chore(LOY-316): conditionally hide old section under flag

* feat(LOY-316): Add level progress card to my points page

* chore(LOY-316): marker label container height


Approved-by: Matilda Landström
2025-09-10 06:53:22 +00:00

56 lines
1.7 KiB
TypeScript

import { MembershipLevelEnum } from "@scandic-hotels/common/constants/membershipLevels"
import TrophyIcon from "@scandic-hotels/design-system/Icons/TrophyIcon"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { serverClient } from "@/lib/trpc/server"
import styles from "./highestLevelCard.module.css"
import type { HighestLevelCardProps } from "../types"
export default async function HighestLevelCard({
membershipLevel,
intl,
}: HighestLevelCardProps) {
const caller = await serverClient()
const highestLevel = await caller.contentstack.loyaltyLevels.byLevel({
level: MembershipLevelEnum[membershipLevel],
})
const pointsEarned = highestLevel?.required_points
return (
<div className={styles.card}>
<TrophyIcon className={styles.icon} width={79} height={118} />
<div className={styles.content}>
<Typography variant="Title/Subtitle/md">
<h3 className={styles.title}>
{intl.formatMessage({
defaultMessage: "Hello Best Friend!",
})}
</h3>
</Typography>
{pointsEarned && (
<Typography variant="Body/Paragraph/mdRegular">
<p>
{intl.formatMessage(
{
defaultMessage:
"you've made it to the top by earning {pointAmount} <strong>points!</strong> Continue earning points for more points to spend.",
},
{
pointAmount: (
<strong>{intl.formatNumber(pointsEarned)}</strong>
),
strong: (str) => <strong>{str}</strong>,
}
)}
</p>
</Typography>
)}
</div>
</div>
)
}