Overview
frontend/app/(dashboard)/transfers/page.tsx renders a mockTransfers array literal defined inside the component — it never calls the real /transfers API, and the Approve/Reject <button> elements have no onClick handlers at all, so clicking them does nothing. It also doesn't use the app's shared Button/Table/StatusBadge components, instead using raw inline style={{...}} objects, unlike every other data page in the app.
Tasks
Acceptance Criteria
Dependencies
Pairs with [BE-117] (approve doesn't move the asset) and [BE-118] (dead transfer states) on the backend side.
Notes for Contributors
Comment below to be assigned.
Overview
frontend/app/(dashboard)/transfers/page.tsxrenders amockTransfersarray literal defined inside the component — it never calls the real/transfersAPI, and the Approve/Reject<button>elements have noonClickhandlers at all, so clicking them does nothing. It also doesn't use the app's sharedButton/Table/StatusBadgecomponents, instead using raw inlinestyle={{...}}objects, unlike every other data page in the app.Tasks
lib/api/transfers.ts(see [FE-101]) and wire the page to React Query against the real backend endpoints.approve/reject, with optimistic UI and error handling consistent with other mutations in the app.components/ui/table.tsx,button.tsx, andcomponents/assets/status-badge.tsx(or an equivalent transfer-status badge) for visual and behavioral consistency with the rest of the dashboard.Acceptance Criteria
Dependencies
Pairs with [BE-117] (approve doesn't move the asset) and [BE-118] (dead transfer states) on the backend side.
Notes for Contributors
Comment below to be assigned.