WithdrawAcceptDone.swift (4434B)
1 /* 2 * This file is part of GNU Taler, ©2022-26 Taler Systems S.A. 3 * See LICENSE.md 4 */ 5 /** 6 * @author Marc Stibane 7 */ 8 import SwiftUI 9 import taler_swift 10 import SymLog 11 12 struct WithdrawAcceptDone: View { 13 private let symLog = SymLogV(0) 14 let stack: CallStack 15 // let scope: ScopeInfo 16 let exchangeBaseUrl: String? 17 let url: URL 18 let amountToTransfer: Amount? 19 20 @EnvironmentObject private var controller: Controller 21 @EnvironmentObject private var model: WalletModel 22 23 @State private var transactionId: String? = nil 24 @State private var talerTX: TalerTransaction = TalerTransaction(dummyCurrency: DEMOCURRENCY) 25 26 let navTitle = String(localized: "Authorize at Bank", comment: "Nav title") 27 28 @MainActor 29 private func viewDidLoad() async { 30 if let exchangeBaseUrl { 31 // TODO: restrictAge 32 if let result = try? await model.acceptBankIntWithdrawal(exchangeBaseUrl, 33 withdrawURL: url.absoluteString, 34 amount: amountToTransfer, 35 restrictAge: nil 36 ) { 37 controller.removeURL(url) 38 let confirmTransferUrl = result.confirmTransferUrl 39 symLog.log(confirmTransferUrl) 40 if amountToTransfer == nil { 41 dismissTop(stack.push()) 42 } else { 43 transactionId = result.transactionId 44 } 45 } 46 } 47 } 48 49 var body: some View { 50 #if PRINT_CHANGES 51 let _ = Self._printChanges() 52 let _ = symLog.vlog() // just to get the # to compare it with .onAppear & onDisappear 53 #endif 54 ZStack { 55 if let transactionId { 56 TransactionSummaryList(stack: stack.push(), 57 // scope: scope, 58 transactionId: transactionId, 59 talerTX: $talerTX, 60 navTitle: navTitle, 61 hasDone: true, 62 showDone: nil, 63 url: nil, 64 withActions: false) 65 .safeAreaInset(edge: .bottom) { 66 let shouldConfirm = talerTX.shouldConfirm 67 if talerTX.common.type != .dummy { 68 Button(shouldConfirm ? "Authorize later" : "Done") { dismissTop(stack.push()) } 69 .buttonStyle(TalerButtonStyle(type: shouldConfirm ? .bordered : .prominent)) 70 .padding(.horizontal) 71 } else { 72 Button("Cancel") { dismissTop(stack.push()) } 73 .buttonStyle(TalerButtonStyle(type: .bordered)) 74 .padding(.horizontal) 75 } 76 } 77 } else { 78 let fallback = String(localized: "Bank Authorization", comment: "loading") 79 LoadingView(stack: stack.push(), 80 scopeInfo: nil, 81 message: exchangeBaseUrl?.trimURL ?? fallback) 82 .task { await viewDidLoad() } 83 } 84 }.onAppear() { 85 symLog.log("onAppear") 86 DebugViewC.shared.setSheetID(SHEET_WITHDRAW_AUTHORIZE) 87 } 88 } 89 } 90 // MARK: - 91 #if DEBUG 92 //struct WithdrawAcceptDone_Previews: PreviewProvider { 93 // @MainActor 94 // struct StateContainer: View { 95 // @State private var previewD: CurrencyInfo = CurrencyInfo.zero(DEMOCURRENCY) 96 // @State private var previewT: CurrencyInfo = CurrencyInfo.zero(TESTCURRENCY) 97 // 98 // var body: some View { 99 //// let test = Amount(currency: TESTCURRENCY, cent: 123) 100 //// let demo = Amount(currency: DEMOCURRENCY, cent: 123456) 101 // 102 // WithdrawAcceptDone(stack: CallStack("Preview"), 103 // scope: previewD.scope, 104 // exchangeBaseUrl: DEMOEXCHANGE, 105 // url: URL(string: DEMOSHOP)!, 106 // amountToTransfer: nil) 107 // } 108 // } 109 // 110 // static var previews: some View { 111 // StateContainer() 112 //// .environment(\.sizeCategory, .extraExtraLarge) Canvas Device Settings 113 // } 114 //} 115 #endif