feat(wallet): implement Maya sell convert and order preview flow#772
Conversation
- Export CSV - Zenledger Changed the navigation bar for sheet "Import private key"
This reverts commit 527ebef.
…to feat/update-csv-export-and-zenledger
Update 21 language files and Japanese App Store metadata from Transifex. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
chore: pull latest translations from Transifex (50%+ complete)
…dger feat: update csv export and zenledger
…gation - Migrate all menu items to use the new MenuItem component - Update styles for MenuItemsList - Replace all menu item icons with updated assets - Change "Buy & Sell Dash" and "Explore" from bottom sheet to full page
- MayaTransactionSuccessView: success state with icon, title, message - MayaTransactionFailureView: failure state with retry, cancel, and support actions - MayaFeeInfoSheet: bottom-sheet component explaining the Maya swap fee with a Learn more link and Got it dismiss button - All three views registered in both dashwallet and dashpay Xcode targets
…version-order-preview
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
@coderabbitai review |
✅ Action performedReview finished.
|
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
DashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-back.imageset/Contents.json (1)
4-47:⚠️ Potential issue | 🟠 Major | ⚡ Quick winAdd template rendering metadata and resolve empty dark-appearance slots for
navigationbar-back.
navigationbar-backis consumed as a generic nav control icon, but this manifest has notemplate-rendering-intent, and it also defines dark appearance slots without filenames (Line 9-17, Line 24-32, Line 39-47). This can cause inconsistent tinting versusnavigationbar-close/navigationbar-plus, and the dark variants currently don’t map to actual assets.Suggested manifest cleanup
{ "images" : [ { "filename" : "navigationbar-back@1x.png", "idiom" : "universal", "scale" : "1x" }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "scale" : "1x" - }, { "filename" : "navigationbar-back@2x.png", "idiom" : "universal", "scale" : "2x" }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "scale" : "2x" - }, { "filename" : "navigationbar-back@3x.png", "idiom" : "universal", "scale" : "3x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 + }, + "properties" : { + "localizable" : true, + "template-rendering-intent" : "template" } }Based on learnings: for XCAssets icons, generic/system UI icons should set
template-rendering-intenttotemplateso they inherit system tint correctly.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/Resources/AppAssets.xcassets/Navigation` bar/navigationbar-back.imageset/Contents.json around lines 4 - 47, The Contents.json for the navigationbar-back asset is missing a "template-rendering-intent" set to "template" and includes dark-appearance entries without filenames; update the navigationbar-back image set to add "template-rendering-intent": "template" at the asset level and populate each dark appearance slot (the entries currently defining "appearance": "luminosity" with "value": "dark") with the corresponding dark image filenames (e.g., navigationbar-back@1x.png dark variant, navigationbar-back@2x.png dark variant, navigationbar-back@3x.png dark variant) so the dark slots reference actual files and the asset renders as a template-tinted system icon.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@DashWallet/Resources/AppAssets.xcassets/Navigation`
bar/navigationbar-back.imageset/Contents.json:
- Around line 4-47: The Contents.json for the navigationbar-back asset is
missing a "template-rendering-intent" set to "template" and includes
dark-appearance entries without filenames; update the navigationbar-back image
set to add "template-rendering-intent": "template" at the asset level and
populate each dark appearance slot (the entries currently defining "appearance":
"luminosity" with "value": "dark") with the corresponding dark image filenames
(e.g., navigationbar-back@1x.png dark variant, navigationbar-back@2x.png dark
variant, navigationbar-back@3x.png dark variant) so the dark slots reference
actual files and the asset renders as a template-tinted system icon.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: da86ce9b-9393-4bb9-8e1d-f383d081c7b9
⛔ Files ignored due to path filters (29)
DashWallet/Resources/AppAssets.xcassets/Menu/menu-coinbase.imageset/menu-coinbase@1x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Menu/menu-coinbase.imageset/menu-coinbase@2x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Menu/menu-coinbase.imageset/menu-coinbase@3x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Menu/menu-import-private-key.imageset/import-private-key@1x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Menu/menu-import-private-key.imageset/import-private-key@2x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Menu/menu-import-private-key.imageset/import-private-key@3x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Menu/menu-maya.imageset/menu-maya@1x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Menu/menu-maya.imageset/menu-maya@2x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Menu/menu-maya.imageset/menu-maya@3x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Menu/menu-topper.imageset/menu-topper@1x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Menu/menu-topper.imageset/menu-topper@2x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Menu/menu-topper.imageset/menu-topper@3x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Menu/menu-uphold.imageset/menu-uphold@1x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Menu/menu-uphold.imageset/menu-uphold@2x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Menu/menu-uphold.imageset/menu-uphold@3x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-back.imageset/navigationbar-back@1x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-back.imageset/navigationbar-back@2x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-back.imageset/navigationbar-back@3x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-close.imageset/navigationbar-close@1x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-close.imageset/navigationbar-close@2x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-close.imageset/navigationbar-close@3x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-info.imageset/controls-info@x1.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-info.imageset/controls-info@x2.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-info.imageset/controls-info@x3.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-plus.imageset/navigationbar-plus@1x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-plus.imageset/navigationbar-plus@2x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-plus.imageset/navigationbar-plus@3x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Other/enter-amount-dash.imageset/enter-amount-dash@1x.pngis excluded by!**/*.pngDashWallet/Resources/AppAssets.xcassets/Other/enter-amount-dash.imageset/enter-amount-dash@2x.pngis excluded by!**/*.png
📒 Files selected for processing (12)
DashWallet.xcodeproj/project.pbxprojDashWallet/Resources/AppAssets.xcassets/Illustration/xmark.imageset/Contents.jsonDashWallet/Resources/AppAssets.xcassets/Menu/menu-coinbase.imageset/Contents.jsonDashWallet/Resources/AppAssets.xcassets/Menu/menu-import-private-key.imageset/Contents.jsonDashWallet/Resources/AppAssets.xcassets/Menu/menu-maya.imageset/Contents.jsonDashWallet/Resources/AppAssets.xcassets/Menu/menu-topper.imageset/Contents.jsonDashWallet/Resources/AppAssets.xcassets/Menu/menu-uphold.imageset/Contents.jsonDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-back.imageset/Contents.jsonDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-close.imageset/Contents.jsonDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-info.imageset/Contents.jsonDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-plus.imageset/Contents.jsonDashWallet/Resources/AppAssets.xcassets/Other/enter-amount-dash.imageset/Contents.json
💤 Files with no reviewable changes (1)
- DashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-info.imageset/Contents.json
✅ Files skipped from review due to trivial changes (5)
- DashWallet/Resources/AppAssets.xcassets/Menu/menu-topper.imageset/Contents.json
- DashWallet/Resources/AppAssets.xcassets/Other/enter-amount-dash.imageset/Contents.json
- DashWallet/Resources/AppAssets.xcassets/Menu/menu-import-private-key.imageset/Contents.json
- DashWallet/Resources/AppAssets.xcassets/Menu/menu-uphold.imageset/Contents.json
- DashWallet/Resources/AppAssets.xcassets/Menu/menu-coinbase.imageset/Contents.json
|
@coderabbitai review |
✅ Action performedReview finished.
|
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@DashWallet/Resources/AppAssets.xcassets/Navigation`
bar/navigationbar-close.imageset/Contents.json:
- Around line 23-25: The navigation bar close icon's Contents.json currently
only sets "localizable" which removes template rendering; update the
navigationbar-close imageset Contents.json "properties" to include
"template-rendering-intent": "template" alongside "localizable" (i.e., add the
template-rendering-intent property in the Contents.json for the
navigationbar-close imageset) so the asset uses template rendering and respects
nav tint color.
In `@DashWallet/Resources/AppAssets.xcassets/Navigation`
bar/navigationbar-plus.imageset/Contents.json:
- Around line 23-25: The navigationbar-plus image set lost its template
rendering declaration so the plus icon won't inherit navigation tint; update the
Contents.json for the navigationbar-plus.imageset (the "properties" object) to
include "template-rendering-intent": "template" alongside "localizable" so the
asset is rendered as a template and remains tintable in SwiftUI/UIKit.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: e4f47567-1d03-4608-96c4-771bd9f53635
📒 Files selected for processing (3)
DashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-back.imageset/Contents.jsonDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-close.imageset/Contents.jsonDashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-plus.imageset/Contents.json
💤 Files with no reviewable changes (1)
- DashWallet/Resources/AppAssets.xcassets/Navigation bar/navigationbar-back.imageset/Contents.json
| "properties" : { | ||
| "localizable" : true, | ||
| "template-rendering-intent" : "template" | ||
| "localizable" : true | ||
| } |
There was a problem hiding this comment.
Restore template rendering intent for nav control icon.
At Line 24, keeping only "localizable" drops template behavior; this can make navigationbar-close ignore nav tint and render with baked colors.
Suggested fix
"properties" : {
- "localizable" : true
+ "localizable" : true,
+ "template-rendering-intent" : "template"
}Based on learnings and coding guidelines: generic/system UI icons in .imageset should use template-rendering-intent: "template" to preserve tint behavior in app UI.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "properties" : { | |
| "localizable" : true, | |
| "template-rendering-intent" : "template" | |
| "localizable" : true | |
| } | |
| "properties" : { | |
| "localizable" : true, | |
| "template-rendering-intent" : "template" | |
| } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@DashWallet/Resources/AppAssets.xcassets/Navigation`
bar/navigationbar-close.imageset/Contents.json around lines 23 - 25, The
navigation bar close icon's Contents.json currently only sets "localizable"
which removes template rendering; update the navigationbar-close imageset
Contents.json "properties" to include "template-rendering-intent": "template"
alongside "localizable" (i.e., add the template-rendering-intent property in the
Contents.json for the navigationbar-close imageset) so the asset uses template
rendering and respects nav tint color.
Sources: Coding guidelines, Learnings
| "properties" : { | ||
| "localizable" : true, | ||
| "template-rendering-intent" : "template" | ||
| "localizable" : true | ||
| } |
There was a problem hiding this comment.
Set template-rendering-intent to keep plus icon tintable.
At Line 24, navigationbar-plus no longer declares template rendering, so SwiftUI may render it as original artwork instead of inheriting navigation tint.
Suggested fix
"properties" : {
- "localizable" : true
+ "localizable" : true,
+ "template-rendering-intent" : "template"
}Based on learnings and coding guidelines: generic/system UI icons in .imageset should use template-rendering-intent: "template" to preserve tint behavior in app UI.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "properties" : { | |
| "localizable" : true, | |
| "template-rendering-intent" : "template" | |
| "localizable" : true | |
| } | |
| "properties" : { | |
| "localizable" : true, | |
| "template-rendering-intent" : "template" | |
| } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@DashWallet/Resources/AppAssets.xcassets/Navigation`
bar/navigationbar-plus.imageset/Contents.json around lines 23 - 25, The
navigationbar-plus image set lost its template rendering declaration so the plus
icon won't inherit navigation tint; update the Contents.json for the
navigationbar-plus.imageset (the "properties" object) to include
"template-rendering-intent": "template" alongside "localizable" so the asset is
rendered as a template and remains tintable in SwiftUI/UIKit.
Sources: Coding guidelines, Learnings
Why: - keep users on Order Preview when a previous Maya swap is still confirming - align Podfile.lock with the locally installed pod state used on this branch What: - add a dedicated pending-swap DashSpend error and surface it as a system alert in Order Preview - prevent the previous-swap-pending case from navigating to the Maya failure screen - refine AddressSourceView subtitle rendering and sync Podfile.lock to Protobuf 3.29.5 Validation: - attempted xcodebuild for dashwallet - build is currently blocked by CocoaPods/TodayExtension environment issues outside this code path
|
@coderabbitai review |
✅ Action performedReview finished.
|
Issue being fixed or feature implemented
This PR implements the Maya sell conversion flow and order preview experience for iOS, including amount entry, quote handling, destination input, and transaction confirmation UX.
What was done?
Maxamount handling based on current DASH wallet balance.How Has This Been Tested?
Manual testing was performed on iOS Simulator (iPhone 14 Pro, iOS 18.6) and local debug builds.
Test scenarios covered:
Breaking Changes
No breaking changes introduced.
Checklist:
For repository code-owners and collaborators only
Summary by CodeRabbit