taler-ios

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

commit 711981c917bbc2a7db5beb94ad12ddc0ea122e15
parent f7d84b0914fcb51dfa0f6d4a045e5fffe54cde35
Author: Marc Stibane <marc@taler.net>
Date:   Wed,  5 Mar 2025 09:18:34 +0100

load exchange _once_

Diffstat:
MTalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawAcceptView.swift | 13+++++++++----
MTalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawURIView.swift | 14++++++++------
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 }