The CustomerInvoiceList component is designed to render a customer's invoice history. It fetches and displays invoice data from the payment service, offering two distinct layouts: a simple, date-grouped list with infinite scroll, and a detailed, paginated table. This component must be used within a PaymentProvider to function correctly.
Props
| Prop | Type | Description | Default |
|---|---|---|---|
customer_id | string | The ID of the customer whose invoices are to be displayed. | '' |
subscription_id | string | Filter invoices by a specific subscription ID. | '' |
currency_id | string | Filter invoices by a specific currency ID. | '' |
include_staking | boolean | If true, includes staking-related invoices in the list. | false |
include_return_staking | boolean | If true, includes return staking invoices. | false |
include_recovered_from | boolean | If true, includes invoices that were recovered from a previous balance. | false |
status | string | A comma-separated string of invoice statuses to display (e.g., 'open,paid,uncollectible'). | 'open,paid,uncollectible' |
pageSize | number | The number of invoices to fetch per page. | 10 |
target | string | The target attribute for invoice links (e.g., '_self', '_blank'). | '_self' |
action | string | Defines a call-to-action for certain invoices. Set to 'pay' to show a pay button for open invoices. | '' |
type | 'list' | 'table' | The display mode for the invoice list. | 'list' |
onTableDataChange | Function | A callback function that is triggered when the invoice data changes. | () => {} |
relatedSubscription | boolean | In table mode, if true, shows a column with a link to the related subscription. | false |
Basic Usage (List View)
The default view (type="list") renders a simple list of invoices, grouped by date, with an infinite scroll mechanism to load more items.
CustomerInvoiceListPage.tsx
import { PaymentProvider, CustomerInvoiceList } from '@blocklet/payment-react';
function InvoiceHistoryPage() {
// Assuming customerId is available, e.g., from session or props
const customerId = 'cus_xxxxxxxxxxxxxx';
return (
<PaymentProvider>
<CustomerInvoiceList customer_id={customerId} />
</PaymentProvider>
);
}Table View
For a more detailed and structured presentation, you can set type="table". This mode displays invoices in a paginated table with sortable columns.
CustomerInvoiceTablePage.tsx
import { PaymentProvider, CustomerInvoiceList } from '@blocklet/payment-react';
function InvoiceHistoryTable() {
const customerId = 'cus_xxxxxxxxxxxxxx';
return (
<PaymentProvider>
<CustomerInvoiceList
customer_id={customerId}
type="table"
relatedSubscription={true} // Show a column for the related subscription
pageSize={5}
/>
</PaymentProvider>
);
}In this example, the relatedSubscription prop is enabled to add a column that links directly to the subscription associated with each invoice, which is useful for subscription-based services.
Filtering Invoices
You can use various props to filter the invoices displayed. For example, to show only paid invoices related to staking:
FilteredInvoiceListPage.tsx
import { PaymentProvider, CustomerInvoiceList } from '@blocklet/payment-react';
function FilteredInvoiceList() {
const customerId = 'cus_xxxxxxxxxxxxxx';
return (
<PaymentProvider>
<CustomerInvoiceList
customer_id={customerId}
type="table"
status="paid" // Only show paid invoices
include_staking={true} // Also include staking transactions
/>
</PaymentProvider>
);
}Enabling Payments for Open Invoices
By setting the action prop to 'pay', you can add a "Pay" button to any invoices with open or uncollectible status. Clicking this button will initiate the payment flow using the connect instance from PaymentProvider.
PayableInvoiceListPage.tsx
import { PaymentProvider, CustomerInvoiceList } from '@blocklet/payment-react';
function PayableInvoiceList() {
const customerId = 'cus_xxxxxxxxxxxxxx';
return (
<PaymentProvider>
<CustomerInvoiceList
customer_id={customerId}
status="open,uncollectible" // Show only invoices that need payment
action="pay" // Add a "Pay" button
/>
</PaymentProvider>
);
}