Withdrawals List + Detail
The customer's own withdrawal history.
What Customers See
For comparison, the customer's request-new-withdrawal flow lives at /wallet-central/withdraw/:

List view (/wallet-central/withdrawals/)
┌─────────────────────────────────────────────────────┐
│ H1: Withdrawal requests │
│ Sub: All your past + pending withdrawals │
├─────────────────────────────────────────────────────┤
│ Filter chips: All / Pending / Approved / Paid / │
│ Rejected / Failed │
├─────────────────────────────────────────────────────┤
│ Row method-icon ₹500 → ₹475 bank │
│ submitted 2026-04-22 │
│ [pending pill] │
├─────────────────────────────────────────────────────┤
│ Row method-icon ₹2000 → ₹1950 paypal │
│ submitted 2026-04-19 │
│ [paid pill] │
├─────────────────────────────────────────────────────┤
│ Pagination Prev / Next │
└─────────────────────────────────────────────────────┘
Each row shows: method icon → gross → net → method label → submitted date → status pill.
Click any row → opens the detail page.
Detail view (/wallet-central/withdrawals/view/{id}/)
┌─────────────────────────────────────────────────────┐
│ Breadcrumb: Withdrawals ›› #123 │
│ H1: Withdrawal #123 │
│ [paid pill] │
├─────────────────────────────────────────────────────┤
│ Method Bank transfer │
│ Gross ₹2000.00 │
│ Fee (2.5%) ₹50.00 │
│ Net paid ₹1950.00 │
│ Submitted 2026-04-19 14:23 │
│ Approved 2026-04-19 18:01 │
│ Paid 2026-04-20 09:14 │
├─────────────────────────────────────────────────────┤
│ Method details │
│ Account: Acme Co · 1234·5678 │
│ IFSC: HDFC0000123 │
├─────────────────────────────────────────────────────┤
│ Notes │
│ Admin: "Funds released, please check email." │
└─────────────────────────────────────────────────────┘
Sensitive details (bank account, PayPal email) are partially masked.
Status Pills
| Status | Color | Meaning |
|---|---|---|
pending | amber | awaiting admin |
approved | blue | admin OK, payout queued or in hold |
paid | green | payout API succeeded or admin marked paid |
rejected | red | admin declined; balance refunded |
failed | red striped | payout API errored, admin can retry |
Filter Chips
Top of list. Each chip shows count: Pending (1) Approved (2) Paid (8).
Click any chip → URL updates with the filter, list refilters server-side.
Self-Cancel
If status = pending, a Cancel request button appears on the detail page. Click → status flips to rejected, wallet refunded, email sent.
Disabled once admin approves — pre-approval only.
Re-Submit
If status = rejected or failed, a Submit again button → pre-fills the Withdraw form with the same amount + method.
Pagination
Default 10 rows per page. Prev / Next at the bottom.
Empty State
"No withdrawal requests yet. [ Withdraw now ]"
CTA jumps to the Withdraw form.
Authorization
Detail view 403s if the row doesn't belong to the requesting customer. Safe to share / link — others get an access-denied page.
Common Scenarios
"Where's my money?"
Detail view shows the timeline: submitted → approved → paid. If status paid, share the reference ID with the customer for their bank to trace.
Customer wants to cancel a request
Pre-approval — Cancel button on detail. After approval, customer must contact support.
Bulk re-submit failed requests
No bulk action — each row's Submit again button restarts the flow individually.
When Something Goes Wrong
| Problem | Fix |
|---|---|
| Detail page shows list | URL pattern needs /withdrawals/view/{id}/ exactly |
| 403 on own row | Ensure logged in as the row owner |
| Cancel button missing | Cancel option disabled in admin OR row already approved |
| Status pill colour wrong | Custom CSS overriding pill styles |
For developers — hooks
Hooks
| Hook | Type | When |
|---|---|---|
wkwp_central_withdrawals_list_query | filter | mutate the list query |
wkwp_central_withdrawals_list_columns | filter | mutate column layout |
wkwp_central_withdrawal_detail_payload | filter | mutate detail-view data |
wkwp_central_withdrawal_cancelled | action | self-cancel happened |
wkwp_central_withdrawal_detail_mask | filter | per-field masking override |
