From ff0bb381b58ebc6b2abbcb623248bea56d4c96c2 Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 19 Sep 2024 14:37:29 -0500 Subject: [PATCH 1/4] feat: transactions sort by --- .../project.pbxproj | 34 +++++++++---------- .../Service/BDK Service/BDKService.swift | 2 +- .../View/Activity/TransactionListView.swift | 2 +- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/BDKSwiftExampleWallet.xcodeproj/project.pbxproj b/BDKSwiftExampleWallet.xcodeproj/project.pbxproj index 644fa7d4..e62da236 100644 --- a/BDKSwiftExampleWallet.xcodeproj/project.pbxproj +++ b/BDKSwiftExampleWallet.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 56; + objectVersion = 60; objects = { /* Begin PBXBuildFile section */ @@ -15,6 +15,7 @@ AE0C30FD2A804BC1008F1EAE /* ReceiveViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE0C30FC2A804BC1008F1EAE /* ReceiveViewModel.swift */; }; AE1390C72A7DB0AF0098127A /* KeyService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE1390C62A7DB0AF0098127A /* KeyService.swift */; }; AE184EFC2BFE52C800374362 /* Amount+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE184EFB2BFE52C800374362 /* Amount+Extensions.swift */; }; + AE187D782C9BB3B50081D0C3 /* BitcoinDevKit in Frameworks */ = {isa = PBXBuildFile; productRef = AE187D772C9BB3B50081D0C3 /* BitcoinDevKit */; }; AE18E9382A9528200019D2A4 /* Bundle+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE18E9372A9528200019D2A4 /* Bundle+Extensions.swift */; }; AE18E93A2A9532CB0019D2A4 /* BDKSwiftExampleWalletBundle+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE18E9392A9532CB0019D2A4 /* BDKSwiftExampleWalletBundle+Extensions.swift */; }; AE1C34242A424456008F807A /* ReceiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE1C34232A424456008F807A /* ReceiveView.swift */; }; @@ -61,7 +62,6 @@ AE7F67072A744CE200CED561 /* Double+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7F67062A744CE200CED561 /* Double+Extensions.swift */; }; AE7F67092A7451AA00CED561 /* Price.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7F67082A7451AA00CED561 /* Price.swift */; }; AE7F670C2A7451D700CED561 /* CurrencyCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7F670B2A7451D700CED561 /* CurrencyCode.swift */; }; - AE8A39C42C8E31D4002C0A62 /* BitcoinDevKit in Frameworks */ = {isa = PBXBuildFile; productRef = AE8A39C32C8E31D4002C0A62 /* BitcoinDevKit */; }; AE91CEED2C0FDB70000AAD20 /* SentAndReceivedValues+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE91CEEC2C0FDB70000AAD20 /* SentAndReceivedValues+Extensions.swift */; }; AE91CEEF2C0FDBC7000AAD20 /* CanonicalTx+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE91CEEE2C0FDBC7000AAD20 /* CanonicalTx+Extensions.swift */; }; AE96F6622A424C400055623C /* BDKSwiftExampleWalletReceiveViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE96F6612A424C400055623C /* BDKSwiftExampleWalletReceiveViewModelTests.swift */; }; @@ -180,7 +180,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AE8A39C42C8E31D4002C0A62 /* BitcoinDevKit in Frameworks */, + AE187D782C9BB3B50081D0C3 /* BitcoinDevKit in Frameworks */, AE29ED0F2BBE2E7100EB9C4F /* BitcoinDevKit in Frameworks */, AEAF83B62B7BD4D10019B23B /* CodeScanner in Frameworks */, AEB735D32B2CC4B900F99DBB /* BitcoinUI in Frameworks */, @@ -534,7 +534,7 @@ AEAF83B52B7BD4D10019B23B /* CodeScanner */, AE29ED0E2BBE2E7100EB9C4F /* BitcoinDevKit */, AEE83A482C07F54B00834468 /* BitcoinDevKit */, - AE8A39C32C8E31D4002C0A62 /* BitcoinDevKit */, + AE187D772C9BB3B50081D0C3 /* BitcoinDevKit */, ); productName = BDKSwiftExampleWallet; productReference = AE4984782A1BBBD6009951E2 /* BDKSwiftExampleWallet.app */; @@ -591,7 +591,7 @@ AE7D5A0C2A7EE62200EAC8CE /* XCRemoteSwiftPackageReference "KeychainAccess" */, AEB735D12B2CC4B900F99DBB /* XCRemoteSwiftPackageReference "BitcoinUI" */, AEAF83B42B7BD4D10019B23B /* XCRemoteSwiftPackageReference "CodeScanner" */, - AE8A39C22C8E31D4002C0A62 /* XCRemoteSwiftPackageReference "bdk-swift" */, + AE187D762C9BB3B50081D0C3 /* XCLocalSwiftPackageReference "../bdk-ffi/bdk-swift" */, ); productRefGroup = AE4984792A1BBBD6009951E2 /* Products */; projectDirPath = ""; @@ -980,6 +980,13 @@ }; /* End XCConfigurationList section */ +/* Begin XCLocalSwiftPackageReference section */ + AE187D762C9BB3B50081D0C3 /* XCLocalSwiftPackageReference "../bdk-ffi/bdk-swift" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = "../bdk-ffi/bdk-swift"; + }; +/* End XCLocalSwiftPackageReference section */ + /* Begin XCRemoteSwiftPackageReference section */ AE7D5A0C2A7EE62200EAC8CE /* XCRemoteSwiftPackageReference "KeychainAccess" */ = { isa = XCRemoteSwiftPackageReference; @@ -989,14 +996,6 @@ version = 4.2.2; }; }; - AE8A39C22C8E31D4002C0A62 /* XCRemoteSwiftPackageReference "bdk-swift" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/bitcoindevkit/bdk-swift.git"; - requirement = { - kind = exactVersion; - version = "1.0.0-beta.2"; - }; - }; AEAF83B42B7BD4D10019B23B /* XCRemoteSwiftPackageReference "CodeScanner" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/twostraws/CodeScanner.git"; @@ -1016,6 +1015,10 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ + AE187D772C9BB3B50081D0C3 /* BitcoinDevKit */ = { + isa = XCSwiftPackageProductDependency; + productName = BitcoinDevKit; + }; AE29ED0E2BBE2E7100EB9C4F /* BitcoinDevKit */ = { isa = XCSwiftPackageProductDependency; productName = BitcoinDevKit; @@ -1025,11 +1028,6 @@ package = AE7D5A0C2A7EE62200EAC8CE /* XCRemoteSwiftPackageReference "KeychainAccess" */; productName = KeychainAccess; }; - AE8A39C32C8E31D4002C0A62 /* BitcoinDevKit */ = { - isa = XCSwiftPackageProductDependency; - package = AE8A39C22C8E31D4002C0A62 /* XCRemoteSwiftPackageReference "bdk-swift" */; - productName = BitcoinDevKit; - }; AEAF83B52B7BD4D10019B23B /* CodeScanner */ = { isa = XCSwiftPackageProductDependency; package = AEAF83B42B7BD4D10019B23B /* XCRemoteSwiftPackageReference "CodeScanner" */; diff --git a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift index 3e2b0850..22b9b419 100644 --- a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift +++ b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift @@ -53,7 +53,7 @@ private class BDKService { guard let wallet = self.wallet else { throw WalletError.walletNotFound } - let transactions = wallet.transactions() + let transactions = wallet.transactionsSortBy() return transactions } diff --git a/BDKSwiftExampleWallet/View/Activity/TransactionListView.swift b/BDKSwiftExampleWallet/View/Activity/TransactionListView.swift index 6abe0cf5..28a7b5b3 100644 --- a/BDKSwiftExampleWallet/View/Activity/TransactionListView.swift +++ b/BDKSwiftExampleWallet/View/Activity/TransactionListView.swift @@ -36,7 +36,7 @@ struct TransactionListView: View { } else { ForEach( - transactions.sorted(by: { $0.transaction.vsize() > $1.transaction.vsize() }), + transactions, id: \.transaction.transactionID ) { item in let canonicalTx = item From ecadbaa37973ec33ac3b7dacfb6c9761d73869bc Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 19 Sep 2024 20:37:24 -0500 Subject: [PATCH 2/4] feat: transactions sort by client --- .../project.pbxproj | 4 +++ .../ChainPosition+Extensions.swift | 28 +++++++++++++++++++ .../Service/BDK Service/BDKService.swift | 2 +- .../View/Activity/TransactionListView.swift | 6 +++- 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 BDKSwiftExampleWallet/Extensions/BDK+Extensions/ChainPosition+Extensions.swift diff --git a/BDKSwiftExampleWallet.xcodeproj/project.pbxproj b/BDKSwiftExampleWallet.xcodeproj/project.pbxproj index e62da236..ec150c0e 100644 --- a/BDKSwiftExampleWallet.xcodeproj/project.pbxproj +++ b/BDKSwiftExampleWallet.xcodeproj/project.pbxproj @@ -62,6 +62,7 @@ AE7F67072A744CE200CED561 /* Double+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7F67062A744CE200CED561 /* Double+Extensions.swift */; }; AE7F67092A7451AA00CED561 /* Price.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7F67082A7451AA00CED561 /* Price.swift */; }; AE7F670C2A7451D700CED561 /* CurrencyCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7F670B2A7451D700CED561 /* CurrencyCode.swift */; }; + AE83EFDB2C9D07B200B41244 /* ChainPosition+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE83EFDA2C9D07B200B41244 /* ChainPosition+Extensions.swift */; }; AE91CEED2C0FDB70000AAD20 /* SentAndReceivedValues+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE91CEEC2C0FDB70000AAD20 /* SentAndReceivedValues+Extensions.swift */; }; AE91CEEF2C0FDBC7000AAD20 /* CanonicalTx+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE91CEEE2C0FDBC7000AAD20 /* CanonicalTx+Extensions.swift */; }; AE96F6622A424C400055623C /* BDKSwiftExampleWalletReceiveViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE96F6612A424C400055623C /* BDKSwiftExampleWalletReceiveViewModelTests.swift */; }; @@ -153,6 +154,7 @@ AE7F67062A744CE200CED561 /* Double+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Double+Extensions.swift"; sourceTree = ""; }; AE7F67082A7451AA00CED561 /* Price.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Price.swift; sourceTree = ""; }; AE7F670B2A7451D700CED561 /* CurrencyCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrencyCode.swift; sourceTree = ""; }; + AE83EFDA2C9D07B200B41244 /* ChainPosition+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChainPosition+Extensions.swift"; sourceTree = ""; }; AE91CEEC2C0FDB70000AAD20 /* SentAndReceivedValues+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SentAndReceivedValues+Extensions.swift"; sourceTree = ""; }; AE91CEEE2C0FDBC7000AAD20 /* CanonicalTx+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CanonicalTx+Extensions.swift"; sourceTree = ""; }; AE96F6612A424C400055623C /* BDKSwiftExampleWalletReceiveViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BDKSwiftExampleWalletReceiveViewModelTests.swift; sourceTree = ""; }; @@ -502,6 +504,7 @@ isa = PBXGroup; children = ( AEE6C74B2ABCB3E200442ADD /* Transaction+Extensions.swift */, + AE83EFDA2C9D07B200B41244 /* ChainPosition+Extensions.swift */, AE2381B02C60690900F6B00C /* LocalOutput+Extensions.swift */, AE6F34D72AA6C1800087E700 /* Network+Extensions.swift */, AE6F34D92AA6C1E00087E700 /* Balance+Extensions.swift */, @@ -629,6 +632,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + AE83EFDB2C9D07B200B41244 /* ChainPosition+Extensions.swift in Sources */, AE2ADD782B61EFFF00C2A823 /* SettingsViewModel.swift in Sources */, AEAB03112ABDDB86000C9528 /* FeeViewModel.swift in Sources */, AEE6C74C2ABCB3E200442ADD /* Transaction+Extensions.swift in Sources */, diff --git a/BDKSwiftExampleWallet/Extensions/BDK+Extensions/ChainPosition+Extensions.swift b/BDKSwiftExampleWallet/Extensions/BDK+Extensions/ChainPosition+Extensions.swift new file mode 100644 index 00000000..0d4ad43b --- /dev/null +++ b/BDKSwiftExampleWallet/Extensions/BDK+Extensions/ChainPosition+Extensions.swift @@ -0,0 +1,28 @@ +// +// ChainPosition+Extensions.swift +// BDKSwiftExampleWallet +// +// Created by Matthew Ramsden on 9/19/24. +// + +import BitcoinDevKit +import Foundation + +extension ChainPosition { + func isBefore(_ other: ChainPosition) -> Bool { + switch (self, other) { + case (.unconfirmed, .confirmed): + // Unconfirmed should come before confirmed. + return true + case (.confirmed, .unconfirmed): + // Confirmed should come after unconfirmed. + return false + case (.unconfirmed(let timestamp1), .unconfirmed(let timestamp2)): + // If both are unconfirmed, compare by timestamp (optional). + return timestamp1 < timestamp2 + case (.confirmed(let blockTime1), .confirmed(let blockTime2)): + // If both are confirmed, compare by block height descending. + return blockTime1.blockId.height > blockTime2.blockId.height + } + } +} diff --git a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift index 22b9b419..3e2b0850 100644 --- a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift +++ b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift @@ -53,7 +53,7 @@ private class BDKService { guard let wallet = self.wallet else { throw WalletError.walletNotFound } - let transactions = wallet.transactionsSortBy() + let transactions = wallet.transactions() return transactions } diff --git a/BDKSwiftExampleWallet/View/Activity/TransactionListView.swift b/BDKSwiftExampleWallet/View/Activity/TransactionListView.swift index 28a7b5b3..4a98cb5a 100644 --- a/BDKSwiftExampleWallet/View/Activity/TransactionListView.swift +++ b/BDKSwiftExampleWallet/View/Activity/TransactionListView.swift @@ -35,8 +35,12 @@ struct TransactionListView: View { .listRowSeparator(.hidden) } else { + let sortedTransactions = transactions.sorted { (tx1, tx2) in + return tx1.chainPosition.isBefore(tx2.chainPosition) + } + ForEach( - transactions, + sortedTransactions, id: \.transaction.transactionID ) { item in let canonicalTx = item From 65b38cc5f585f11f19569805ffbbfd3e55ff008f Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 19 Sep 2024 20:50:55 -0500 Subject: [PATCH 3/4] remote spm and sort in another spot --- .../project.pbxproj | 27 ++++++++++++------- .../View Model/WalletViewModel.swift | 5 +++- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/BDKSwiftExampleWallet.xcodeproj/project.pbxproj b/BDKSwiftExampleWallet.xcodeproj/project.pbxproj index ec150c0e..b8d272f6 100644 --- a/BDKSwiftExampleWallet.xcodeproj/project.pbxproj +++ b/BDKSwiftExampleWallet.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 60; + objectVersion = 56; objects = { /* Begin PBXBuildFile section */ @@ -74,6 +74,7 @@ AEB735D32B2CC4B900F99DBB /* BitcoinUI in Frameworks */ = {isa = PBXBuildFile; productRef = AEB735D22B2CC4B900F99DBB /* BitcoinUI */; }; AEB905C32A7EEBF000CD0337 /* BackupInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB905C22A7EEBF000CD0337 /* BackupInfo.swift */; }; AEC2CF5A2ABFBA19008065E4 /* BuildTransactionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC2CF592ABFBA19008065E4 /* BuildTransactionViewModel.swift */; }; + AED02B912C9D0B44006DAAAF /* BitcoinDevKit in Frameworks */ = {isa = PBXBuildFile; productRef = AED02B902C9D0B44006DAAAF /* BitcoinDevKit */; }; AED062712A9BB1D6001DC6BD /* BDKSwiftExampleWalletFeeServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED062702A9BB1D6001DC6BD /* BDKSwiftExampleWalletFeeServiceTests.swift */; }; AED062732A9BD698001DC6BD /* BDKSwiftExampleWalletKeyServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED062722A9BD698001DC6BD /* BDKSwiftExampleWalletKeyServiceTests.swift */; }; AED062752A9BD7FA001DC6BD /* BDKSwiftExampleWalletBDKServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED062742A9BD7FA001DC6BD /* BDKSwiftExampleWalletBDKServiceTests.swift */; }; @@ -185,6 +186,7 @@ AE187D782C9BB3B50081D0C3 /* BitcoinDevKit in Frameworks */, AE29ED0F2BBE2E7100EB9C4F /* BitcoinDevKit in Frameworks */, AEAF83B62B7BD4D10019B23B /* CodeScanner in Frameworks */, + AED02B912C9D0B44006DAAAF /* BitcoinDevKit in Frameworks */, AEB735D32B2CC4B900F99DBB /* BitcoinUI in Frameworks */, AEE83A492C07F54B00834468 /* BitcoinDevKit in Frameworks */, AE7D5A0E2A7EE62200EAC8CE /* KeychainAccess in Frameworks */, @@ -538,6 +540,7 @@ AE29ED0E2BBE2E7100EB9C4F /* BitcoinDevKit */, AEE83A482C07F54B00834468 /* BitcoinDevKit */, AE187D772C9BB3B50081D0C3 /* BitcoinDevKit */, + AED02B902C9D0B44006DAAAF /* BitcoinDevKit */, ); productName = BDKSwiftExampleWallet; productReference = AE4984782A1BBBD6009951E2 /* BDKSwiftExampleWallet.app */; @@ -594,7 +597,7 @@ AE7D5A0C2A7EE62200EAC8CE /* XCRemoteSwiftPackageReference "KeychainAccess" */, AEB735D12B2CC4B900F99DBB /* XCRemoteSwiftPackageReference "BitcoinUI" */, AEAF83B42B7BD4D10019B23B /* XCRemoteSwiftPackageReference "CodeScanner" */, - AE187D762C9BB3B50081D0C3 /* XCLocalSwiftPackageReference "../bdk-ffi/bdk-swift" */, + AED02B8F2C9D0B44006DAAAF /* XCRemoteSwiftPackageReference "bdk-swift" */, ); productRefGroup = AE4984792A1BBBD6009951E2 /* Products */; projectDirPath = ""; @@ -984,13 +987,6 @@ }; /* End XCConfigurationList section */ -/* Begin XCLocalSwiftPackageReference section */ - AE187D762C9BB3B50081D0C3 /* XCLocalSwiftPackageReference "../bdk-ffi/bdk-swift" */ = { - isa = XCLocalSwiftPackageReference; - relativePath = "../bdk-ffi/bdk-swift"; - }; -/* End XCLocalSwiftPackageReference section */ - /* Begin XCRemoteSwiftPackageReference section */ AE7D5A0C2A7EE62200EAC8CE /* XCRemoteSwiftPackageReference "KeychainAccess" */ = { isa = XCRemoteSwiftPackageReference; @@ -1016,6 +1012,14 @@ kind = branch; }; }; + AED02B8F2C9D0B44006DAAAF /* XCRemoteSwiftPackageReference "bdk-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/bitcoindevkit/bdk-swift.git"; + requirement = { + kind = exactVersion; + version = "1.0.0-beta.2"; + }; + }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ @@ -1042,6 +1046,11 @@ package = AEB735D12B2CC4B900F99DBB /* XCRemoteSwiftPackageReference "BitcoinUI" */; productName = BitcoinUI; }; + AED02B902C9D0B44006DAAAF /* BitcoinDevKit */ = { + isa = XCSwiftPackageProductDependency; + package = AED02B8F2C9D0B44006DAAAF /* XCRemoteSwiftPackageReference "bdk-swift" */; + productName = BitcoinDevKit; + }; AEE83A482C07F54B00834468 /* BitcoinDevKit */ = { isa = XCSwiftPackageProductDependency; productName = BitcoinDevKit; diff --git a/BDKSwiftExampleWallet/View Model/WalletViewModel.swift b/BDKSwiftExampleWallet/View Model/WalletViewModel.swift index 6916d0db..5211887e 100644 --- a/BDKSwiftExampleWallet/View Model/WalletViewModel.swift +++ b/BDKSwiftExampleWallet/View Model/WalletViewModel.swift @@ -32,7 +32,10 @@ class WalletViewModel { var totalScripts: UInt64 = 0 var recentTransactions: [CanonicalTx] { - Array(transactions.prefix(5)) + let sortedTransactions = transactions.sorted { (tx1, tx2) in + return tx1.chainPosition.isBefore(tx2.chainPosition) + } + return Array(sortedTransactions.prefix(5)) } init( From 6f7c3845093fb8c8b3c55ee451833ae1eae6320f Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 19 Sep 2024 20:57:54 -0500 Subject: [PATCH 4/4] final --- BDKSwiftExampleWallet/Resources/Localizable.xcstrings | 1 + BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift | 5 ++++- BDKSwiftExampleWallet/View Model/WalletViewModel.swift | 5 +---- .../View/Activity/TransactionListView.swift | 6 +----- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/BDKSwiftExampleWallet/Resources/Localizable.xcstrings b/BDKSwiftExampleWallet/Resources/Localizable.xcstrings index dd156e83..1759c0df 100644 --- a/BDKSwiftExampleWallet/Resources/Localizable.xcstrings +++ b/BDKSwiftExampleWallet/Resources/Localizable.xcstrings @@ -400,6 +400,7 @@ } }, "Navigation Title" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { diff --git a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift index 3e2b0850..61095459 100644 --- a/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift +++ b/BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift @@ -54,7 +54,10 @@ private class BDKService { throw WalletError.walletNotFound } let transactions = wallet.transactions() - return transactions + let sortedTransactions = transactions.sorted { (tx1, tx2) in + return tx1.chainPosition.isBefore(tx2.chainPosition) + } + return sortedTransactions } func listUnspent() throws -> [LocalOutput] { diff --git a/BDKSwiftExampleWallet/View Model/WalletViewModel.swift b/BDKSwiftExampleWallet/View Model/WalletViewModel.swift index 5211887e..6916d0db 100644 --- a/BDKSwiftExampleWallet/View Model/WalletViewModel.swift +++ b/BDKSwiftExampleWallet/View Model/WalletViewModel.swift @@ -32,10 +32,7 @@ class WalletViewModel { var totalScripts: UInt64 = 0 var recentTransactions: [CanonicalTx] { - let sortedTransactions = transactions.sorted { (tx1, tx2) in - return tx1.chainPosition.isBefore(tx2.chainPosition) - } - return Array(sortedTransactions.prefix(5)) + Array(transactions.prefix(5)) } init( diff --git a/BDKSwiftExampleWallet/View/Activity/TransactionListView.swift b/BDKSwiftExampleWallet/View/Activity/TransactionListView.swift index 4a98cb5a..28a7b5b3 100644 --- a/BDKSwiftExampleWallet/View/Activity/TransactionListView.swift +++ b/BDKSwiftExampleWallet/View/Activity/TransactionListView.swift @@ -35,12 +35,8 @@ struct TransactionListView: View { .listRowSeparator(.hidden) } else { - let sortedTransactions = transactions.sorted { (tx1, tx2) in - return tx1.chainPosition.isBefore(tx2.chainPosition) - } - ForEach( - sortedTransactions, + transactions, id: \.transaction.transactionID ) { item in let canonicalTx = item