ManualWithdrawDone.swift (3750B)
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 ManualWithdrawDone: View { 13 private let symLog = SymLogV(0) 14 let stack: CallStack 15 // let scope: ScopeInfo // TODO: use data from tx itself 16 17 let url: URL? 18 let baseURL: String 19 let amountToTransfer: Amount 20 // let restrictAge: Int? 21 22 @EnvironmentObject private var controller: Controller 23 @EnvironmentObject private var model: WalletModel 24 25 @State private var acceptManualWithdrawalResult: AcceptManualWithdrawalResult? 26 @State private var transactionId: String? 27 @State private var talerTX: TalerTransaction = TalerTransaction(dummyCurrency: DEMOCURRENCY) 28 29 let navTitle = String(localized: "Wire Transfer") 30 31 @MainActor 32 private func viewDidLoad() async { 33 if transactionId == nil { 34 if let result = try? await model.acceptManualWithdrawal(amountToTransfer, 35 baseUrl: baseURL, 36 restrictAge: 0) 37 { 38 if let url { 39 controller.removeURL(url) 40 } 41 transactionId = result.transactionId 42 } 43 } 44 } 45 46 var body: some View { 47 #if PRINT_CHANGES 48 let _ = Self._printChanges() 49 let _ = symLog.vlog() // just to get the # to compare it with .onAppear & onDisappear 50 #endif 51 ZStack { 52 if let transactionId { 53 TransactionSummaryList(stack: stack.push(), 54 // scope: scope, // TODO: use data from tx itself 55 transactionId: transactionId, 56 talerTX: $talerTX, 57 navTitle: navTitle, 58 hasDone: true, 59 showDone: .prominent, 60 url: nil, 61 withActions: false) 62 } else { 63 LoadingView(stack: stack.push(), scopeInfo: nil, message: baseURL.trimURL) 64 .task { await viewDidLoad() } 65 } 66 }.onAppear() { 67 symLog.log("onAppear") 68 DebugViewC.shared.setViewID(VIEW_WITHDRAW_ACCEPT, stack: stack.push()) 69 } 70 } 71 } 72 73 // MARK: - 74 #if DEBUG 75 fileprivate struct ManualWithdrawDone_Previews: PreviewProvider { 76 @MainActor 77 struct BindingViewContainer : View { 78 @State private var amountToTransfer = Amount(currency: LONGCURRENCY, cent: 510) 79 @State private var previewD: CurrencyInfo = CurrencyInfo.zero(DEMOCURRENCY) 80 81 var body: some View { 82 let scopeInfo = ScopeInfo(type: .exchange, currency: LONGCURRENCY) 83 let exchange = Exchange(exchangeBaseUrl: DEMOEXCHANGE, 84 masterPub: "masterPub", 85 scopeInfo: scopeInfo, 86 paytoUris: [], 87 tosStatus: .pending, 88 exchangeEntryStatus: .preset, 89 exchangeUpdateStatus: .initial, 90 ageRestrictionOptions: []) 91 ManualWithdrawDone(stack: CallStack("Preview"), 92 url: URL("taler://withdraw"), 93 // scope: scopeInfo, 94 baseURL: DEMOEXCHANGE, 95 amountToTransfer: amountToTransfer) 96 } 97 } 98 99 static var previews: some View { 100 BindingViewContainer() 101 } 102 } 103 #endif