import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" import { Typography } from "@scandic-hotels/design-system/Typography" import { serverClient } from "@/lib/trpc/server" import MembershipLevelIcon from "@/components/Levels/Icon" import { getIntl } from "@/i18n" import SectionWrapper from "../SectionWrapper" import styles from "./loyaltyLevels.module.css" import type { LoyaltyLevelsProps } from "@/types/components/blocks/dynamicContent" import type { LevelCardProps } from "@/types/components/overviewTable" export default async function LoyaltyLevels({ dynamic_content, }: LoyaltyLevelsProps) { const caller = await serverClient() const uniqueLevels = await caller.contentstack.rewards.all({ unique: true, }) return (
{uniqueLevels.map((level) => ( ))}
) } async function LevelCard({ level }: LevelCardProps) { const intl = await getIntl() let pointsMsg: React.ReactNode = intl.formatMessage( { id: "common.pointsAmountPoints", defaultMessage: "{pointsAmount, number} points", }, { pointsAmount: level.required_points } ) if (level.required_nights) { pointsMsg = intl.formatMessage( { id: "loyaltyLevelsBlock.pointsOrNights", defaultMessage: "{pointsAmount, number} points or {nightsAmount, number} nights", }, { pointsAmount: level.required_points, nightsAmount: level.required_nights, highlight: (str) => {str}, } ) } return (

{intl.formatMessage( { id: "common.membershipLevelWithValue", defaultMessage: "Level {level}", }, { level: level.user_facing_tag } )}

{pointsMsg}
{level.rewards.map((reward) => (

{reward.label}

))}
) }