commit 711981c917bbc2a7db5beb94ad12ddc0ea122e15
parent f7d84b0914fcb51dfa0f6d4a045e5fffe54cde35
Author: Marc Stibane <marc@taler.net>
Date: Wed, 5 Mar 2025 09:18:34 +0100
load exchange _once_
Diffstat:
2 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawAcceptView.swift b/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawAcceptView.swift
@@ -19,7 +19,7 @@ struct WithdrawAcceptView: View {
let scope: ScopeInfo
@Binding var amountToTransfer: Amount
@Binding var wireFee: Amount?
- @Binding var exchange: Exchange?
+ @Binding var exchange: Exchange? // user can select one from possibleExchanges
@EnvironmentObject private var controller: Controller
@EnvironmentObject private var model: WalletModel
@@ -57,7 +57,8 @@ struct WithdrawAcceptView: View {
let _ = Self._printChanges()
let _ = symLog.vlog(scope.url ?? amountToTransfer.readableDescription) // just to get the #
#endif
- if let exchange2 = exchange {
+ ZStack { // there is only _one_ Z item ever - use ZStack to ensure .task is run only _once_ when exchange is switched
+ if let exchange2 = exchange { // there should always be an exchange...
VStack {
let tosAccepted = exchange2.tosStatus == .accepted
if !tosAccepted {
@@ -129,14 +130,18 @@ struct WithdrawAcceptView: View {
symLog.log("onAppear")
DebugViewC.shared.setSheetID(SHEET_WITHDRAW_ACCEPT) // 132 WithdrawAcceptView
}
- } else { // no details or no exchange
+ } else { // no exchange - should not happen
#if DEBUG
let message = url.host
#else
let message: String? = nil
#endif
+ let _ = symLog.log("Loading")
LoadingView(stack: stack.push(), scopeInfo: nil, message: message)
- .task(id: exchange?.id) { await viewDidLoad() }
+ }
+ }
+ .task(id: exchange?.id) { // re-run this whenever the user switches the exchange
+ await viewDidLoad()
}
}
}
diff --git a/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawURIView.swift b/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawURIView.swift
@@ -110,11 +110,13 @@ struct WithdrawURIView: View {
defaultExchangeBaseUrl = uriInfoResponse.defaultExchangeBaseUrl
possibleExchanges = uriInfoResponse.possibleExchanges
- await loadExchange(baseUrl)
- symLog.log("\(baseUrl.trimURL) loaded")
+// await loadExchange(baseUrl) <- checkCurrencyInfo now returns the exchange
+// symLog.log("\(baseUrl.trimURL) loaded")
- await controller.checkCurrencyInfo(for: baseUrl, model: model)
- symLog.log("Info(for: \(baseUrl.trimURL) loaded")
+ if let someExchange = try? await controller.checkCurrencyInfo(for: baseUrl, model: model) {
+ symLog.log("Info(for: \(baseUrl.trimURL) loaded")
+ exchange = someExchange
+ }
} catch {
// TODO: error, dismiss
}
@@ -148,7 +150,7 @@ struct WithdrawURIView: View {
scope: exchange2.scopeInfo,
amountToTransfer: $amountToTransfer,
wireFee: $wireFee,
- exchange: $exchange)
+ exchange: $exchange) // from possibleExchanges
if amountIsEditable {
ScrollView {
let shortcutDest = WithdrawAcceptView(stack: stack.push(),
@@ -156,7 +158,7 @@ struct WithdrawURIView: View {
scope: exchange2.scopeInfo,
amountToTransfer: $amountShortcut,
wireFee: $wireFee,
- exchange: $exchange)
+ exchange: $exchange) // from possibleExchanges
let actions = Group {
NavLink($shortcutSelected) { shortcutDest }
NavLink($buttonSelected) { acceptDestination }