Files
web/apps/scandic-web/components/Blocks/DynamicContent/Overview/MembershipOverviewCard/index.tsx
Matilda Landström 4970dfa2ed Merged in fix/LOY-439-boosted-by-sas-bug (pull request #3047)
fix(LOY-439): fix "boosted by sas" issue

* fix(LOY-439): fix "boosted by sas" issue


Approved-by: Chuma Mcphoy (We Ahead)
2025-11-04 09:09:30 +00:00

87 lines
2.7 KiB
TypeScript

import { MembershipLevelEnum } from "@scandic-hotels/common/constants/membershipLevels"
import { Divider } from "@scandic-hotels/design-system/Divider"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { isBoostedBySas } from "@scandic-hotels/trpc/routers/user/helpers"
import { membershipLevels } from "@/constants/membershipLevels"
import MembershipLevelIcon from "@/components/Levels/Icon"
import { getIntl } from "@/i18n"
import SasBoostStatus from "./SasBoostStatus"
import styles from "./membershipOverviewCard.module.css"
import type { User } from "@scandic-hotels/trpc/types/user"
interface MembershipOverviewCardProps {
user: User
}
export default async function MembershipOverviewCard({
user,
}: MembershipOverviewCardProps) {
const intl = await getIntl()
if (!user.membership?.membershipLevel) {
return null
}
const pointsToSpendText =
typeof user.membership.currentPoints === "number"
? intl.formatNumber(user.membership.currentPoints)
: intl.formatMessage({ id: "common.NA", defaultMessage: "N/A" })
const boostedBySas = user.loyalty ? isBoostedBySas(user.loyalty) : null
return (
<section className={styles.card} aria-labelledby="membership-level">
<header className={styles.membershipHeader}>
{boostedBySas ? (
<MaterialIcon icon="travel" size={20} color="Icon/Accent" />
) : null}
<Typography variant="Title/Overline/sm">
<h2 className={styles.headingText} id="membership-level">
{intl.formatMessage(
{
id: "common.membershipLevelWithValue",
defaultMessage: "Level {level}",
},
{ level: membershipLevels[user.membership.membershipLevel] }
)}
</h2>
</Typography>
{user.loyalty && boostedBySas ? (
<SasBoostStatus expiryDate={user.loyalty?.tierExpires} />
) : null}
</header>
<MembershipLevelIcon
level={MembershipLevelEnum[user.membership.membershipLevel]}
height="44"
width="268"
rows={1}
/>
<Divider
className={styles.divider}
color="Border/Divider/Brand/OnPrimary 3/Default"
/>
<Typography variant="Title/Overline/sm">
<h3 className={styles.headingText}>
{intl.formatMessage({
id: "common.pointsToSpend",
defaultMessage: "Points to spend",
})}
</h3>
</Typography>
<Typography variant="Title/lg">
<p className={styles.pointsValue}>{pointsToSpendText}</p>
</Typography>
</section>
)
}