taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

commit 482006cce9a26c4be42303dde94d0379f2ffd03e
parent 4fcc0b7d2974f414fe3d5b2d36a0254bf8748496
Author: Marc Stibane <marc@taler.net>
Date:   Mon, 25 Nov 2024 20:35:33 +0100

getTransactionById

Diffstat:
MTalerWallet1/Views/Actions/Banking/ManualWithdrawDone.swift | 8++------
MTalerWallet1/Views/Actions/Peer2peer/P2PReadyV.swift | 8++------
MTalerWallet1/Views/Balances/BalancesPendingRowV.swift | 11++---------
MTalerWallet1/Views/Balances/BalancesSectionView.swift | 14+++-----------
MTalerWallet1/Views/Sheets/Payment/PaymentDone.swift | 10+++-------
MTalerWallet1/Views/Sheets/Refund/RefundURIView.swift | 9+++------
MTalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawAcceptDone.swift | 15+++++----------
MTalerWallet1/Views/Transactions/TransactionSummaryV.swift | 8++++++--
MTalerWallet1/Views/Transactions/TransactionsListView.swift | 8+++-----
9 files changed, 29 insertions(+), 62 deletions(-)

diff --git a/TalerWallet1/Views/Actions/Banking/ManualWithdrawDone.swift b/TalerWallet1/Views/Actions/Banking/ManualWithdrawDone.swift @@ -22,15 +22,11 @@ struct ManualWithdrawDone: View { @State private var acceptManualWithdrawalResult: AcceptManualWithdrawalResult? @State private var transactionId: String? + @State private var noTransaction: Transaction? = nil let navTitle = String(localized: "Wire Transfer") @MainActor - func reloadOneAction(_ transactionId: String, viewHandles: Bool) async throws -> Transaction { - return try await model.getTransactionById(transactionId, viewHandles: viewHandles) - } - - @MainActor private func viewDidLoad() async { if transactionId == nil { if let result = try? await model.acceptManualWithdrawal(amountToTransfer, @@ -50,7 +46,7 @@ struct ManualWithdrawDone: View { TransactionSummaryV(stack: stack.push(), scope: scope, // TODO: use data from tx itself transactionId: transactionId, - reloadAction: reloadOneAction, + outTransaction: $noTransaction, navTitle: navTitle, hasDone: true, abortAction: nil, diff --git a/TalerWallet1/Views/Actions/Peer2peer/P2PReadyV.swift b/TalerWallet1/Views/Actions/Peer2peer/P2PReadyV.swift @@ -30,11 +30,7 @@ struct P2PReadyV: View { let navTitle = String(localized: "Ready") @State private var transactionId: String? = nil - - @MainActor - func reloadOneAction(_ transactionId: String, viewHandles: Bool) async throws -> Transaction { - return try await model.getTransactionById(transactionId, viewHandles: viewHandles) - } + @State private var noTransaction: Transaction? = nil @MainActor private func initiateP2P() async { @@ -77,7 +73,7 @@ struct P2PReadyV: View { TransactionSummaryV(stack: stack.push(), scope: scope, transactionId: transactionId, - reloadAction: reloadOneAction, + outTransaction: $noTransaction, navTitle: navTitle, hasDone: true, abortAction: nil, diff --git a/TalerWallet1/Views/Balances/BalancesPendingRowV.swift b/TalerWallet1/Views/Balances/BalancesPendingRowV.swift @@ -16,7 +16,6 @@ struct BalancesPendingRowV: View { @Binding var selectedBalance: Balance? // <- return here the balance when we go to Transactions @Binding var pendingTransactions: [Transaction] let reloadPending: (_ stack: CallStack) async -> () - let reloadOneAction: ((_ transactionId: String, _ viewHandles: Bool) async throws -> Transaction)? @ViewBuilder func pendingRowLabel() -> some View { let pendingIncoming = balance.pendingIncoming @@ -61,20 +60,15 @@ struct BalancesPendingRowV: View { } var body: some View { - if let reloadOneAction { let destination = TransactionsListView(stack: stack.push(), scope: balance.scopeInfo, balance: balance, selectedBalance: $selectedBalance, navTitle: String(localized: "Pending", comment: "ViewTitle of TransactionList"), transactions: $pendingTransactions, - reloadAllAction: reloadPending, - reloadOneAction: reloadOneAction) + reloadAllAction: reloadPending) NavigationLink(destination: destination) { pendingRowLabel() } //let _ = print("button: Pending Transactions: \(currency)") - } else { // just for Preview - NavigationLink(destination: EmptyView()) { pendingRowLabel() } - } } // body } // BalancesPendingRowV @@ -100,8 +94,7 @@ fileprivate struct BalancesPendingRowV_Previews: PreviewProvider { balance: balance, selectedBalance: $selectedBalance, pendingTransactions: $previewTransactions, - reloadPending: {stack in }, - reloadOneAction: nil) + reloadPending: {stack in }) } } diff --git a/TalerWallet1/Views/Balances/BalancesSectionView.swift b/TalerWallet1/Views/Balances/BalancesSectionView.swift @@ -44,11 +44,6 @@ struct BalancesSectionView { private static func className() -> String {"\(self)"} - @MainActor - func reloadOneAction(_ transactionId: String, _ viewHandles: Bool) async throws -> Transaction { - return try await model.getTransactionById(transactionId, viewHandles: viewHandles) - } - @State private var sectionID = UUID() @State private var shownSectionID = UUID() // guaranteed to be different the first time @@ -104,8 +99,7 @@ extension BalancesSectionView: View { selectedBalance: $selectedBalance, navTitle: nil, // will use scopeInfo.currency transactions: $completedTransactions, - reloadAllAction: loadCompleted, - reloadOneAction: reloadOneAction) + reloadAllAction: loadCompleted) Section { BalanceCellV(stack: stack.push("BalanceCell"), scope: balance.scopeInfo, @@ -120,8 +114,7 @@ extension BalancesSectionView: View { balance: balance, selectedBalance: $selectedBalance, pendingTransactions: $pendingTransactions, - reloadPending: loadPending, - reloadOneAction: reloadOneAction) + reloadPending: loadPending) .padding(.leading, ICONLEADING) } } header: { @@ -144,8 +137,7 @@ extension BalancesSectionView: View { stack: stack.push(), scope: scopeInfo, transactions: $recentTransactions, - reloadAllAction: loadRecent, - reloadOneAction: reloadOneAction) + reloadAllAction: loadRecent) .padding(.leading, ICONLEADING) } header: { if !minimalistic { diff --git a/TalerWallet1/Views/Sheets/Payment/PaymentDone.swift b/TalerWallet1/Views/Sheets/Payment/PaymentDone.swift @@ -17,12 +17,8 @@ struct PaymentDone: View { @EnvironmentObject private var controller: Controller @EnvironmentObject private var model: WalletModel - @State var paymentDone: Bool = false - - @MainActor - func reloadOneAction(_ transactionId: String, viewHandles: Bool) async throws -> Transaction { - return try await model.getTransactionById(transactionId, viewHandles: viewHandles) - } + @State private var paymentDone: Bool = false + @State private var noTransaction: Transaction? = nil @MainActor private func viewDidLoad() async { @@ -45,7 +41,7 @@ struct PaymentDone: View { TransactionSummaryV(stack: stack.push(), scope: scope, transactionId: transactionId, - reloadAction: reloadOneAction, + outTransaction: $noTransaction, navTitle: navTitle, hasDone: true, abortAction: nil, diff --git a/TalerWallet1/Views/Sheets/Refund/RefundURIView.swift b/TalerWallet1/Views/Sheets/Refund/RefundURIView.swift @@ -23,17 +23,14 @@ struct RefundURIView: View { @State var transaction: Transaction? @State private var currencyInfo: CurrencyInfo = CurrencyInfo.zero(UNKNOWN) - @MainActor - func reloadOneAction(_ transactionId: String, viewHandles: Bool) async throws -> Transaction { - return try await model.getTransactionById(transactionId, viewHandles: viewHandles) - } + @State private var noTransaction: Transaction? = nil @MainActor private func viewDidLoad() async { symLog.log(".task") if let result = try? await model.startRefundForUri(url: url.absoluteString) { refundTransactionId = result - transaction = try? await model.getTransactionById(result) +// transaction = try? await model.getTransactionById(result) } } @@ -47,7 +44,7 @@ struct RefundURIView: View { TransactionSummaryV(stack: stack.push(), scope: scope, transactionId: refundTransactionId, - reloadAction: reloadOneAction, + outTransaction: $noTransaction, navTitle: nil, // navTitle, hasDone: true, abortAction: model.abortTransaction, diff --git a/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawAcceptDone.swift b/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawAcceptDone.swift @@ -21,18 +21,11 @@ struct WithdrawAcceptDone: View { @EnvironmentObject private var model: WalletModel @State private var transactionId: String? = nil - @State private var transaction: Transaction? = nil + @State private var transaction: Transaction? = Transaction(dummyCurrency: DEMOCURRENCY) let navTitle = String(localized: "Authorize at Bank", comment: "Nav title") @MainActor - func reloadOneAction(_ transactionId: String, viewHandles: Bool) async throws -> Transaction { - let response = try await model.getTransactionById(transactionId, viewHandles: viewHandles) - transaction = response - return response - } - - @MainActor private func viewDidLoad() async { if let exchangeBaseUrl { // TODO: restrictAge @@ -57,7 +50,7 @@ struct WithdrawAcceptDone: View { TransactionSummaryV(stack: stack.push(), scope: scope, transactionId: transactionId, - reloadAction: reloadOneAction, + outTransaction: $transaction, navTitle: navTitle, hasDone: true, abortAction: nil, @@ -69,7 +62,8 @@ struct WithdrawAcceptDone: View { .interactiveDismissDisabled() // can only use "Done" button to dismiss .navigationTitle(navTitle) .safeAreaInset(edge: .bottom) { - if let transaction { + if let transaction { // will always succed + if transaction.common.type != .dummy { Button(transaction.shouldConfirm ? "Authorize later" : "Done") { dismissTop(stack.push()) } .buttonStyle(TalerButtonStyle(type: transaction.shouldConfirm ? .bordered : .prominent)) .padding(.horizontal) @@ -78,6 +72,7 @@ struct WithdrawAcceptDone: View { .buttonStyle(TalerButtonStyle(type: .bordered)) .padding(.horizontal) } + } } .onAppear() { symLog.log("onAppear") diff --git a/TalerWallet1/Views/Transactions/TransactionSummaryV.swift b/TalerWallet1/Views/Transactions/TransactionSummaryV.swift @@ -30,7 +30,7 @@ struct TransactionSummaryV: View { let stack: CallStack let scope: ScopeInfo? let transactionId: String - let reloadAction: ((_ transactionId: String, _ viewHandles: Bool) async throws -> Transaction) + @Binding var outTransaction: Transaction? let navTitle: String? let hasDone: Bool let abortAction: ((_ transactionId: String, _ viewHandles: Bool) async throws -> Void)? @@ -40,6 +40,7 @@ struct TransactionSummaryV: View { let resumeAction: ((_ transactionId: String, _ viewHandles: Bool) async throws -> Void)? @EnvironmentObject private var controller: Controller + @EnvironmentObject private var model: WalletModel @Environment(\.colorScheme) private var colorScheme @Environment(\.colorSchemeContrast) private var colorSchemeContrast @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode> @@ -58,9 +59,12 @@ struct TransactionSummaryV: View { @Namespace var topID func loadTransaction() async { - if let reloadedTransaction = try? await reloadAction(transactionId, false) { + if let reloadedTransaction = try? await model.getTransactionById(transactionId, viewHandles: false) { symLog.log("reloaded transaction: \(reloadedTransaction.common.txState.major)") withAnimation { transaction = reloadedTransaction; viewId = UUID() } // redraw + if outTransaction != nil { + outTransaction = reloadedTransaction + } } else { withAnimation{ transaction = Transaction(dummyCurrency: DEMOCURRENCY); viewId = UUID() } } diff --git a/TalerWallet1/Views/Transactions/TransactionsListView.swift b/TalerWallet1/Views/Transactions/TransactionsListView.swift @@ -24,7 +24,6 @@ struct TransactionsListView: View { @Binding var transactions: [Transaction] let reloadAllAction: (_ stack: CallStack) async -> () - let reloadOneAction: ((_ transactionId: String, _ viewHandles: Bool) async throws -> Transaction) @EnvironmentObject private var controller: Controller @AppStorage("myListStyle") var myListStyle: MyListStyle = .automatic @@ -42,8 +41,7 @@ struct TransactionsListView: View { stack: stack.push(), scope: scope, transactions: $transactions, - reloadAllAction: reloadAllAction, - reloadOneAction: reloadOneAction) + reloadAllAction: reloadAllAction) .padding(.leading, ICONLEADING) } .id(viewId) @@ -95,9 +93,9 @@ struct TransactionsArraySliceV: View { let scope: ScopeInfo @Binding var transactions: [Transaction] let reloadAllAction: (_ stack: CallStack) async -> () - let reloadOneAction: ((_ transactionId: String, _ viewHandles: Bool) async throws -> Transaction) @EnvironmentObject private var model: WalletModel + @State private var noTransaction: Transaction? = nil var body: some View { #if PRINT_CHANGES @@ -114,7 +112,7 @@ struct TransactionsArraySliceV: View { let destination = TransactionSummaryV(stack: stack.push(), scope: scope, transactionId: transaction.id, - reloadAction: reloadOneAction, + outTransaction: $noTransaction, navTitle: nil, hasDone: false, abortAction: abortAction,