Skip to content

Commit e247677

Browse files
bfoss765claude
andcommitted
feat: add Maya select destination coin screen (Requirement 1)
Implement coin selection screen for Maya Protocol integration. Users can browse and search Maya-supported cryptocurrencies with live fiat prices fetched from Midgard API, with halted chain indicators. - Add MayaCryptoCurrency model with 19 hardcoded coins - Add MayaEndpoint (Moya) + MayaAPIService for pools and inbound addresses - Add SelectCoinView with search, loading, error, and halted toast states - Add CoinRowView with icon, name, ticker, and fiat price - Wire "Convert Dash" button in MayaPortalView to push coin selection - Bundle 15 coin icon PNGs from crypto-icons inventory - Add all files to both dashwallet and dashpay Xcode targets Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent edc2f52 commit e247677

42 files changed

Lines changed: 1218 additions & 3 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

DashWallet.xcodeproj/project.pbxproj

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1647,6 +1647,22 @@
16471647
AA0001032AA9F58E00A1B201 /* MayaPortalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0001012AA9F58E00A1B201 /* MayaPortalView.swift */; };
16481648
AA0001052AA9F58E00A1B202 /* MayaPortalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0001042AA9F58E00A1B202 /* MayaPortalViewController.swift */; };
16491649
AA0001062AA9F58E00A1B202 /* MayaPortalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0001042AA9F58E00A1B202 /* MayaPortalViewController.swift */; };
1650+
AA0002022BA0F58E00A1B301 /* MayaCryptoCurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0002012BA0F58E00A1B301 /* MayaCryptoCurrency.swift */; };
1651+
AA0002032BA0F58E00A1B301 /* MayaCryptoCurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0002012BA0F58E00A1B301 /* MayaCryptoCurrency.swift */; };
1652+
AA0002052BA0F58E00A1B302 /* MayaPool.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0002042BA0F58E00A1B302 /* MayaPool.swift */; };
1653+
AA0002062BA0F58E00A1B302 /* MayaPool.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0002042BA0F58E00A1B302 /* MayaPool.swift */; };
1654+
AA0002082BA0F58E00A1B303 /* MayaEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0002072BA0F58E00A1B303 /* MayaEndpoint.swift */; };
1655+
AA0002092BA0F58E00A1B303 /* MayaEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0002072BA0F58E00A1B303 /* MayaEndpoint.swift */; };
1656+
AA00020B2BA0F58E00A1B304 /* MayaAPIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA00020A2BA0F58E00A1B304 /* MayaAPIService.swift */; };
1657+
AA00020C2BA0F58E00A1B304 /* MayaAPIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA00020A2BA0F58E00A1B304 /* MayaAPIService.swift */; };
1658+
AA00020E2BA0F58E00A1B305 /* SelectCoinViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA00020D2BA0F58E00A1B305 /* SelectCoinViewModel.swift */; };
1659+
AA00020F2BA0F58E00A1B305 /* SelectCoinViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA00020D2BA0F58E00A1B305 /* SelectCoinViewModel.swift */; };
1660+
AA0002112BA0F58E00A1B306 /* CoinRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0002102BA0F58E00A1B306 /* CoinRowView.swift */; };
1661+
AA0002122BA0F58E00A1B306 /* CoinRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0002102BA0F58E00A1B306 /* CoinRowView.swift */; };
1662+
AA0002142BA0F58E00A1B307 /* SelectCoinView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0002132BA0F58E00A1B307 /* SelectCoinView.swift */; };
1663+
AA0002152BA0F58E00A1B307 /* SelectCoinView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0002132BA0F58E00A1B307 /* SelectCoinView.swift */; };
1664+
AA0002172BA0F58E00A1B308 /* SelectCoinHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0002162BA0F58E00A1B308 /* SelectCoinHostingController.swift */; };
1665+
AA0002182BA0F58E00A1B308 /* SelectCoinHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0002162BA0F58E00A1B308 /* SelectCoinHostingController.swift */; };
16501666
/* End PBXBuildFile section */
16511667

