fix(LOY-10): provide fallback icon for current rewards

This commit is contained in:
Chuma McPhoy
2024-12-06 11:22:16 +01:00
parent 5464efb7a8
commit 5933380bd8
2 changed files with 59 additions and 28 deletions

View File

@@ -1,42 +1,68 @@
import { FC } from "react" import { FC } from "react"
import { getIconByIconName } from "@/components/Icons/get-icon-by-icon-name" import { getIconByIconName } from "@/components/Icons/get-icon-by-icon-name"
import { isValidRewardId } from "@/utils/rewards"
import { IconName , IconProps } from "@/types/components/icon" import { IconName, IconProps } from "@/types/components/icon"
import { RewardId } from "@/types/enums/rewards" import { RewardId } from "@/types/enums/rewards"
const rewardToIconMap: Record<RewardId, IconName> = { function getIconForRewardId(rewardId: RewardId): IconName {
// Food & beverage. switch (rewardId) {
[RewardId.TenPercentFood]: IconName.CroissantCoffeeEgg, // Food & beverage
[RewardId.FifteenPercentFood]: IconName.CroissantCoffeeEgg, case RewardId.TenPercentFood:
[RewardId.TwoForOneBreakfast]: IconName.CutleryTwo, case RewardId.FifteenPercentFood:
[RewardId.FreeBreakfast]: IconName.CutleryOne, return IconName.CroissantCoffeeEgg
[RewardId.FreeKidsDrink]: IconName.KidsMocktail, case RewardId.TwoForOneBreakfast:
return IconName.CutleryTwo
case RewardId.FreeBreakfast:
return IconName.CutleryOne
case RewardId.FreeKidsDrink:
return IconName.KidsMocktail
// Monetary (or exchange for points) vouchers all use the same icon. // Monetary vouchers
[RewardId.Bonus50SEK]: IconName.Voucher, case RewardId.Bonus50SEK:
[RewardId.Bonus75SEK]: IconName.Voucher, case RewardId.Bonus75SEK:
[RewardId.Bonus100SEK]: IconName.Voucher, case RewardId.Bonus100SEK:
[RewardId.Bonus150SEK]: IconName.Voucher, case RewardId.Bonus150SEK:
[RewardId.Bonus200SEK]: IconName.Voucher, case RewardId.Bonus200SEK:
return IconName.Voucher
// Hotel perks. // Hotel perks
[RewardId.EarlyCheckin]: IconName.HandKey, case RewardId.EarlyCheckin:
[RewardId.LateCheckout]: IconName.HotelNight, return IconName.HandKey
[RewardId.FreeUpgrade]: IconName.MagicWand, case RewardId.LateCheckout:
[RewardId.RoomGuarantee48H]: IconName.Bed, return IconName.HotelNight
case RewardId.FreeUpgrade:
return IconName.MagicWand
case RewardId.RoomGuarantee48H:
return IconName.Bed
// Earnings. // Earnings
[RewardId.EarnRate25Percent]: IconName.MoneyHand, case RewardId.EarnRate25Percent:
[RewardId.EarnRate50Percent]: IconName.MoneyHand, case RewardId.EarnRate50Percent:
[RewardId.StayBoostForKids]: IconName.Kids, return IconName.MoneyHand
[RewardId.MemberRate]: IconName.Coin, case RewardId.StayBoostForKids:
return IconName.Kids
case RewardId.MemberRate:
return IconName.Coin
// Special // Special
[RewardId.YearlyExclusiveGift]: IconName.GiftOpen, case RewardId.YearlyExclusiveGift:
return IconName.GiftOpen
default: {
const unhandledRewardId: never = rewardId
return IconName.GiftOpen
}
}
} }
export function mapRewardToIcon(rewardId: string): FC<IconProps> | null { export function mapRewardToIcon(rewardId: string): FC<IconProps> | null {
const iconName = rewardToIconMap[rewardId as RewardId] if (!isValidRewardId(rewardId)) {
return getIconByIconName(iconName) || null // TODO: Update once UX has decided on fallback icon.
return getIconByIconName(IconName.GiftOpen)
}
const iconName = getIconForRewardId(rewardId)
return getIconByIconName(iconName)
} }

5
utils/rewards.ts Normal file
View File

@@ -0,0 +1,5 @@
import { RewardId } from "@/types/enums/rewards"
export function isValidRewardId(id: string): id is RewardId {
return Object.values(RewardId).includes(id as RewardId)
}