"use client" import { useRef, useState } from "react" import { trpc } from "@/lib/trpc/client" import { RewardIcon } from "@/components/Blocks/DynamicContent/Rewards/RewardIcon" import ScriptedRewardText from "@/components/Blocks/DynamicContent/Rewards/ScriptedRewardText" import Pagination from "@/components/MyPages/Pagination" import ExpirationDate from "@/components/Rewards/ExpirationDate" import Grids from "@/components/TempDesignSystem/Grids" import Title from "@/components/TempDesignSystem/Text/Title" import useLang from "@/hooks/useLang" import { getEarliestExpirationDate } from "@/utils/rewards" import Redeem from "../Redeem" import styles from "./current.module.css" import type { CurrentRewardsClientProps } from "@/types/components/myPages/myPage/accountPage" import type { Reward, RewardWithRedeem, } from "@/server/routers/contentstack/reward/output" export default function ClientCurrentRewards({ rewards: initialData, pageSize, showRedeem, membershipNumber, }: CurrentRewardsClientProps) { const lang = useLang() const containerRef = useRef(null) const [currentPage, setCurrentPage] = useState(1) const { data } = trpc.contentstack.rewards.current.useQuery<{ rewards: (Reward | RewardWithRedeem)[] }>( { lang, }, { initialData: { rewards: initialData }, } ) if (!data) { return null } const rewards = data.rewards const totalPages = Math.ceil(rewards.length / pageSize) const startIndex = (currentPage - 1) * pageSize const endIndex = startIndex + pageSize const currentRewards = rewards.slice(startIndex, endIndex) function handlePageChange(page: number) { requestAnimationFrame(() => { setCurrentPage(page) containerRef.current?.scrollIntoView({ behavior: "smooth", block: "start", inline: "nearest", }) }) } return (
{currentRewards.map((reward, idx) => { const earliestExpirationDate = "coupons" in reward ? getEarliestExpirationDate(reward.coupons) : null return (
{showRedeem && ( )} {reward.label} {earliestExpirationDate ? ( ) : null}
{showRedeem && "redeem_description" in reward && (
)}
) })}
{totalPages > 1 && ( )}
) }