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 { 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 { getEurobonusMembership } from "@scandic-hotels/trpc/routers/user/helpers"
|
import {
|
||||||
|
getEurobonusMembership,
|
||||||
|
getScandicNativeMembership,
|
||||||
|
} from "@scandic-hotels/trpc/routers/user/helpers"
|
||||||
|
|
||||||
import { membershipLevels } from "@/constants/membershipLevels"
|
import { membershipLevels } from "@/constants/membershipLevels"
|
||||||
|
|
||||||
@@ -25,13 +28,19 @@ export default async function MembershipOverviewCard({
|
|||||||
}: MembershipOverviewCardProps) {
|
}: MembershipOverviewCardProps) {
|
||||||
const intl = await getIntl()
|
const intl = await getIntl()
|
||||||
|
|
||||||
if (!user.membership?.membershipLevel) {
|
const friendsMembership = user.loyalty
|
||||||
|
? getScandicNativeMembership(user.loyalty)
|
||||||
|
: null
|
||||||
|
|
||||||
|
if (!user.membership || !friendsMembership) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const currentPoints = user.membership.currentPoints
|
||||||
|
|
||||||
const pointsToSpendText =
|
const pointsToSpendText =
|
||||||
typeof user.membership.currentPoints === "number"
|
typeof currentPoints === "number"
|
||||||
? intl.formatNumber(user.membership.currentPoints)
|
? intl.formatNumber(currentPoints)
|
||||||
: intl.formatMessage({ defaultMessage: "N/A" })
|
: intl.formatMessage({ defaultMessage: "N/A" })
|
||||||
|
|
||||||
const sasMembership = user.loyalty
|
const sasMembership = user.loyalty
|
||||||
@@ -55,7 +64,7 @@ export default async function MembershipOverviewCard({
|
|||||||
{
|
{
|
||||||
defaultMessage: "LEVEL {level}",
|
defaultMessage: "LEVEL {level}",
|
||||||
},
|
},
|
||||||
{ level: membershipLevels[user.membership.membershipLevel] }
|
{ level: membershipLevels[friendsMembership.tier] }
|
||||||
)}
|
)}
|
||||||
</h2>
|
</h2>
|
||||||
</Typography>
|
</Typography>
|
||||||
@@ -65,7 +74,7 @@ export default async function MembershipOverviewCard({
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<MembershipLevelIcon
|
<MembershipLevelIcon
|
||||||
level={MembershipLevelEnum[user.membership.membershipLevel]}
|
level={MembershipLevelEnum[friendsMembership.tier]}
|
||||||
height="44"
|
height="44"
|
||||||
width="268"
|
width="268"
|
||||||
rows={1}
|
rows={1}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { dt } from "@scandic-hotels/common/dt"
|
import { dt } from "@scandic-hotels/common/dt"
|
||||||
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 { 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"
|
||||||
@@ -20,13 +21,17 @@ export default async function LevelProgressCard({
|
|||||||
className,
|
className,
|
||||||
color = "Surface/Brand/Primary 1/OnSurface/Default",
|
color = "Surface/Brand/Primary 1/OnSurface/Default",
|
||||||
}: levelProgressCardProps) {
|
}: levelProgressCardProps) {
|
||||||
if (!user.membership?.membershipLevel) {
|
const friendsMembership = user.loyalty
|
||||||
|
? 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(user.membership)
|
const data = await getLevelProgressData(friendsMembership)
|
||||||
const classNames = levelProgressCardVariants({ className, color })
|
const classNames = levelProgressCardVariants({ className, color })
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -44,7 +49,7 @@ export default async function LevelProgressCard({
|
|||||||
{intl.formatMessage(
|
{intl.formatMessage(
|
||||||
{ defaultMessage: "Valid until {date}" },
|
{ defaultMessage: "Valid until {date}" },
|
||||||
{
|
{
|
||||||
date: dt(user.membership.tierExpirationDate)
|
date: dt(friendsMembership.tierExpires)
|
||||||
.locale(lang)
|
.locale(lang)
|
||||||
.format("D MMM YYYY"),
|
.format("D MMM YYYY"),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 { FriendsMembership } from "@scandic-hotels/trpc/types/user"
|
import type { NativeFriendsMembership } from "@scandic-hotels/trpc/types/user"
|
||||||
|
|
||||||
export async function getLevelProgressData(
|
export async function getLevelProgressData(
|
||||||
membership: NonNullable<FriendsMembership>
|
membership: NonNullable<NativeFriendsMembership>
|
||||||
): 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.membershipLevel],
|
level: MembershipLevelEnum[membership.tier],
|
||||||
})
|
})
|
||||||
|
|
||||||
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.membershipLevel)) {
|
if (isHighestMembership(membership.tier)) {
|
||||||
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.pointsRequiredToNextlevel ?? 0,
|
toNext: membership.pointsToNextTier ?? 0,
|
||||||
toKeepCurrent,
|
toKeepCurrent,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,10 @@ 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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user