import type { ApiReward, RedeemableCoupon, SurpriseReward, } from "../../../types/reward" export function getRedeemableRewards(rewards: ApiReward[]) { return rewards .filter((reward) => { if ("coupon" in reward && reward.coupon.length > 0) { if (reward.coupon.every((coupon) => coupon.state === "redeemed")) { return false } } return true }) .filter((reward) => { if (isSurpriseReward(reward)) { return !reward.coupon.some(({ unwrapped }) => !unwrapped) } return true }) } function isSurpriseReward(reward: ApiReward): reward is SurpriseReward { return reward.rewardType === "Surprise" } export function getUnwrappedSurpriseRewards(rewards: ApiReward[]) { return rewards .filter(isSurpriseReward) .filter((reward) => getReedemableCoupons(reward).length) .filter((reward) => { const unwrappedCoupons = reward.coupon.filter((coupon) => !coupon.unwrapped) || [] return unwrappedCoupons.length }) } export function getReedemableCoupons(reward: ApiReward): RedeemableCoupon[] { if ("coupon" in reward) { return reward.coupon.filter( (coupon): coupon is RedeemableCoupon => coupon.state !== "redeemed" ) } return [] }