Files
Chuma Mcphoy (We Ahead) 29f51e655e 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
2025-10-13 06:51:59 +00:00

58 lines
1.6 KiB
TypeScript

import { MembershipLevelEnum } from "@scandic-hotels/common/constants/membershipLevels"
import { serverClient } from "@/lib/trpc/server"
import { isHighestMembership } from "@/utils/user"
import { type LevelProgressData, type ProgressCalculation } from "./types"
import type { FriendsMembership } from "@scandic-hotels/trpc/types/user"
export async function getLevelProgressData(
membership: NonNullable<FriendsMembership>
): Promise<LevelProgressData> {
const caller = await serverClient()
const currentLevel = await caller.contentstack.loyaltyLevels.byLevel({
level: MembershipLevelEnum[membership.membershipLevel],
})
const earned = membership.tierPoints ?? 0
// Check if user has points left to retain their current level.
const toKeepCurrent =
currentLevel?.required_points && earned < currentLevel.required_points
? currentLevel.required_points - earned
: undefined
if (isHighestMembership(membership.membershipLevel)) {
return toKeepCurrent
? {
type: "highest-incomplete",
earned,
toKeepCurrent,
required: currentLevel!.required_points,
}
: { type: "highest-complete", earned }
}
return {
type: "lower-level",
earned,
toNext: membership.pointsRequiredToNextlevel ?? 0,
toKeepCurrent,
}
}
export function calculateProgress(
earned: number,
total: number,
keepThreshold?: number
): ProgressCalculation {
const percentage = (earned / total) * 100
const markerPosition = keepThreshold
? ((earned + keepThreshold) / total) * 100
: undefined
return { percentage, markerPosition, total }
}