taler-ios

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

DepositSelectV.swift (4377B)


      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 // Called when tapping [􁾩Deposit]
     13 // user chooses a bank account
     14 struct DepositSelectV: View {
     15     private let symLog = SymLogV(0)
     16     let stack: CallStack
     17     // when Action is tapped while in currency TransactionList…
     18     let selectedBalance: Balance?   // …then use THIS balance, otherwise show picker
     19     @Binding var amountLastUsed: Amount
     20 
     21 //    let amountAvailable: Amount?
     22 //    @Binding var depositIBAN: String
     23 
     24     @EnvironmentObject private var controller: Controller
     25     @EnvironmentObject private var model: WalletModel
     26     @Environment(\.colorScheme) private var colorScheme
     27     @Environment(\.colorSchemeContrast) private var colorSchemeContrast
     28     @AppStorage("minimalistic") var minimalistic: Bool = false
     29     @AppStorage("depositIBAN") var depositIBAN: String = EMPTYSTRING
     30     @AppStorage("myListStyle") var myListStyle: MyListStyle = .automatic
     31 
     32     @State private var myFeeLabel: String = EMPTYSTRING
     33     @State private var transactionStarted: Bool = false
     34     @FocusState private var isFocused: Bool
     35     @State private var currencyName: String = UNKNOWN
     36     @State private var currencySymbol: String = UNKNOWN
     37     @State private var amountAvailable = Amount.zero(currency: EMPTYSTRING)    // Update currency when used
     38     @State private var amountToTransfer = Amount.zero(currency: EMPTYSTRING)    // Update currency when used
     39     @State private var bankAccounts: [BankAccountsInfo] = []
     40 
     41 
     42     private var subjectTitle: String {
     43         return String(localized: "NavTitle_Deposit_Select",
     44                    defaultValue: "Select account",
     45                         comment: "NavTitle: Deposit")
     46     }
     47 
     48     @MainActor
     49     private func viewDidLoad() async {
     50         if let accounts = try? await model.listBankAccounts() {
     51             withAnimation { bankAccounts = accounts }
     52         }
     53     }
     54 
     55     var body: some View {
     56 #if PRINT_CHANGES
     57         let _ = Self._printChanges()
     58         let _ = symLog.vlog(amountToTransfer.readableDescription)       // just to get the #
     59 #endif
     60         let depositHint = Text("You can only deposit to a bank account that you control, otherwise you will not be able to fulfill the regulatory requirements.")
     61 
     62         List {
     63             Section {
     64                 depositHint
     65                     .talerFont(.body)
     66             }
     67             if bankAccounts.isEmpty {
     68                 Section {
     69                     let bankAccountsTitle = String(localized: "TitleBankAccounts", defaultValue: "Bank Accounts")
     70                     let bankAccountsDest = BankListView(stack: stack.push(bankAccountsTitle),
     71                                                         navTitle: bankAccountsTitle)
     72                     NavigationLink {        // whole row like in a tableView
     73                         bankAccountsDest
     74                     } label: {
     75                         SettingsItem(name: bankAccountsTitle, id1: "bankAccounts",
     76                               description: String(localized: "Your accounts for deposit")) {}
     77                     }
     78                 }
     79             } else {
     80                 ForEach(bankAccounts, id: \.self) { account in
     81 //                  let disabled = accountHolder.isEmpty || paytoUri == nil    // TODO: check amountAvailable
     82                     BankSectionView(stack: stack.push(),
     83                                   account: account,
     84                           selectedBalance: selectedBalance,
     85                            amountLastUsed: $amountLastUsed,
     86                                  goToEdit: false)
     87                 }
     88             }
     89         }
     90         .listStyle(myListStyle.style).anyView
     91         .refreshable {
     92             controller.hapticNotification(.success)
     93             symLog.log("refreshing")
     94             await viewDidLoad()
     95         }
     96         .task { 
     97             setVoice(to: nil)
     98             await viewDidLoad()
     99         }
    100         .navigationTitle(subjectTitle)
    101         .onAppear {
    102             DebugViewC.shared.setViewID(VIEW_DEPOSIT_ACCEPT, stack: stack.push())
    103 //            symLog.log("❗️ DepositSelectV onAppear")
    104         }
    105         .onDisappear {
    106 //            symLog.log("❗️ DepositSelectV onDisappear")
    107         }
    108 //        .task(id: depositIBAN) { await validateIban() }
    109     }
    110 }
    111 // MARK: -
    112 #if DEBUG
    113 #endif