ManualWithdrawDone.swift (4284B)
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 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 Group { 52 if let transactionId { 53 TransactionSummaryV(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 abortAction: nil, 60 deleteAction: nil, 61 failAction: nil, 62 suspendAction: nil, 63 resumeAction: nil) 64 .navigationBarBackButtonHidden(true) 65 .interactiveDismissDisabled() // can only use "Done" button to dismiss 66 // .navigationTitle(navTitle) 67 .safeAreaInset(edge: .bottom) { 68 Button("Done") { dismissTop(stack.push()) } 69 .buttonStyle(TalerButtonStyle(type: .prominent)) 70 .padding(.horizontal) 71 } 72 } else { 73 LoadingView(stack: stack.push(), scopeInfo: nil, message: baseURL.trimURL) 74 .task { await viewDidLoad() } 75 } 76 } 77 .onAppear() { 78 symLog.log("onAppear") 79 DebugViewC.shared.setViewID(VIEW_WITHDRAW_ACCEPT, stack: stack.push()) 80 } 81 } 82 } 83 84 // MARK: - 85 #if DEBUG 86 fileprivate struct ManualWithdrawDone_Previews: PreviewProvider { 87 @MainActor 88 struct BindingViewContainer : View { 89 @State private var amountToTransfer = Amount(currency: LONGCURRENCY, cent: 510) 90 @State private var previewD: CurrencyInfo = CurrencyInfo.zero(DEMOCURRENCY) 91 92 var body: some View { 93 let scopeInfo = ScopeInfo(type: .exchange, currency: LONGCURRENCY) 94 let exchange = Exchange(exchangeBaseUrl: DEMOEXCHANGE, 95 masterPub: "masterPub", 96 scopeInfo: scopeInfo, 97 paytoUris: [], 98 tosStatus: .pending, 99 exchangeEntryStatus: .preset, 100 exchangeUpdateStatus: .initial, 101 ageRestrictionOptions: []) 102 ManualWithdrawDone(stack: CallStack("Preview"), 103 url: URL("taler://withdraw"), 104 // scope: scopeInfo, 105 baseURL: DEMOEXCHANGE, 106 amountToTransfer: amountToTransfer) 107 } 108 } 109 110 static var previews: some View { 111 BindingViewContainer() 112 } 113 } 114 #endif