diff --git a/frontend/src/components/billing/BillingUsagePanel.tsx b/frontend/src/components/billing/BillingUsagePanel.tsx index 0f25423f..fe807c92 100644 --- a/frontend/src/components/billing/BillingUsagePanel.tsx +++ b/frontend/src/components/billing/BillingUsagePanel.tsx @@ -3,6 +3,7 @@ import { useToast } from '../../components/ui/toast/ToastContainer'; import { getCreditTransactions, getCreditBalance, CreditTransaction as BillingTransaction, CreditBalance } from '../../services/billing.api'; import { Card } from '../../components/ui/card'; import Badge from '../../components/ui/badge/Badge'; +import { CompactPagination } from '../ui/pagination'; // Credit costs per operation (copied from Billing usage page) const CREDIT_COSTS: Record = { @@ -22,6 +23,8 @@ export default function BillingUsagePanel() { const [transactions, setTransactions] = useState([]); const [balance, setBalance] = useState(null); const [loading, setLoading] = useState(true); + const [page, setPage] = useState(1); + const [pageSize, setPageSize] = useState(10); useEffect(() => { loadUsage(); @@ -43,6 +46,9 @@ export default function BillingUsagePanel() { } }; + const totalPages = Math.max(1, Math.ceil(transactions.length / pageSize)); + const paginated = transactions.slice((page - 1) * pageSize, page * pageSize); + if (loading) { return (
@@ -123,7 +129,7 @@ export default function BillingUsagePanel() { - {transactions.map((txn) => ( + {paginated.map((txn) => ( {new Date(txn.created_at).toLocaleString()} @@ -144,6 +150,23 @@ export default function BillingUsagePanel() {
+ {transactions.length > 0 && ( +
+
+ Showing {(page - 1) * pageSize + 1}-{Math.min(page * pageSize, transactions.length)} of {transactions.length} +
+ setPage(p)} + onPageSizeChange={(size) => { + setPageSize(size); + setPage(1); + }} + /> +
+ )} diff --git a/frontend/src/pages/account/TeamManagementPage.tsx b/frontend/src/pages/account/TeamManagementPage.tsx index 622a63de..e171eb03 100644 --- a/frontend/src/pages/account/TeamManagementPage.tsx +++ b/frontend/src/pages/account/TeamManagementPage.tsx @@ -134,9 +134,11 @@ export default function TeamManagementPage() {
@@ -215,9 +217,11 @@ export default function TeamManagementPage() {
diff --git a/frontend/src/pages/account/UsageAnalyticsPage.tsx b/frontend/src/pages/account/UsageAnalyticsPage.tsx index d34d987a..11437565 100644 --- a/frontend/src/pages/account/UsageAnalyticsPage.tsx +++ b/frontend/src/pages/account/UsageAnalyticsPage.tsx @@ -12,6 +12,7 @@ import { Card } from '../../components/ui/card'; import Badge from '../../components/ui/badge/Badge'; import BillingUsagePanel from '../../components/billing/BillingUsagePanel'; import BillingBalancePanel from '../../components/billing/BillingBalancePanel'; +import Button from '../../components/ui/button/Button'; type TabType = 'credits' | 'api' | 'costs'; @@ -92,36 +93,20 @@ export default function UsageAnalyticsPage() { {/* Period Selector */}
- - - + {[7, 30, 90].map((value) => { + const isActive = period === value; + return ( + + ); + })}