taler-ios

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

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