16521668
/* Begin PBXContainerItemProxy section */
@@ -3196,6 +3212,14 @@
31963212
FBF3F4301E42B02800C7248E /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; };
31973213
AA0001012AA9F58E00A1B201 /* MayaPortalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MayaPortalView.swift; sourceTree = "<group>"; };
31983214
AA0001042AA9F58E00A1B202 /* MayaPortalViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MayaPortalViewController.swift; sourceTree = "<group>"; };
3215+
AA0002012BA0F58E00A1B301 /* MayaCryptoCurrency.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MayaCryptoCurrency.swift; sourceTree = "<group>"; };
3216+
AA0002042BA0F58E00A1B302 /* MayaPool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MayaPool.swift; sourceTree = "<group>"; };
3217+
AA0002072BA0F58E00A1B303 /* MayaEndpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MayaEndpoint.swift; sourceTree = "<group>"; };
3218+
AA00020A2BA0F58E00A1B304 /* MayaAPIService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MayaAPIService.swift; sourceTree = "<group>"; };
3219+
AA00020D2BA0F58E00A1B305 /* SelectCoinViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectCoinViewModel.swift; sourceTree = "<group>"; };
3220+
AA0002102BA0F58E00A1B306 /* CoinRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinRowView.swift; sourceTree = "<group>"; };
3221+
AA0002132BA0F58E00A1B307 /* SelectCoinView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectCoinView.swift; sourceTree = "<group>"; };
3222+
AA0002162BA0F58E00A1B308 /* SelectCoinHostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectCoinHostingController.swift; sourceTree = "<group>"; };
31993223
/* End PBXFileReference section */
32003224

