[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taler-ios] 86/204: cleanup
From: |
gnunet |
Subject: |
[taler-taler-ios] 86/204: cleanup |
Date: |
Thu, 05 Dec 2024 23:50:54 +0100 |
This is an automated email from the git hooks/post-receive script.
marc-stibane pushed a commit to branch master
in repository taler-ios.
commit 74a1cc732eda6281354f8ded0c1bd440513b24c6
Author: Marc Stibane <marc@taler.net>
AuthorDate: Sat Oct 19 18:05:35 2024 +0200
cleanup
---
.../Views/Actions/Banking/DepositAmountV.swift | 272 ++++++++++++++-------
.../Views/Actions/Banking/DepositIbanV.swift | 19 +-
2 files changed, 187 insertions(+), 104 deletions(-)
diff --git a/TalerWallet1/Views/Actions/Banking/DepositAmountV.swift
b/TalerWallet1/Views/Actions/Banking/DepositAmountV.swift
index 775e751..3c197ed 100644
--- a/TalerWallet1/Views/Actions/Banking/DepositAmountV.swift
+++ b/TalerWallet1/Views/Actions/Banking/DepositAmountV.swift
@@ -9,20 +9,120 @@ import SwiftUI
import taler_swift
import SymLog
-// Called when tapping "Deposit" in the exchanges list
+// Called from DepositIbanV
struct DepositAmountV: View {
private let symLog = SymLogV(0)
let stack: CallStack
- @Binding var currencyInfo: CurrencyInfo
-
-// let exchangeBaseUrl: String
+ @Binding var selectedBalance: Balance?
+ @Binding var amountLastUsed: Amount
let paytoUri: String?
- let amountAvailable: Amount?
-// @Binding var depositIBAN: String
-// @Binding var accountHolder: String
+
+ @EnvironmentObject private var controller: Controller
+ @EnvironmentObject private var model: WalletModel
+
+ @State private var balanceIndex = 0
+ @State private var balance: Balance? = nil // nil only when balances
== []
+ @State private var currencyInfo = CurrencyInfo.zero(UNKNOWN)
+
+ @State private var amountToTransfer = Amount.zero(currency: EMPTYSTRING)
// Update currency when used
+ @State private var amountAvailable = Amount.zero(currency: EMPTYSTRING)
// GetMaxPeerPushAmount
+
+ var body: some View {
+#if PRINT_CHANGES
+ let _ = Self._printChanges()
+#endif
+ let count = controller.balances.count
+ let _ = symLog.log("count = \(count)")
+ let navTitle = String(localized: "NavTitle_Deposit_Currency",
+ defaultValue: "Deposit", // \(currencySymbol)",
+ comment: "NavTitle: Deposit 'currencySymbol'")
+ let scrollView = ScrollView {
+ if count > 0 {
+ ScopePicker(value: $balanceIndex,
+ onlyNonZero: true)
+ { index in
+ balanceIndex = index
+ balance = controller.balances[index]
+ }
+ .padding(.horizontal)
+ .padding(.bottom, 4)
+ }
+ DepositAmountContent(stack: stack.push(),
+ balance: $balance,
+ balanceIndex: $balanceIndex,
+ amountLastUsed: $amountLastUsed,
+ amountToTransfer: $amountToTransfer,
+ amountAvailable: amountAvailable,
+ currencyInfo: currencyInfo,
+ paytoUri: paytoUri)
+ .environment(\.currencyInfo, currencyInfo)
+ } // ScrollView
+ .navigationTitle(navTitle)
+ .frame(maxWidth: .infinity, alignment: .leading)
+
.background(WalletColors().backgroundColor.edgesIgnoringSafeArea(.all))
+ .onAppear {
+ DebugViewC.shared.setViewID(VIEW_DEPOSIT, stack: stack.push())
+ symLog.log("❗️ \(navTitle) onAppear")
+ }
+ .onDisappear {
+ symLog.log("❗️ \(navTitle) onDisappear")
+ }
+ .task {
+ if let selectedBalance {
+ if selectedBalance.available.isZero {
+ // find another balance
+ balance = Balance.firstNonZero(controller.balances)
+ } else {
+ balance = selectedBalance
+ }
+ } else {
+ balance = Balance.firstNonZero(controller.balances)
+ }
+ if let balance {
+ balanceIndex = controller.balances.firstIndex(of: balance)
?? 0
+ } else {
+ balanceIndex = 0
+ balance = (count > 0) ? controller.balances[0] : nil
+ }
+ }
+ .task(id: balanceIndex + (1000 * controller.currencyTicker)) {
+ symLog.log("❗️ task \(balanceIndex)")
+ if let balance {
+ let scopeInfo = balance.scopeInfo
+ amountToTransfer.setCurrency(scopeInfo.currency)
+ currencyInfo = controller.info(for: scopeInfo,
controller.currencyTicker)
+ do {
+ amountAvailable = try await
model.getMaxPeerPushDebitAmountM(scopeInfo)
+ } catch {
+ // TODO: Error
+ amountAvailable = balance.available
+ }
+ }
+ }
+
+ if #available(iOS 16.0, *) {
+ if #available(iOS 16.4, *) {
+ scrollView.toolbar(.hidden, for: .tabBar)
+ .scrollBounceBehavior(.basedOnSize)
+ } else {
+ scrollView.toolbar(.hidden, for: .tabBar)
+ }
+ } else {
+ scrollView
+ }
+ }
+}
+// MARK: -
+struct DepositAmountContent: View {
+ private let symLog = SymLogV(0)
+ let stack: CallStack
+ @Binding var balance: Balance?
+ @Binding var balanceIndex: Int
+ @Binding var amountLastUsed: Amount
@Binding var amountToTransfer: Amount
- let amountLastUsed: Amount
-// let scopeInfo: ScopeInfo
+ let amountAvailable: Amount
+ let currencyInfo: CurrencyInfo
+ let paytoUri: String?
@EnvironmentObject private var controller: Controller
@EnvironmentObject private var model: WalletModel
@@ -35,21 +135,8 @@ struct DepositAmountV: View {
@State private var feeAmount: Amount? = nil
@State private var feeStr: String = EMPTYSTRING
@State private var depositStarted = false
- @State private var amountShortcut = Amount.zero(currency: EMPTYSTRING)
// Update currency when used
@State private var exchange: Exchange? = nil
// wg. noFees
- private func fee(ppCheck: CheckDepositResult?) -> Amount? {
- do {
- if let ppCheck {
- // Outgoing: fee = effective - raw
- feeAmount = try ppCheck.fees.coin + ppCheck.fees.wire +
ppCheck.fees.refresh
- return feeAmount
- }
- } catch {}
- feeAmount = nil
- return feeAmount
- }
-
private func feeLabel(_ feeString: String) -> String {
feeString.count > 0 ? String(localized: "+ \(feeString) fee")
: EMPTYSTRING
@@ -61,20 +148,41 @@ struct DepositAmountV: View {
return nil // this exchange never has fees
}
}
- return checkDepositResult != nil ? (!(feeAmount?.isZero ?? false))
- : false
+ return checkDepositResult == nil ? false
+ : true // TODO: !(feeAmount?.isZero
?? false)
+ }
+
+ private func computeFeeDeposit(_ amount: Amount) async ->
ComputeFeeResult? {
+ if amount.isZero {
+ return ComputeFeeResult.zero()
+ }
+ let insufficient = (try? amount > amountAvailable) ?? true
+ if insufficient {
+ return ComputeFeeResult.insufficient()
+ }
+// private func fee(ppCheck: CheckDepositResult?) -> Amount? {
+ do {
+// if let ppCheck {
+// // Outgoing: fee = effective - raw
+// feeAmount = try ppCheck.fees.coin + ppCheck.fees.wire +
ppCheck.fees.refresh
+// return feeAmount
+// }
+ } catch {
+
+ }
+ return nil
}
private func buttonTitle(_ amount: Amount) -> String {
let amountWithCurrency = amount.formatted(currencyInfo, isNegative:
false, useISO: true)
- return String(localized: "Deposit \(amountWithCurrency)", comment:
"amount with currency")
+ return String(localized: "Deposit \(amountWithCurrency)", comment:
"Button: amount with currency")
}
private func subjectTitle(_ amount: Amount) -> String {
let amountStr = amount.formatted(currencyInfo, isNegative: false)
return String(localized: "NavTitle_Deposit_AmountStr",
defaultValue: "Deposit", comment: "NavTitle: Deposit")
- // defaultValue: "Deposit \(amountStr)", comment:
"NavTitle: Deposit 'amountStr'")
+ // defaultValue: "Deposit \(amountStr)", comment:
"NavTitle: Deposit 'amountStr'")
}
var body: some View {
@@ -86,26 +194,18 @@ struct DepositAmountV: View {
LoadingView(scopeInfo: nil, message: "Depositing...")
.navigationBarBackButtonHidden(true)
.interactiveDismissDisabled() // can only use "Done"
button to dismiss
- } else {
- let currency = amountToTransfer.currencyStr
- let currencySymbol = currencyInfo.altUnitSymbol ??
currencyInfo.specs.name
- let navTitle = String(localized: "NavTitle_Deposit_Currency",
- defaultValue: "Deposit \(currencySymbol)",
- comment: "NavTitle: Deposit
'currencySymbol'")
- let available = amountAvailable?.formatted(currencyInfo,
isNegative: false) ?? "an unknown amount"
- let _ = print("available: \(available)")
- let _ = symLog.log("currency: \(currencyInfo.specs.name),
available: \(available)")
- let amountVoiceOver = amountToTransfer.formatted(currencyInfo,
isNegative: false)
- let insufficientLabel = String(localized: "You don't have enough
\(currencyInfo.specs.name).")
- let insufficientLabel2 = String(localized: "but you only have
\(available) to deposit.")
+ } else { Group {
+ if let balance {
+ let scopeInfo = balance.scopeInfo
+ let availableStr = amountAvailable.formatted(currencyInfo,
isNegative: false)
+
+// let amountVoiceOver =
amountToTransfer.formatted(currencyInfo, isNegative: false)
+ let insufficientLabel = String(localized: "You don't have
enough \(currencyInfo.specs.name).")
+// let insufficientLabel2 = String(localized: "but you only
have \(available) to deposit.")
let disabled = insufficient || amountToTransfer.isZero
- ScrollView { VStack(alignment: .trailing) {
-// Text("via \(exchange.exchangeBaseUrl.trimURL)")
-// .multilineTextAlignment(.center)
-// .talerFont(.body)
- Text("Available:\t\(available)")
+ Text("Available:\t\(availableStr)")
.talerFont(.title3)
.padding(.bottom, 2)
CurrencyInputView(currencyInfo: currencyInfo,
@@ -141,55 +241,47 @@ struct DepositAmountV: View {
.buttonStyle(TalerButtonStyle(type: .prominent, disabled:
disabled || depositStarted))
.disabled(disabled || depositStarted)
.accessibilityHint(disabled ? String(localized: "enabled when
amount is non-zero, but not higher than your available amount") : EMPTYSTRING)
- }.padding(.horizontal) } // ScrollVStack
- .frame(maxWidth: .infinity, alignment: .leading)
-// .scrollBounceBehavior(.basedOnSize) needs iOS 16.4
-
.background(WalletColors().backgroundColor.edgesIgnoringSafeArea(.all))
- .navigationTitle(navTitle)
- .onAppear {
- DebugViewC.shared.setViewID(VIEW_DEPOSIT, stack: stack.push())
- symLog.log("❗️ \(navTitle) onAppear")
- }
- .onDisappear {
- symLog.log("❗️ \(navTitle) onDisappear")
- }
- .task(id: amountToTransfer.value) {
- if let amountAvailable {
- do {
- insufficient = try amountToTransfer > amountAvailable
- } catch {
- print("Yikes❗️ insufficient failed❗️")
- insufficient = true
- }
-
- if insufficient {
- announce("\(amountVoiceOver), \(insufficientLabel2)")
- feeStr = EMPTYSTRING
- }
- }
- if !insufficient {
- if amountToTransfer.isZero {
- feeStr = EMPTYSTRING
- checkDepositResult = nil
- } else if let paytoUri {
- if let ppCheck = try? await
model.checkDepositM(paytoUri, amount: amountToTransfer) {
- if let feeAmount = fee(ppCheck: ppCheck) {
- feeStr = feeAmount.formatted(currencyInfo,
isNegative: false)
- let feeLabel = feeLabel(feeStr)
- announce("\(amountVoiceOver), \(feeLabel)")
- } else {
- feeStr = EMPTYSTRING
- announce(amountVoiceOver)
- }
- checkDepositResult = ppCheck
- } else {
- checkDepositResult = nil
- }
- }
- }
+ } else { // no balance - Yikes
+ Text("No balance. There seems to be a problem with the
database...")
}
}
- }
+// .task(id: amountToTransfer.value) {
+// if let amountAvailable {
+// do {
+// insufficient = try amountToTransfer > amountAvailable
+// } catch {
+// print("Yikes❗️ insufficient failed❗️")
+// insufficient = true
+// }
+//
+// if insufficient {
+// announce("\(amountVoiceOver), \(insufficientLabel2)")
+// feeStr = EMPTYSTRING
+// }
+// }
+// if !insufficient {
+// if amountToTransfer.isZero {
+// feeStr = EMPTYSTRING
+// checkDepositResult = nil
+// } else if let paytoUri {
+// if let ppCheck = try? await
model.checkDepositM(paytoUri, amount: amountToTransfer) {
+// if let feeAmount = fee(ppCheck: ppCheck) {
+// feeStr = feeAmount.formatted(currencyInfo,
isNegative: false)
+// let feeLabel = feeLabel(feeStr)
+// announce("\(amountVoiceOver), \(feeLabel)")
+// } else {
+// feeStr = EMPTYSTRING
+// announce(amountVoiceOver)
+// }
+// checkDepositResult = ppCheck
+// } else {
+// checkDepositResult = nil
+// }
+// }
+// }
+// }
+ } // else
+ } // body
}
// MARK: -
#if DEBUG
diff --git a/TalerWallet1/Views/Actions/Banking/DepositIbanV.swift
b/TalerWallet1/Views/Actions/Banking/DepositIbanV.swift
index 143e0bc..d6cbc00 100644
--- a/TalerWallet1/Views/Actions/Banking/DepositIbanV.swift
+++ b/TalerWallet1/Views/Actions/Banking/DepositIbanV.swift
@@ -47,8 +47,6 @@ struct DepositIbanV: View {
}
private var subjectTitle: String {
-// let currencyName = currencyInfo.scope.currency
-// let currencySymbol = currencyInfo.altUnitSymbol ?? currencyName
return String(localized: "NavTitle_Deposit_AmountStr",
// defaultValue: "Deposit \(currencySymbol)",
defaultValue: "Deposit IBAN",
@@ -59,19 +57,12 @@ struct DepositIbanV: View {
var body: some View {
#if PRINT_CHANGES
let _ = Self._printChanges()
- let _ = symLog.vlog(amountToTransfer.readableDescription) //
just to get the # to compare it with .onAppear & onDisappear
+ let _ = symLog.vlog(amountToTransfer.readableDescription) //
just to get the #
#endif
- let destination = LazyView {
- DepositAmountV(stack: stack.push(),
- currencyInfo: $currencyInfo,
- paytoUri: paytoUri,
-// exchangeBaseUrl: baseURL,
- amountAvailable: amountAvailable,
-// depositIBAN: $depositIBAN,
-// accountHolder: $accountHolder,
- amountToTransfer: $amountToTransfer,
- amountLastUsed: amountLastUsed)
- }
+ let destination = DepositAmountV(stack: stack.push(),
+ selectedBalance: $selectedBalance,
+ amountLastUsed: $amountLastUsed,
+ paytoUri: paytoUri)
ScrollView { VStack (alignment: .leading, spacing: 6) {
if let feeIsNotZero { // don't show fee if nil
let label = feeLabel ?? myFeeLabel
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-taler-ios] 100/204: Minimalistic date, (continued)
- [taler-taler-ios] 100/204: Minimalistic date, gnunet, 2024/12/05
- [taler-taler-ios] 93/204: cleanup, gnunet, 2024/12/05
- [taler-taler-ios] 103/204: add amount, gnunet, 2024/12/05
- [taler-taler-ios] 76/204: CurrencySpecification, gnunet, 2024/12/05
- [taler-taler-ios] 88/204: cleanup, gnunet, 2024/12/05
- [taler-taler-ios] 74/204: - currencyName, gnunet, 2024/12/05
- [taler-taler-ios] 83/204: Comments, gnunet, 2024/12/05
- [taler-taler-ios] 89/204: cleanup, gnunet, 2024/12/05
- [taler-taler-ios] 92/204: take out scroll-end-buttons, gnunet, 2024/12/05
- [taler-taler-ios] 96/204: cleanup, gnunet, 2024/12/05
- [taler-taler-ios] 86/204: cleanup,
gnunet <=
- [taler-taler-ios] 91/204: scope instead of currencyInfo, gnunet, 2024/12/05
- [taler-taler-ios] 94/204: wording, gnunet, 2024/12/05
- [taler-taler-ios] 98/204: - LazyView, gnunet, 2024/12/05
- [taler-taler-ios] 95/204: - proposalId, gnunet, 2024/12/05
- [taler-taler-ios] 99/204: wording, gnunet, 2024/12/05
- [taler-taler-ios] 97/204: TransactionCommon, row, gnunet, 2024/12/05
- [taler-taler-ios] 101/204: CheckDepositResponse, gnunet, 2024/12/05
- [taler-taler-ios] 104/204: split, gnunet, 2024/12/05
- [taler-taler-ios] 107/204: debug, fix wrong comparison, gnunet, 2024/12/05
- [taler-taler-ios] 102/204: task viewDidLoad, gnunet, 2024/12/05