Description
When auditing disbursements, finance teams need to see how much a specific recipient has received across all invoices over any date range, but currently data is siloed per invoice page. This issue adds a recipient payout history view that aggregates all confirmed payouts to a given Stellar address across every invoice on the platform, displays a sortable/filterable table with per-invoice breakdowns, and surfaces cross-invoice lifetime totals per asset.
Technical Context
Create app/dashboard/recipient/[address]/page.tsx as a server component that calls app/api/recipients/[address]/history/route.ts. The API route queries the invoice database for all recipient entries matching the address (owned by or shared with the requesting user), joins with confirmed payment records, and returns an array of RecipientPayoutRecord. Build components/dashboard/RecipientHistoryTable.tsx with @tanstack/react-table v8 for column sorting, per-column filtering, and pagination. Lifetime total cards per asset (XLM, USDC, custom) sit above the table and update reactively when filters change. The address should resolve to a federation name if available (reuse hooks/useAddressLabel.ts from issue 9). Export the filtered table data as CSV using the papaparse library.
Acceptance Criteria
Description
When auditing disbursements, finance teams need to see how much a specific recipient has received across all invoices over any date range, but currently data is siloed per invoice page. This issue adds a recipient payout history view that aggregates all confirmed payouts to a given Stellar address across every invoice on the platform, displays a sortable/filterable table with per-invoice breakdowns, and surfaces cross-invoice lifetime totals per asset.
Technical Context
Create
app/dashboard/recipient/[address]/page.tsxas a server component that callsapp/api/recipients/[address]/history/route.ts. The API route queries the invoice database for all recipient entries matching the address (owned by or shared with the requesting user), joins with confirmed payment records, and returns an array ofRecipientPayoutRecord. Buildcomponents/dashboard/RecipientHistoryTable.tsxwith@tanstack/react-tablev8 for column sorting, per-column filtering, and pagination. Lifetime total cards per asset (XLM, USDC, custom) sit above the table and update reactively when filters change. The address should resolve to a federation name if available (reusehooks/useAddressLabel.tsfrom issue 9). Export the filtered table data as CSV using thepapaparselibrary.Acceptance Criteria