Rebuilds the deposit flow's "Share your deposit address" screen to the new mockup, and removes the dead "Send from an Exchange" path on the way in.
All changes are in fe/. Nothing under be/ is touched.
What changed
1. Removed the "Send from an Exchange" deposit path (d956337)
The card was inert — its provider (daimo) was removed in 97b687e8, leaving a disabled card with a "Coming soon" badge. Dropped the path entirely, plus the enabled flag, disabled prop and badge styling it orphaned. The Fiat card's own "Coming soon" badge in add-funds-form.tsx is a separate mechanism and stays.
2. Rebuilt /deposit-detail to the mockup (5067fdf, 015cbb7, 201e655, 4a269ea, f08119d)
| Section | Before | After |
|---|---|---|
| Header | "Deposit {TOKEN}", hand-rolled | "Share deposit address", shared Header
|
| Token | Tap-to-cycle chip | Labelled dropdown → searchable sheet |
| Network | Tap-to-cycle chip | Labelled dropdown → searchable sheet |
| QR area | Card + Network/Min-Deposit row | Card: QR, {TOKEN} deposit address, address + copy |
| Below | Save QR / Share QR buttons | Reminder box, dismissible "more networks" banner, OK button |
Selection order is inverted. The screen used to auto-select the first network and derive the token list from it. It now picks the token first and filters networks by it — matching the mockup (token pre-filled, network empty) and the existing withdraw-v2 screen.
Product decisions baked in
-
Built light, not dark. The mockup is drawn dark with a gold accent, but the app is light. Structure, copy and layout follow the mockup; colours follow the app's existing design language, with
withdraw-v2.tsxas the template. - No per-chain logos. Network rows show name + check mark only — the repo has no chain logo assets.
- Save QR / Share QR and "Minimum Deposit" are intentionally removed, replaced by the OK button.
Preserved deliberately
The stale-response guard in deposit-detail-form.tsx (latestRequestRef + both isStale() checks) is byte-identical through all five commits. It fixes the bug from 85184700 where switching network mid-flight could display another chain's address. Its two covering tests were ported to the inverted token/network roles without being weakened — verified by deleting each guard and confirming the matching test goes red.
Failure states added
Review surfaced two states where the user could get stuck with no message and no way forward. Both now show a message and a working retry:
- Asset catalog empty or failing → "Could not load the tokens available for deposit."
- Blockchain catalog failing while assets succeed (every token yields zero networks) → "Could not load the networks available for deposit."
The address card and OK button are also gated on a non-empty address, so a placeholder QR can never render under the "{TOKEN} deposit address" caption.
Verification
-
pnpm test— 51 tests / 8 suites pass -
pnpm type-check— clean -
pnpm lint— 0 errors (7 pre-existing warnings, none in touched files)
Follow-ups, deliberately not in this MR
-
expo-media-library,expo-sharingandreact-native-view-shotnow have zero references infe/src— they were only used by the deleted Save/Share handlers. Removing them frompackage.jsonis a separate change. - The QR encodes
MoanaPay://payment?qrData=<address>rather than the bare address. An external wallet scanning it gets an unparseable deep link. Pre-existing behaviour, preserved here — needs a product call. - The token picker lists the union of symbols across every chain, so native and testnet symbols (
ETH,SOL, …) appear. Worth confirming that is intended. - No unit tests yet for the two new bottom sheets (search, debounce, empty state).