From 509c83868d7ff7711ec52aac3501693b643f5214 Mon Sep 17 00:00:00 2001 From: Christian Andolf Date: Tue, 11 Feb 2025 14:24:22 +0100 Subject: [PATCH] feat(LOY-134): display informative rewards and modal --- .../Rewards/Redeem/Flows/Tier.tsx | 90 ++++++++++--------- .../DynamicContent/Rewards/Redeem/index.tsx | 4 +- i18n/dictionaries/da.json | 1 + i18n/dictionaries/de.json | 1 + i18n/dictionaries/en.json | 1 + i18n/dictionaries/fi.json | 1 + i18n/dictionaries/no.json | 1 + i18n/dictionaries/sv.json | 1 + server/routers/contentstack/reward/output.ts | 37 ++++---- 9 files changed, 78 insertions(+), 59 deletions(-) diff --git a/components/Blocks/DynamicContent/Rewards/Redeem/Flows/Tier.tsx b/components/Blocks/DynamicContent/Rewards/Redeem/Flows/Tier.tsx index d6c23bcc8..ce57d63e6 100644 --- a/components/Blocks/DynamicContent/Rewards/Redeem/Flows/Tier.tsx +++ b/components/Blocks/DynamicContent/Rewards/Redeem/Flows/Tier.tsx @@ -45,52 +45,62 @@ export default function Tier({ {reward.label} - {redeemStep === "initial" && ( - {reward.description} - )} + {reward.redeemLocation !== "Non-redeemable" ? ( + <> + {redeemStep === "initial" && ( + {reward.description} + )} - {redeemStep === "confirmation" && ( + {redeemStep === "confirmation" && ( + {reward.redeem_description} + )} + + {redeemStep === "redeemed" && + isRestaurantOnSiteTierReward(reward) && + membershipNumber && ( + + )} + + ) : ( {reward.redeem_description} )} - - {redeemStep === "redeemed" && - isRestaurantOnSiteTierReward(reward) && - membershipNumber && ( - - )} - {redeemStep === "initial" && ( -
- -
- )} + {reward.redeemLocation !== "Non-redeemable" ? ( + <> + {redeemStep === "initial" && ( +
+ +
+ )} - {redeemStep === "confirmation" && ( -
- - -
- )} + {redeemStep === "confirmation" && ( +
+ + +
+ )} + + ) : null} ) } diff --git a/components/Blocks/DynamicContent/Rewards/Redeem/index.tsx b/components/Blocks/DynamicContent/Rewards/Redeem/index.tsx index f1021fb38..e7d44c753 100644 --- a/components/Blocks/DynamicContent/Rewards/Redeem/index.tsx +++ b/components/Blocks/DynamicContent/Rewards/Redeem/index.tsx @@ -51,7 +51,9 @@ export default function Redeem({ reward, membershipNumber }: RedeemProps) { onOpenChange={(isOpen) => setAnimation(isOpen ? "visible" : "hidden")} > val || []), -}) +const CouponReward = BaseReward.merge( + z.object({ + rewardType: z.enum(["Surprise", "Campaign", "Member-voucher"]), + operaRewardId: z.string().default(""), + coupon: z + .array(CouponData) + .optional() + .transform((val) => val || []), + }) +) /** * Schema for the new /profile/v1/Reward endpoint.