Merged in fix/LOY-359-use-scandic-native-tier-data (pull request #2846)
fix(LOY-359): Always use scandic native tier data for all level related data * fix(LOY-359): Always use scandic native tier data for all level related data Approved-by: Erik Tiekstra Approved-by: Matilda Landström
This commit is contained in:
@@ -2,7 +2,10 @@ import { MembershipLevelEnum } from "@scandic-hotels/common/constants/membership
|
||||
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 { getEurobonusMembership } from "@scandic-hotels/trpc/routers/user/helpers"
|
||||
import {
|
||||
getEurobonusMembership,
|
||||
getScandicNativeMembership,
|
||||
} from "@scandic-hotels/trpc/routers/user/helpers"
|
||||
|
||||
import { membershipLevels } from "@/constants/membershipLevels"
|
||||
|
||||
@@ -25,13 +28,19 @@ export default async function MembershipOverviewCard({
|
||||
}: MembershipOverviewCardProps) {
|
||||
const intl = await getIntl()
|
||||
|
||||
if (!user.membership?.membershipLevel) {
|
||||
const friendsMembership = user.loyalty
|
||||
? getScandicNativeMembership(user.loyalty)
|
||||
: null
|
||||
|
||||
if (!user.membership || !friendsMembership) {
|
||||
return null
|
||||
}
|
||||
|
||||
const currentPoints = user.membership.currentPoints
|
||||
|
||||
const pointsToSpendText =
|
||||
typeof user.membership.currentPoints === "number"
|
||||
? intl.formatNumber(user.membership.currentPoints)
|
||||
typeof currentPoints === "number"
|
||||
? intl.formatNumber(currentPoints)
|
||||
: intl.formatMessage({ defaultMessage: "N/A" })
|
||||
|
||||
const sasMembership = user.loyalty
|
||||
@@ -55,7 +64,7 @@ export default async function MembershipOverviewCard({
|
||||
{
|
||||
defaultMessage: "LEVEL {level}",
|
||||
},
|
||||
{ level: membershipLevels[user.membership.membershipLevel] }
|
||||
{ level: membershipLevels[friendsMembership.tier] }
|
||||
)}
|
||||
</h2>
|
||||
</Typography>
|
||||
@@ -65,7 +74,7 @@ export default async function MembershipOverviewCard({
|
||||
</header>
|
||||
|
||||
<MembershipLevelIcon
|
||||
level={MembershipLevelEnum[user.membership.membershipLevel]}
|
||||
level={MembershipLevelEnum[friendsMembership.tier]}
|
||||
height="44"
|
||||
width="268"
|
||||
rows={1}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { dt } from "@scandic-hotels/common/dt"
|
||||
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
|
||||
import { Typography } from "@scandic-hotels/design-system/Typography"
|
||||
import { getScandicNativeMembership } from "@scandic-hotels/trpc/routers/user/helpers"
|
||||
|
||||
import { getIntl } from "@/i18n"
|
||||
import { getLang } from "@/i18n/serverContext"
|
||||
@@ -20,13 +21,17 @@ export default async function LevelProgressCard({
|
||||
className,
|
||||
color = "Surface/Brand/Primary 1/OnSurface/Default",
|
||||
}: levelProgressCardProps) {
|
||||
if (!user.membership?.membershipLevel) {
|
||||
const friendsMembership = user.loyalty
|
||||
? getScandicNativeMembership(user.loyalty)
|
||||
: null
|
||||
|
||||
if (!friendsMembership) {
|
||||
return null
|
||||
}
|
||||
|
||||
const intl = await getIntl()
|
||||
const lang = await getLang()
|
||||
const data = await getLevelProgressData(user.membership)
|
||||
const data = await getLevelProgressData(friendsMembership)
|
||||
const classNames = levelProgressCardVariants({ className, color })
|
||||
|
||||
return (
|
||||
@@ -44,7 +49,7 @@ export default async function LevelProgressCard({
|
||||
{intl.formatMessage(
|
||||
{ defaultMessage: "Valid until {date}" },
|
||||
{
|
||||
date: dt(user.membership.tierExpirationDate)
|
||||
date: dt(friendsMembership.tierExpires)
|
||||
.locale(lang)
|
||||
.format("D MMM YYYY"),
|
||||
}
|
||||
|
||||
@@ -6,14 +6,14 @@ import { isHighestMembership } from "@/utils/user"
|
||||
|
||||
import { type LevelProgressData, type ProgressCalculation } from "./types"
|
||||
|
||||
import type { FriendsMembership } from "@scandic-hotels/trpc/types/user"
|
||||
import type { NativeFriendsMembership } from "@scandic-hotels/trpc/types/user"
|
||||
|
||||
export async function getLevelProgressData(
|
||||
membership: NonNullable<FriendsMembership>
|
||||
membership: NonNullable<NativeFriendsMembership>
|
||||
): Promise<LevelProgressData> {
|
||||
const caller = await serverClient()
|
||||
const currentLevel = await caller.contentstack.loyaltyLevels.byLevel({
|
||||
level: MembershipLevelEnum[membership.membershipLevel],
|
||||
level: MembershipLevelEnum[membership.tier],
|
||||
})
|
||||
|
||||
const earned = membership.tierPoints ?? 0
|
||||
@@ -24,7 +24,7 @@ export async function getLevelProgressData(
|
||||
? currentLevel.required_points - earned
|
||||
: undefined
|
||||
|
||||
if (isHighestMembership(membership.membershipLevel)) {
|
||||
if (isHighestMembership(membership.tier)) {
|
||||
return toKeepCurrent
|
||||
? {
|
||||
type: "highest-incomplete",
|
||||
@@ -38,7 +38,7 @@ export async function getLevelProgressData(
|
||||
return {
|
||||
type: "lower-level",
|
||||
earned,
|
||||
toNext: membership.pointsRequiredToNextlevel ?? 0,
|
||||
toNext: membership.pointsToNextTier ?? 0,
|
||||
toKeepCurrent,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,10 @@ export function getFriendsMembership(userLoyalty: UserLoyalty) {
|
||||
return result
|
||||
}
|
||||
|
||||
export function getScandicNativeMembership(loyalty: UserLoyalty) {
|
||||
return loyalty.memberships?.find(isScandicNativeMembership)
|
||||
}
|
||||
|
||||
function isEurobonusMembership(
|
||||
membership: Membership
|
||||
): membership is EurobonusMembership {
|
||||
|
||||
Reference in New Issue
Block a user