Merged in fix/LOY-359-revert-to-loyalty-level-to-support-boosted-level (pull request #2954)

fix(LOY-359): Revert back to allow non-native loyalty level in overview cards

* fix(LOY-359): Revert back to allow non-native loyalty level in overview cards


Approved-by: Erik Tiekstra
This commit is contained in:
Chuma Mcphoy (We Ahead)
2025-10-13 06:51:59 +00:00
parent b7af8f5eb2
commit 29f51e655e
4 changed files with 15 additions and 33 deletions

View File

@@ -2,10 +2,7 @@ import { MembershipLevelEnum } from "@scandic-hotels/common/constants/membership
import { Divider } from "@scandic-hotels/design-system/Divider" import { Divider } from "@scandic-hotels/design-system/Divider"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { import { getEurobonusMembership } from "@scandic-hotels/trpc/routers/user/helpers"
getEurobonusMembership,
getScandicNativeMembership,
} from "@scandic-hotels/trpc/routers/user/helpers"
import { membershipLevels } from "@/constants/membershipLevels" import { membershipLevels } from "@/constants/membershipLevels"
@@ -28,19 +25,13 @@ export default async function MembershipOverviewCard({
}: MembershipOverviewCardProps) { }: MembershipOverviewCardProps) {
const intl = await getIntl() const intl = await getIntl()
const friendsMembership = user.loyalty if (!user.membership?.membershipLevel) {
? getScandicNativeMembership(user.loyalty)
: null
if (!user.membership || !friendsMembership) {
return null return null
} }
const currentPoints = user.membership.currentPoints
const pointsToSpendText = const pointsToSpendText =
typeof currentPoints === "number" typeof user.membership.currentPoints === "number"
? intl.formatNumber(currentPoints) ? intl.formatNumber(user.membership.currentPoints)
: intl.formatMessage({ defaultMessage: "N/A" }) : intl.formatMessage({ defaultMessage: "N/A" })
const sasMembership = user.loyalty const sasMembership = user.loyalty
@@ -64,7 +55,7 @@ export default async function MembershipOverviewCard({
{ {
defaultMessage: "LEVEL {level}", defaultMessage: "LEVEL {level}",
}, },
{ level: membershipLevels[friendsMembership.tier] } { level: membershipLevels[user.membership.membershipLevel] }
)} )}
</h2> </h2>
</Typography> </Typography>
@@ -74,7 +65,7 @@ export default async function MembershipOverviewCard({
</header> </header>
<MembershipLevelIcon <MembershipLevelIcon
level={MembershipLevelEnum[friendsMembership.tier]} level={MembershipLevelEnum[user.membership.membershipLevel]}
height="44" height="44"
width="268" width="268"
rows={1} rows={1}

View File

@@ -1,6 +1,5 @@
import { dt } from "@scandic-hotels/common/dt" import { dt } from "@scandic-hotels/common/dt"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { getScandicNativeMembership } from "@scandic-hotels/trpc/routers/user/helpers"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
import { getLang } from "@/i18n/serverContext" import { getLang } from "@/i18n/serverContext"
@@ -21,17 +20,13 @@ export default async function LevelProgressCard({
className, className,
color = "Surface/Brand/Primary 1/OnSurface/Default", color = "Surface/Brand/Primary 1/OnSurface/Default",
}: levelProgressCardProps) { }: levelProgressCardProps) {
const friendsMembership = user.loyalty if (!user.membership?.membershipLevel) {
? getScandicNativeMembership(user.loyalty)
: null
if (!friendsMembership) {
return null return null
} }
const intl = await getIntl() const intl = await getIntl()
const lang = await getLang() const lang = await getLang()
const data = await getLevelProgressData(friendsMembership) const data = await getLevelProgressData(user.membership)
const classNames = levelProgressCardVariants({ className, color }) const classNames = levelProgressCardVariants({ className, color })
return ( return (
@@ -49,7 +44,7 @@ export default async function LevelProgressCard({
{intl.formatMessage( {intl.formatMessage(
{ defaultMessage: "Valid until {date}" }, { defaultMessage: "Valid until {date}" },
{ {
date: dt(friendsMembership.tierExpires) date: dt(user.membership.tierExpirationDate)
.locale(lang) .locale(lang)
.format("D MMM YYYY"), .format("D MMM YYYY"),
} }
@@ -58,7 +53,7 @@ export default async function LevelProgressCard({
</Typography> </Typography>
<LevelProgressModal <LevelProgressModal
color={color} color={color}
tierExpires={friendsMembership.tierExpires} tierExpires={user.membership.tierExpirationDate}
/> />
</header> </header>

View File

@@ -6,14 +6,14 @@ import { isHighestMembership } from "@/utils/user"
import { type LevelProgressData, type ProgressCalculation } from "./types" import { type LevelProgressData, type ProgressCalculation } from "./types"
import type { NativeFriendsMembership } from "@scandic-hotels/trpc/types/user" import type { FriendsMembership } from "@scandic-hotels/trpc/types/user"
export async function getLevelProgressData( export async function getLevelProgressData(
membership: NonNullable<NativeFriendsMembership> membership: NonNullable<FriendsMembership>
): Promise<LevelProgressData> { ): Promise<LevelProgressData> {
const caller = await serverClient() const caller = await serverClient()
const currentLevel = await caller.contentstack.loyaltyLevels.byLevel({ const currentLevel = await caller.contentstack.loyaltyLevels.byLevel({
level: MembershipLevelEnum[membership.tier], level: MembershipLevelEnum[membership.membershipLevel],
}) })
const earned = membership.tierPoints ?? 0 const earned = membership.tierPoints ?? 0
@@ -24,7 +24,7 @@ export async function getLevelProgressData(
? currentLevel.required_points - earned ? currentLevel.required_points - earned
: undefined : undefined
if (isHighestMembership(membership.tier)) { if (isHighestMembership(membership.membershipLevel)) {
return toKeepCurrent return toKeepCurrent
? { ? {
type: "highest-incomplete", type: "highest-incomplete",
@@ -38,7 +38,7 @@ export async function getLevelProgressData(
return { return {
type: "lower-level", type: "lower-level",
earned, earned,
toNext: membership.pointsToNextTier ?? 0, toNext: membership.pointsRequiredToNextlevel ?? 0,
toKeepCurrent, toKeepCurrent,
} }
} }

View File

@@ -48,10 +48,6 @@ export function getFriendsMembership(userLoyalty: UserLoyalty) {
return result return result
} }
export function getScandicNativeMembership(loyalty: UserLoyalty) {
return loyalty.memberships?.find(isScandicNativeMembership)
}
function isEurobonusMembership( function isEurobonusMembership(
membership: Membership membership: Membership
): membership is EurobonusMembership { ): membership is EurobonusMembership {