Show SAS membership data in Linked Accounts * Rip out old styling * Desktop version of new linked accounts design * Use new design system tokens * Refactor SASLinkedAccount to handle all states * Improve small screen styling * Add intl etc * Skeletons * Tiny fixes * Add i18n keys to all languages Approved-by: Linus Flood
79 lines
2.1 KiB
TypeScript
79 lines
2.1 KiB
TypeScript
import {
|
|
type MembershipLevel,
|
|
MembershipLevelEnum,
|
|
} from "@/constants/membershipLevels"
|
|
|
|
import type { z } from "zod"
|
|
|
|
import type { Membership, Memberships, User } from "@/types/user"
|
|
import type { getMembershipCardsSchema } from "@/server/routers/user/output"
|
|
|
|
export enum scandicMemberships {
|
|
guestpr = "guestpr",
|
|
scandicfriends = "scandicfriend's",
|
|
sas_eb = "sas_eb",
|
|
scandic_native_tiers = "scandic_native_tiers",
|
|
}
|
|
|
|
export function getFriendsMembership(memberships: Memberships) {
|
|
return memberships?.find(
|
|
(membership) =>
|
|
membership.membershipType.toLowerCase() === scandicMemberships.guestpr
|
|
) as FriendsMembership | undefined
|
|
}
|
|
|
|
export type FriendsMembership = Omit<
|
|
NonNullable<Membership>,
|
|
"membershipLevel" | "nextLevel"
|
|
> & {
|
|
membershipLevel: MembershipLevel
|
|
nextLevel: MembershipLevel
|
|
}
|
|
|
|
export function getEurobonusMembership(memberships: Memberships) {
|
|
return memberships?.find(
|
|
(membership) =>
|
|
membership.membershipType.toLowerCase() === scandicMemberships.sas_eb
|
|
)
|
|
}
|
|
|
|
export function getMembershipCards(
|
|
memberships: z.infer<typeof getMembershipCardsSchema>
|
|
) {
|
|
return memberships.filter(function (membership) {
|
|
return (
|
|
membership.membershipType.toLowerCase() !== scandicMemberships.guestpr &&
|
|
membership.membershipType.toLowerCase() !==
|
|
scandicMemberships.scandicfriends
|
|
)
|
|
})
|
|
}
|
|
|
|
export function isHighestMembership(
|
|
membershipLevel: MembershipLevel | undefined
|
|
) {
|
|
return membershipLevel == MembershipLevelEnum.L7
|
|
}
|
|
|
|
export function getInitials(
|
|
firstName: User["firstName"],
|
|
lastName: User["lastName"]
|
|
) {
|
|
if (!firstName || !lastName) return null
|
|
const firstInitial = firstName.charAt(0).toUpperCase()
|
|
const lastInitial = lastName.charAt(0).toUpperCase()
|
|
return `${firstInitial}${lastInitial}`
|
|
}
|
|
|
|
export function getSteppedUpLevel(
|
|
currentValue: MembershipLevel,
|
|
stepsUp: number
|
|
): MembershipLevel {
|
|
const values = Object.values(MembershipLevelEnum)
|
|
const currentIndex = values.indexOf(currentValue as MembershipLevelEnum)
|
|
if (currentIndex === -1 || currentIndex === values.length - 1) {
|
|
return currentValue
|
|
}
|
|
return values[currentIndex + stepsUp]
|
|
}
|