import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@workspace/ui/components/dialog"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@workspace/ui/components/table"; import { getRedemptionRecordList } from "@workspace/ui/services/admin/redemption"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { formatDate } from "@/utils/common"; interface RedemptionRecordsProps { codeId: number | null; open: boolean; onOpenChange: (open: boolean) => void; } export default function RedemptionRecords({ codeId, open, onOpenChange, }: RedemptionRecordsProps) { const { t } = useTranslation("redemption"); const [loading, setLoading] = useState(false); const [records, setRecords] = useState([]); const [total, setTotal] = useState(0); const [pagination, setPagination] = useState({ page: 1, size: 10 }); const fetchRecords = async () => { if (!codeId) return; setLoading(true); try { const { data } = await getRedemptionRecordList({ ...pagination, code_id: codeId, }); setRecords(data.data?.list || []); setTotal(data.data?.total || 0); } catch (error) { console.error("Failed to fetch redemption records:", error); } finally { setLoading(false); } }; useEffect(() => { if (open && codeId) { fetchRecords(); } }, [open, codeId, pagination]); return ( {t("records", "Redemption Records")}
{loading ? (
{t("loading", "Loading...")}
) : records.length === 0 ? (
{t("noRecords", "No records found")}
) : ( <> {t("id", "ID")} {t("userId", "User ID")} {t("subscribeId", "Subscribe ID")} {t("unitTime", "Unit Time")} {t("quantity", "Quantity")} {t("redeemedAt", "Redeemed At")} {records.map((record) => { const unitTimeMap: Record = { day: t("form.day", "Day"), month: t("form.month", "Month"), quarter: t("form.quarter", "Quarter"), half_year: t("form.halfYear", "Half Year"), year: t("form.year", "Year"), }; return ( {record.id} {record.user_id} {record.subscribe_id} {unitTimeMap[record.unit_time] || record.unit_time} {record.quantity} {record.redeemed_at ? formatDate(record.redeemed_at) : "--"} ); })}
{total > pagination.size && (
{t("total", "Total")}: {total}
)} )}
); }