Files
web/apps/scandic-web/utils/user.ts
Anton Gunnarsson 393546d35d Merged in feat/sw-1291-show-sas-membership-data (pull request #1503)
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
2025-03-10 10:13:18 +00:00

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]
}