"use client" import { motion } from "framer-motion" import { useState } from "react" import { Dialog, DialogTrigger, Modal, ModalOverlay, } from "react-aria-components" import { useIntl } from "react-intl" import { CloseLargeIcon } from "@/components/Icons" import Button from "@/components/TempDesignSystem/Button" import Campaign from "./Flows/Campaign" import Tier from "./Flows/Tier" import { RedeemContext } from "./useRedeemFlow" import styles from "./redeem.module.css" import type { RedeemModalState, RedeemProps, RedeemStep, } from "@/types/components/myPages/myPage/accountPage" import type { RewardWithRedeem } from "@/server/routers/contentstack/reward/output" const MotionOverlay = motion(ModalOverlay) const MotionModal = motion(Modal) export default function Redeem({ reward, membershipNumber }: RedeemProps) { const [animation, setAnimation] = useState("unmounted") const intl = useIntl() const [redeemStep, setRedeemStep] = useState("initial") function modalStateHandler(newAnimationState: RedeemModalState) { setAnimation((currentAnimationState) => newAnimationState === "hidden" && currentAnimationState === "hidden" ? "unmounted" : currentAnimationState ) if (newAnimationState === "unmounted") { setRedeemStep("initial") } } return ( setAnimation(isOpen ? "visible" : "hidden")} > {({ close }) => ( <>
{getRedeemFlow(reward, membershipNumber || "")} )}
) } const variants = { fade: { hidden: { opacity: 0, transition: { duration: 0.4, ease: "easeInOut" }, }, visible: { opacity: 1, transition: { duration: 0.4, ease: "easeInOut" }, }, }, slideInOut: { hidden: { opacity: 0, y: 32, transition: { duration: 0.4, ease: "easeInOut" }, }, visible: { opacity: 1, y: 0, transition: { duration: 0.4, ease: "easeInOut" }, }, }, } function getRedeemFlow(reward: RewardWithRedeem, membershipNumber: string) { switch (reward.rewardType) { case "Campaign": return case "Surprise": case "Tier": return default: console.warn("Unsupported reward type for redeem:", reward.rewardType) return null } }