commit 482006cce9a26c4be42303dde94d0379f2ffd03e
parent 4fcc0b7d2974f414fe3d5b2d36a0254bf8748496
Author: Marc Stibane <marc@taler.net>
Date: Mon, 25 Nov 2024 20:35:33 +0100
getTransactionById
Diffstat:
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,