import { RESTAURANT_REWARD_IDS, REWARD_IDS, REWARD_TYPES, } from "@/constants/rewards" import { dt } from "@/lib/dt" import type { Dayjs } from "dayjs" import type { RestaurantRewardId, RewardId, RewardType, } from "@/types/components/myPages/rewards" import type { Coupon, RewardWithRedeem, } from "@/server/routers/contentstack/reward/output" export { getEarliestExpirationDate, getRewardType, isOnSiteTierReward, isRestaurantOnSiteTierReward, isRestaurantReward, isTierType, isValidRewardId, redeemLocationIsOnSite, } function isValidRewardId(id: string): id is RewardId { return Object.values(REWARD_IDS).includes(id) } function isRestaurantReward(rewardId: string): rewardId is RestaurantRewardId { return RESTAURANT_REWARD_IDS.some((id) => id === rewardId) } function redeemLocationIsOnSite( location: RewardWithRedeem["redeemLocation"] ): location is "On-site" { return location === "On-site" } function isTierType(type: RewardWithRedeem["rewardType"]): type is "Tier" { return type === "Tier" } function isOnSiteTierReward(reward: RewardWithRedeem): boolean { return ( redeemLocationIsOnSite(reward.redeemLocation) && isTierType(reward.rewardType) ) } function isRestaurantOnSiteTierReward(reward: RewardWithRedeem): boolean { return isOnSiteTierReward(reward) && isRestaurantReward(reward.reward_id) } function getRewardType(type?: string): RewardType | null { return REWARD_TYPES.find((t) => t === type) ?? null } function getEarliestExpirationDate(coupons: Coupon[]) { return coupons .map(({ expiresAt }) => expiresAt) .filter((expiresAt): expiresAt is string => !!expiresAt) .reduce((earliestDate: Dayjs | null, expiresAt) => { const expiresAtDate = dt(expiresAt) if (!earliestDate) { return expiresAtDate } return earliestDate.isBefore(expiresAtDate) ? earliestDate : expiresAtDate }, null) }