32013225
/* Begin PBXFrameworksBuildPhase section */
@@ -4056,13 +4080,29 @@
40564080
children = (
40574081
AA0001012AA9F58E00A1B201 /* MayaPortalView.swift */,
40584082
AA0001042AA9F58E00A1B202 /* MayaPortalViewController.swift */,
4083+
AA00020D2BA0F58E00A1B305 /* SelectCoinViewModel.swift */,
4084+
AA0002102BA0F58E00A1B306 /* CoinRowView.swift */,
4085+
AA0002132BA0F58E00A1B307 /* SelectCoinView.swift */,
4086+
AA0002162BA0F58E00A1B308 /* SelectCoinHostingController.swift */,
4087+
);
4088+
path = Maya;
4089+
sourceTree = "<group>";
4090+
};
4091+
AA0002192BA0F58E00A1B309 /* Maya */ = {
4092+
isa = PBXGroup;
4093+
children = (
4094+
AA0002012BA0F58E00A1B301 /* MayaCryptoCurrency.swift */,
4095+
AA0002042BA0F58E00A1B302 /* MayaPool.swift */,
4096+
AA0002072BA0F58E00A1B303 /* MayaEndpoint.swift */,
4097+
AA00020A2BA0F58E00A1B304 /* MayaAPIService.swift */,
40594098
);
40604099
path = Maya;
40614100
sourceTree = "<group>";
40624101
};
40634102
2A44313D22CF632F009BAF7F /* Models */ = {
40644103
isa = PBXGroup;
40654104
children = (
4105+
AA0002192BA0F58E00A1B309 /* Maya */,
40664106
7503643C2C89D4890029EC0D /* CoinJoin */,
40674107
75A8C1612AE571E30042256E /* Voting */,
40684108
47081194298CF1E3003FCA3D /* Transactions */,
@@ -9198,6 +9238,14 @@
91989238
2A8C24B423336FEA00000D43 /* DWQuickReceiveViewController.m in Sources */,
91999239
AA0001022AA9F58E00A1B201 /* MayaPortalView.swift in Sources */,
92009240
AA0001052AA9F58E00A1B202 /* MayaPortalViewController.swift in Sources */,
9241+
AA0002022BA0F58E00A1B301 /* MayaCryptoCurrency.swift in Sources */,
9242+
AA0002052BA0F58E00A1B302 /* MayaPool.swift in Sources */,
9243+
AA0002082BA0F58E00A1B303 /* MayaEndpoint.swift in Sources */,
9244+
AA00020B2BA0F58E00A1B304 /* MayaAPIService.swift in Sources */,
9245+
AA00020E2BA0F58E00A1B305 /* SelectCoinViewModel.swift in Sources */,
9246+
AA0002112BA0F58E00A1B306 /* CoinRowView.swift in Sources */,
9247+
AA0002142BA0F58E00A1B307 /* SelectCoinView.swift in Sources */,
9248+
AA0002172BA0F58E00A1B308 /* SelectCoinHostingController.swift in Sources */,
92019249
);
92029250
runOnlyForDeploymentPostprocessing = 0;
92039251
};
@@ -10087,6 +10135,14 @@
1008710135
1DD7BE9CD62998F12672140D /* RadioButtonRow.swift in Sources */,
1008810136
AA0001032AA9F58E00A1B201 /* MayaPortalView.swift in Sources */,
1008910137
AA0001062AA9F58E00A1B202 /* MayaPortalViewController.swift in Sources */,
10138+
AA0002032BA0F58E00A1B301 /* MayaCryptoCurrency.swift in Sources */,
10139+
AA0002062BA0F58E00A1B302 /* MayaPool.swift in Sources */,
10140+
AA0002092BA0F58E00A1B303 /* MayaEndpoint.swift in Sources */,
10141+
AA00020C2BA0F58E00A1B304 /* MayaAPIService.swift in Sources */,
10142+
AA00020F2BA0F58E00A1B305 /* SelectCoinViewModel.swift in Sources */,
10143+
AA0002122BA0F58E00A1B306 /* CoinRowView.swift in Sources */,
10144+
AA0002152BA0F58E00A1B307 /* SelectCoinView.swift in Sources */,
10145+
AA0002182BA0F58E00A1B308 /* SelectCoinHostingController.swift in Sources */,
1009010146
);
1009110147
runOnlyForDeploymentPostprocessing = 0;
1009210148
};
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "maya.coin.arb.png",
5+
"idiom" : "universal"
6+
}
7+
],
8+
"info" : {
9+
"author" : "xcode",
10+
"version" : 1
11+
},
12+
"properties" : {
13+
"preserves-vector-representation" : true,
14+
"template-rendering-intent" : "original"
15+
}
16+
}
4.32 KB
Loading
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "maya.coin.btc.png",
5+
"idiom" : "universal"
6+
}
7+
],
8+
"info" : {
9+
"author" : "xcode",
10+
"version" : 1
11+
},
12+
"properties" : {
13+
"preserves-vector-representation" : true,
14+
"template-rendering-intent" : "original"
15+
}
16+
}
2.63 KB
Loading
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "maya.coin.dai.png",
5+
"idiom" : "universal"
6+
}
7+
],
8+
"info" : {
9+
"author" : "xcode",
10+
"version" : 1
11+
},
12+
"properties" : {
13+
"preserves-vector-representation" : true,
14+
"template-rendering-intent" : "original"
15+
}
16+
}
2.61 KB
Loading
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "maya.coin.eth.png",
5+
"idiom" : "universal"
6+
}
7+
],
8+
"info" : {
9+
"author" : "xcode",
10+
"version" : 1
11+
},
12+
"properties" : {
13+
"preserves-vector-representation" : true,
14+
"template-rendering-intent" : "original"
15+
}
16+
}
2.71 KB
Loading
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "maya.coin.gld.png",
5+
"idiom" : "universal"
6+
}
7+
],
8+
"info" : {
9+
"author" : "xcode",
10+
"version" : 1
11+
},
12+
"properties" : {
13+
"preserves-vector-representation" : true,
14+
"template-rendering-intent" : "original"
15+
}
16+
}

0 commit comments

Comments
 (0)