"use client"; import { useEffect, useState } from "react"; import { Tabs, TabsList, TabsTrigger } from "../../../../../shadcnui"; import { InvoiceStatus, StripeInvoiceInterface } from "../../data/stripe-invoice.interface"; import { StripeInvoiceService } from "../../data/stripe-invoice.service"; import { InvoicesList } from "../lists/InvoicesList"; type StatusFilter = InvoiceStatus | "all"; export function InvoicesContainer() { const [invoices, setInvoices] = useState([]); const [loading, setLoading] = useState(true); const [statusFilter, setStatusFilter] = useState("all"); const loadInvoices = async () => { setLoading(true); try { const params = statusFilter !== "all" ? { status: statusFilter } : undefined; const data = await StripeInvoiceService.listInvoices(params); setInvoices(data); } catch (error) { console.error("[InvoicesContainer] Failed to load invoices:", error); setInvoices([]); } finally { setLoading(false); } }; useEffect(() => { loadInvoices(); }, [statusFilter]); const handleFilterChange = (value: string) => { setStatusFilter(value as StatusFilter); }; return (
{/* Status Filter Tabs */} All Paid Open Void Uncollectible {/* Loading State */} {loading &&
Loading invoices...
} {/* Empty State */} {!loading && invoices.length === 0 && (

No invoices yet

Invoices will appear here after your first billing cycle

)} {/* Invoices List */} {!loading && invoices.length > 0 && }
); }