Files
web/apps/scandic-web/components/Blocks/DynamicContent/Rewards/NextLevel/index.tsx
Bianca Widstam 68c1b3dc50 Merged in chore/BOOK-708-replace-title-component (pull request #3414)
Chore/BOOK-708 replace title component

* chore(BOOK-708): replace title with typography

* chore(BOOK-708): replace title with typography

* chore(BOOK-708): remove Title from package.json


Approved-by: Linus Flood
Approved-by: Anton Gunnarsson
2026-01-12 07:54:59 +00:00

82 lines
2.6 KiB
TypeScript

import { Lock } from "react-feather"
import { MembershipLevelEnum } from "@scandic-hotels/common/constants/membershipLevels"
import { ChipStatic } from "@scandic-hotels/design-system/ChipStatic"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { getMembershipLevel } from "@/lib/trpc/memoizedRequests"
import { serverClient } from "@/lib/trpc/server"
import { Section } from "@/components/Section"
import { SectionHeader } from "@/components/Section/Header"
import SectionLink from "@/components/Section/Link"
import Grids from "@/components/TempDesignSystem/Grids"
import { getIntl } from "@/i18n"
import styles from "./next.module.css"
import type { AccountPageComponentProps } from "@/types/components/myPages/myPage/accountPage"
export default async function NextLevelRewardsBlock({
title,
subtitle,
link,
}: AccountPageComponentProps) {
const intl = await getIntl()
const membershipLevel = await getMembershipLevel()
if (!membershipLevel || !membershipLevel?.nextLevel) {
return null
}
const caller = await serverClient()
const nextLevelRewards = await caller.contentstack.rewards.byLevel({
level_id: MembershipLevelEnum[membershipLevel?.nextLevel],
unique: true,
})
// TODO: handle this case, when missing or when user is top level?
if (!nextLevelRewards) {
return null
}
return (
<Section>
<SectionHeader heading={title} preamble={subtitle} link={link} />
<Grids.Stackable columns={2}>
{nextLevelRewards.rewards.map((reward) => (
<article key={reward.reward_id} className={styles.card}>
<ChipStatic lowerCase>
<Lock height={16} />
{intl.formatMessage({
id: "rewards.nextLevel.levelUpToUnlock",
defaultMessage: "Level up to unlock",
})}
</ChipStatic>
<div className={styles.textContainer}>
<Typography
variant="Body/Paragraph/mdRegular"
className={styles.asOur}
>
<p>
{intl.formatMessage(
{
id: "rewards.nextLevel.asOurLevel",
defaultMessage: "As our {level}",
},
{ level: nextLevelRewards.level?.name }
)}
</p>
</Typography>
<Typography variant="Title/xs" className={styles.rewardTitle}>
<h4>{reward.label}</h4>
</Typography>
</div>
</article>
))}
</Grids.Stackable>
<SectionLink link={link} variant="mobile" />
</Section>
)
}