fix(MUSD-651): polish Cash & mUSD UI per latest designs cp-7.74.0#28921
Conversation
- Lifetime bonus: white $0.00 until first claim, then green +$X - Promote "Get mUSD" asset-list CTA to primary variant - Drop "Claim bonus" link from home Cash row and mUSD token rows; rows now always show the green "3% bonus" label - Add top padding above "Convert your stablecoins" title
|
CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes. |
| if (hasClaimableBonus) { | ||
| const isMusdAsset = !!asset && isMusdToken(asset.address); | ||
|
|
||
| if (hasClaimableBonus && !isMusdAsset) { |
There was a problem hiding this comment.
Do we still need this block if the secondary balance isn't meant to display the "claim bonus" text button anymore?
There was a problem hiding this comment.
+1 on this - it seems like there is still a decent amount of code related to making claims
There was a problem hiding this comment.
Good catch — removed the entire Claim bonus branch in 68fb5c1. mUSD rows never used it (guarded by !isMusdAsset), and the other Merkl-eligible addresses are internal test tokens, so the branch was effectively unreachable. The hook, handleClaimBonus callback, Spinner fallback, and isVisible prop chain are all gone.
|
|
||
| const secondaryBalanceDisplay = useMemo(() => { | ||
| if (hasClaimableBonus) { | ||
| const isMusdAsset = !!asset && isMusdToken(asset.address); |
There was a problem hiding this comment.
Do we still need the scrollToMerklRewards param above? I'm not sure if it's used anymore.
There was a problem hiding this comment.
Removed in 68fb5c1 — confirmed the only caller was onItemPress passing it through to navigation, and no reader on the Asset screen side consumed it. Dropped the param from onItemPress and the scrollToMerklRewards field from Asset.types.ts.
| asset && | ||
| isMusdToken(asset.address) | ||
| ) { | ||
| // mUSD rows always show the green "3% bonus" label (claim affordance |
There was a problem hiding this comment.
Leaving comment here because I can't comment on unchanged lines.
If the user can't claim via this component anymore we should remove any claiming and merkl dead code from this file.
Context: Merkl is the protocol we use to handle our mUSD bonuses right now. If you see merkl in the code it's related to the bonus claim. You may already know this but sharing in case 😄
There was a problem hiding this comment.
Done in 68fb5c1 — the useMerklBonusClaim hook, the handleClaimBonus callback (and its MUSD_CLAIM_BONUS_BUTTON_CLICKED tracking), the Spinner fallback, hasClaimableBonus, and the related tests are all gone from this file. The hook itself stays (still used by AssetOverviewClaimBonus on the detail page).
Per reviewer feedback on #28921 — the Claim bonus CTA has moved to the mUSD asset detail page, so the token-list row no longer needs Merkl machinery. Removes useMerklBonusClaim, handleClaimBonus, hasClaimableBonus, the Spinner fallback, the isVisible prop chain (only consumer was the hook), scrollToMerklRewards route param (no active navigator set it), and the now-obsolete tests.
Update MUSD_CLAIM_BONUS_BUTTON_CLICKED button_text from "Claim bonus" to "Claim 3% bonus" in both TokenListItem and MusdAggregatedRow, matching the user-visible text.
…ListItem Remove all Merkl claim infrastructure from TokenListItem and TokenList (useMerklBonusClaim, handleClaimBonus, Spinner, isVisible viewport tracking). Token rows now show static "3% bonus" only. The claim CTA lives exclusively in MusdAggregatedRow (home screen) and now references the Linea mUSD asset since claims execute on Linea.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit db45335. Configure here.
🔍 Smart E2E Test Selection
click to see 🤖 AI reasoning detailsE2E Test Selection:
Tag Selection Rationale:
The changes are focused on Earn/mUSD UI refactoring and token list simplification. No core controllers or Engine changes are involved, keeping risk at medium level. Performance Test Selection: |
|
|
✅ E2E Fixture Validation — Schema is up to date |




Description
Implements the four remaining MUSD-651 polish items on the Cash full view, mUSD asset detail page, and home Cash section. Audit confirmed the other ticket items (tooltip icon color, stablecoin tag checkmarks/dark-mode fill, 3% bonus tag on home) already shipped in PRs #28479, #28656, and #28718.
Lifetime bonus formatting —
AssetOverviewClaimBonusnow renders$0.00in default text color until the user has actually claimed a bonus, then switches to+$XinSuccessDefaultgreen. Previously always rendered+$0.00in green.Get mUSD CTA —
MusdConversionAssetListCtabutton promoted fromSecondarytoPrimaryto match the white-on-dark Figma spec; redundant inner<Text>color override dropped so the Button can drive its own text color from the variant.Drop "Claim bonus" link from token rows —
MusdAggregatedRow(home Cash section) andTokenListItem(mUSD per-network rows) no longer render the blue "Claim bonus" affordance when a bonus is claimable. They fall through to the green "3% bonus" label instead. The claim CTA still lives on the mUSD asset detail page (AssetOverviewClaimBonus), which is now the canonical claim entry point.Padding above "Convert your stablecoins" — bumped top padding (
pt-3) insideMoneyConvertStablecoinsso the divider isn't flush with the title.MusdAggregatedRowalso dropped its now-unuseduseMerklBonusClaim,useNetworkName, and analytics dependencies — the removed click handler was the only reason the hook was called.Note: claim bonus tag shape is addressed separately in this PR.
Changelog
CHANGELOG entry: Polished Cash and mUSD bonus UI: lifetime bonus shows zero state in white, "Get mUSD" CTA is now primary, blue "Claim bonus" link removed from token rows.
Related issues
Fixes: MUSD-651
Manual testing steps
Screenshots/Recordings
Pre-merge author checklist
Performance checks (if applicable)
Pre-merge reviewer checklist
Note
Medium Risk
UI/UX behavior changes around when/where users can claim mUSD bonuses (removing claim affordances from token rows) plus token list rendering tweaks could affect discoverability and row layout, but no core auth or funds-transfer logic is modified.
Overview
Polishes mUSD bonus presentation to match updated designs:
AssetOverviewClaimBonusnow shows lifetime bonus as$0.00in default text until a first claim, switching to green+$Xonly when non-zero, and tests are updated accordingly.Updates Cash and token list rows to stop showing the previous inline claim bonus affordance:
TokenListItemremovesuseMerklBonusClaim/spinner/claim handling entirely and, when eligible, renders a dedicated mUSD “3% bonus” row layout (hiding the price rail), whileMusdAggregatedRowstandardizes the label to “Claim 3% bonus” when claimable and uses the design-system spinner; analytics properties are adjusted to match the new button text.Small UI tweaks: promotes the “Get mUSD” asset-list CTA button to
Primary(letting the Button control text styling), adds top padding inMoneyConvertStablecoins, and simplifiesTokenListby removing viewability state/props and dropping thescrollToMerklRewardsnavigation param type.Reviewed by Cursor Bugbot for commit c6155a3. Bugbot is set up for automated code reviews on this repo. Configure here.