taler-ios

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

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