Merged in feat/LOY-354-L7-Progress-Card (pull request #2786)
Feat/LOY-354 L7 Progress Card * feat(LOY-354): Add Trophy icon * fix(LOY-354): include new tierPoints value * feat(LOY-354): L7 Progress Level Card support * refactor(LOY-354): Refactoring of component structure * fix(LOY-354): Remove intl prop drilling * fix(LOY-354): cleanup progress section code Approved-by: Erik Tiekstra
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
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 }
|
||||
}
|
||||
Reference in New Issue
Block a user