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