WithdrawAcceptDone.swift (4686B)
1 /* 2 * This file is part of GNU Taler, ©2022-25 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 if let transactionId { 55 TransactionSummaryV(stack: stack.push(), 56 // scope: scope, 57 transactionId: transactionId, 58 talerTX: $talerTX, 59 navTitle: navTitle, 60 hasDone: true, 61 abortAction: nil, 62 deleteAction: nil, 63 failAction: nil, 64 suspendAction: nil, 65 resumeAction: nil) 66 .navigationBarBackButtonHidden(true) 67 .interactiveDismissDisabled() // can only use "Done" button to dismiss 68 .navigationTitle(navTitle) 69 .safeAreaInset(edge: .bottom) { 70 let shouldConfirm = talerTX.shouldConfirm 71 if talerTX.common.type != .dummy { 72 Button(shouldConfirm ? "Authorize later" : "Done") { dismissTop(stack.push()) } 73 .buttonStyle(TalerButtonStyle(type: shouldConfirm ? .bordered : .prominent)) 74 .padding(.horizontal) 75 } else { 76 Button("Cancel") { dismissTop(stack.push()) } 77 .buttonStyle(TalerButtonStyle(type: .bordered)) 78 .padding(.horizontal) 79 } 80 } 81 .onAppear() { 82 symLog.log("onAppear") 83 DebugViewC.shared.setSheetID(SHEET_WITHDRAW_AUTHORIZE) 84 } 85 } else { 86 let fallback = String(localized: "Bank Authorization", comment: "loading") 87 LoadingView(stack: stack.push(), scopeInfo: nil, 88 message: exchangeBaseUrl?.trimURL ?? fallback) 89 .task { await viewDidLoad() } 90 } 91 } 92 } 93 // MARK: - 94 #if DEBUG 95 //struct WithdrawAcceptDone_Previews: PreviewProvider { 96 // @MainActor 97 // struct StateContainer: View { 98 // @State private var previewD: CurrencyInfo = CurrencyInfo.zero(DEMOCURRENCY) 99 // @State private var previewT: CurrencyInfo = CurrencyInfo.zero(TESTCURRENCY) 100 // 101 // var body: some View { 102 //// let test = Amount(currency: TESTCURRENCY, cent: 123) 103 //// let demo = Amount(currency: DEMOCURRENCY, cent: 123456) 104 // 105 // WithdrawAcceptDone(stack: CallStack("Preview"), 106 // scope: previewD.scope, 107 // exchangeBaseUrl: DEMOEXCHANGE, 108 // url: URL(string: DEMOSHOP)!, 109 // amountToTransfer: nil) 110 // } 111 // } 112 // 113 // static var previews: some View { 114 // StateContainer() 115 //// .environment(\.sizeCategory, .extraExtraLarge) Canvas Device Settings 116 // } 117 //} 118 #endif