taler-ios

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

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