import { useState, useEffect } from 'react'; import PageMeta from '../../components/common/PageMeta'; import { useToast } from '../../components/ui/toast/ToastContainer'; import { fetchCreditTransactions, CreditTransaction } from '../../services/api'; import { Card } from '../../components/ui/card'; import Badge from '../../components/ui/badge/Badge'; export default function Transactions() { const toast = useToast(); const [transactions, setTransactions] = useState([]); const [loading, setLoading] = useState(true); const [currentPage, setCurrentPage] = useState(1); const [totalPages, setTotalPages] = useState(1); useEffect(() => { loadTransactions(); }, [currentPage]); const loadTransactions = async () => { try { setLoading(true); const response = await fetchCreditTransactions({ page: currentPage }); setTransactions(response.results || []); setTotalPages(Math.ceil((response.count || 0) / 50)); } catch (error: any) { toast.error(`Failed to load transactions: ${error.message}`); } finally { setLoading(false); } }; const getTransactionTypeColor = (type: string) => { switch (type) { case 'purchase': case 'subscription': return 'success'; case 'deduction': return 'error'; default: return 'primary'; } }; return (

Credit Transactions

View all credit transactions and history

{loading ? (
Loading...
) : (
{transactions.map((transaction) => ( ))}
Date Type Amount Balance After Description
{new Date(transaction.created_at).toLocaleDateString()} {transaction.transaction_type_display} = 0 ? 'text-green-600 dark:text-green-400' : 'text-red-600 dark:text-red-400' }`}> {transaction.amount >= 0 ? '+' : ''}{transaction.amount.toLocaleString()} {transaction.balance_after.toLocaleString()} {transaction.description}
)}
); }