taler-ios

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

DepositSelectV.swift (4367B)


      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             }
     66             if bankAccounts.isEmpty {
     67                 Section {
     68                     let bankAccountsTitle = String(localized: "TitleBankAccounts", defaultValue: "Bank Accounts")
     69                     let bankAccountsDest = BankListView(stack: stack.push(bankAccountsTitle),
     70                                                         navTitle: bankAccountsTitle)
     71                     NavigationLink {        // whole row like in a tableView
     72                         bankAccountsDest
     73                     } label: {
     74                         SettingsItem(name: bankAccountsTitle, id1: "bankAccounts",
     75                               description: minimalistic ? nil : String(localized: "Your accounts for deposit...")) {}
     76                     }
     77                 }
     78             } else {
     79                 ForEach(bankAccounts, id: \.self) { account in
     80 //                  let disabled = (accountHolder.count < 1) || paytoUri == nil    // TODO: check amountAvailable
     81                     BankSectionView(stack: stack.push(),
     82                                   account: account,
     83                           selectedBalance: selectedBalance,
     84                            amountLastUsed: $amountLastUsed,
     85                                  goToEdit: false)
     86                 }
     87             }
     88         }
     89         .listStyle(myListStyle.style).anyView
     90         .refreshable {
     91             controller.hapticNotification(.success)
     92             symLog.log("refreshing")
     93             await viewDidLoad()
     94         }
     95         .task { 
     96             setVoice(to: nil)
     97             await viewDidLoad()
     98         }
     99         .navigationTitle(subjectTitle)
    100         .onAppear {
    101             DebugViewC.shared.setViewID(VIEW_DEPOSIT_ACCEPT, stack: stack.push())
    102 //            symLog.log("❗️ DepositSelectV onAppear")
    103         }
    104         .onDisappear {
    105 //            symLog.log("❗️ DepositSelectV onDisappear")
    106         }
    107 //        .task(id: depositIBAN) { await validateIban() }
    108     }
    109 }
    110 // MARK: -
    111 #if DEBUG
    112 #endif