summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Stibane <marc@taler.net>2023-11-19 13:48:50 +0100
committerMarc Stibane <marc@taler.net>2023-11-19 13:54:08 +0100
commitc0cf8461feaf8cb84d0686f1d72617ebb40e73f9 (patch)
tree9f1ed297647c5d707fffd0d2a100d8d5a394c35c
parentdedf6a3e6ec2d6e087c69d3aff9b54305d624af4 (diff)
downloadtaler-ios-c0cf8461feaf8cb84d0686f1d72617ebb40e73f9.tar.gz
taler-ios-c0cf8461feaf8cb84d0686f1d72617ebb40e73f9.tar.bz2
taler-ios-c0cf8461feaf8cb84d0686f1d72617ebb40e73f9.zip
DD51 for fee
-rw-r--r--TalerWallet1/Views/Exchange/ManualWithdraw.swift3
-rw-r--r--TalerWallet1/Views/Exchange/QuiteSomeCoins.swift34
-rw-r--r--TalerWallet1/Views/Peer2peer/RequestPayment.swift9
-rw-r--r--TalerWallet1/Views/Peer2peer/RequestPurpose.swift9
-rw-r--r--TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawURIView.swift14
5 files changed, 40 insertions, 29 deletions
diff --git a/TalerWallet1/Views/Exchange/ManualWithdraw.swift b/TalerWallet1/Views/Exchange/ManualWithdraw.swift
index 7071931..b1e4bd5 100644
--- a/TalerWallet1/Views/Exchange/ManualWithdraw.swift
+++ b/TalerWallet1/Views/Exchange/ManualWithdraw.swift
@@ -14,6 +14,7 @@ struct ManualWithdraw: View {
let exchange: Exchange
@Binding var amountToTransfer: Amount
+ @EnvironmentObject private var controller: Controller
@EnvironmentObject private var model: WalletModel
@AppStorage("iconOnly") var iconOnly: Bool = false
@@ -27,6 +28,7 @@ struct ManualWithdraw: View {
let _ = symLog.vlog() // just to get the # to compare it with .onAppear & onDisappear
#endif
let currency = exchange.scopeInfo?.currency ?? exchange.currency ?? String(localized: "Unknown", comment: "unknown currency")
+ let currencyInfo = controller.info(for: currency, controller.currencyTicker)
let navTitle = String(localized: "NavTitle_Withdraw (currency)", defaultValue: "Withdraw \(currency)")
// let agePicker = AgePicker(ageMenuList: $ageMenuList, selectedAge: $selectedAge)
@@ -40,6 +42,7 @@ struct ManualWithdraw: View {
QuiteSomeCoins(someCoins: someCoins,
shouldShowFee: true, // TODO: set to false if we never charge withdrawal fees
currency: currency,
+ currencyInfo: currencyInfo,
amountEffective: withdrawalAmountDetails?.amountEffective)
Text(exchange.exchangeBaseUrl.trimURL())
.multilineTextAlignment(.center)
diff --git a/TalerWallet1/Views/Exchange/QuiteSomeCoins.swift b/TalerWallet1/Views/Exchange/QuiteSomeCoins.swift
index f1e5589..a0376f2 100644
--- a/TalerWallet1/Views/Exchange/QuiteSomeCoins.swift
+++ b/TalerWallet1/Views/Exchange/QuiteSomeCoins.swift
@@ -14,8 +14,7 @@ struct SomeCoins {
var quiteSome: Bool { numCoins > 199 }
var tooMany: Bool { numCoins > 999 }
- let fee: String
- var hasFee: Bool { fee.count > 0 }
+ let fee: Amount?
}
extension SomeCoins {
@@ -23,26 +22,26 @@ extension SomeCoins {
do {
if let details {
// Incoming: fee = raw - effective
- let fee = try details.amountRaw - details.amountEffective
+ let aFee = try details.amountRaw - details.amountEffective
self.init(numCoins: details.numCoins ?? -1, // either the number of coins, or unknown
- fee: fee.isZero ? "" : fee.readableDescription)
+ fee: aFee)
return
}
} catch {}
- self.init(numCoins: 0, fee:"") // invalid
+ self.init(numCoins: 0, fee: nil) // invalid
}
init(details: CheckPeerPullCreditResponse?) {
do {
if let details {
// Incoming: fee = raw - effective
- let fee = try details.amountRaw - details.amountEffective
+ let aFee = try details.amountRaw - details.amountEffective
self.init(numCoins: details.numCoins ?? -1, // either the number of coins, or unknown
- fee: fee.isZero ? "" : fee.readableDescription)
+ fee: aFee)
return
}
} catch {}
- self.init(numCoins: 0, fee:"") // invalid
+ self.init(numCoins: 0, fee: nil) // invalid
}
}
// MARK: -
@@ -51,6 +50,7 @@ struct QuiteSomeCoins: View {
let someCoins: SomeCoins
let shouldShowFee: Bool
let currency: String
+ let currencyInfo: CurrencyInfo?
let amountEffective: Amount?
var body: some View {
@@ -67,22 +67,24 @@ struct QuiteSomeCoins: View {
}
}
if shouldShowFee {
- Text(someCoins.invalid ? "Amount too small!"
- : someCoins.tooMany ? "Amount too big for a single withdrawal!"
- : someCoins.hasFee ? "- \(someCoins.fee) fee"
- : "No withdrawal fee")
- .foregroundColor((someCoins.invalid || someCoins.tooMany || someCoins.hasFee) ? .red : .primary)
- .accessibilityFont(.body)
-// .padding(4)
+ if let fee = someCoins.fee {
+ Text(someCoins.invalid ? "Amount too small!"
+ : someCoins.tooMany ? "Amount too big for a single withdrawal!"
+ : fee.isZero ? "No withdrawal fee"
+ : "- \(fee.string(currencyInfo)) fee")
+ .foregroundColor((someCoins.invalid || someCoins.tooMany || !fee.isZero) ? .red : .primary)
+ .accessibilityFont(.body)
+ }
}
}
}
// MARK: -
struct QuiteSomeCoins_Previews: PreviewProvider {
static var previews: some View {
- QuiteSomeCoins(someCoins: SomeCoins(numCoins: 4, fee: "20 " + LONGCURRENCY),
+ QuiteSomeCoins(someCoins: SomeCoins(numCoins: 4, fee: Amount(currency: LONGCURRENCY, cent: 20) ),
shouldShowFee: true,
currency: LONGCURRENCY,
+ currencyInfo: nil,
amountEffective: nil)
}
}
diff --git a/TalerWallet1/Views/Peer2peer/RequestPayment.swift b/TalerWallet1/Views/Peer2peer/RequestPayment.swift
index deed5dc..1440e90 100644
--- a/TalerWallet1/Views/Peer2peer/RequestPayment.swift
+++ b/TalerWallet1/Views/Peer2peer/RequestPayment.swift
@@ -14,6 +14,7 @@ struct RequestPayment: View {
@Binding var amountToTransfer: Amount
@Binding var summary: String
+ @EnvironmentObject private var controller: Controller
@EnvironmentObject private var model: WalletModel
@AppStorage("iconOnly") var iconOnly: Bool = false
@@ -26,18 +27,20 @@ struct RequestPayment: View {
let _ = symLog.vlog() // just to get the # to compare it with .onAppear & onDisappear
#endif
let currency = amountToTransfer.currencyStr
- let navTitle = String(localized: "Request Money", comment: "Dialog Title")
+ let currencyInfo = controller.info(for: currency, controller.currencyTicker)
+ let navTitle = String(localized: "Request \(currency)", comment: "Dialog Title")
- ScrollView { VStack {
+ ScrollView { VStack(alignment: .trailing) {
CurrencyInputView(amount: $amountToTransfer,
available: nil,
title: iconOnly ? String(localized: "How much:")
: String(localized: "Amount to request:"))
-
+ .padding(.top)
let someCoins = SomeCoins(details: peerPullCheck)
QuiteSomeCoins(someCoins: someCoins,
shouldShowFee: true, // always true since the requester pays fees
currency: currency,
+ currencyInfo: currencyInfo,
amountEffective: peerPullCheck?.amountEffective)
let disabled = amountToTransfer.isZero || someCoins.invalid || someCoins.tooMany
diff --git a/TalerWallet1/Views/Peer2peer/RequestPurpose.swift b/TalerWallet1/Views/Peer2peer/RequestPurpose.swift
index 60572d4..352f2f7 100644
--- a/TalerWallet1/Views/Peer2peer/RequestPurpose.swift
+++ b/TalerWallet1/Views/Peer2peer/RequestPurpose.swift
@@ -11,7 +11,7 @@ struct RequestPurpose: View {
let stack: CallStack
let amountToTransfer: Amount
- let fee: String
+ let fee: Amount?
@Binding var summary: String
@Binding var expireDays: UInt
@@ -27,8 +27,11 @@ struct RequestPurpose: View {
let currencyInfo = controller.info(for: amountToTransfer.currencyStr, controller.currencyTicker)
ScrollView { VStack (spacing: 6) {
Text(amountToTransfer.string(currencyInfo))
- Text("+ \(fee) payment fee")
- .foregroundColor(.red)
+ if let fee {
+ let feeStr = fee.string(currencyInfo)
+ Text("+ \(feeStr) payment fee")
+ .foregroundColor(.red)
+ }
VStack(alignment: .leading, spacing: 6) {
if !iconOnly {
Text("Subject:")
diff --git a/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawURIView.swift b/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawURIView.swift
index c3e5ca2..56773b4 100644
--- a/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawURIView.swift
+++ b/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawURIView.swift
@@ -17,6 +17,7 @@ struct WithdrawURIView: View {
// the URL from the bank website
let url: URL
+ @EnvironmentObject private var controller: Controller
@EnvironmentObject private var model: WalletModel
@AppStorage("myListStyle") var myListStyle: MyListStyle = .automatic
@@ -32,6 +33,7 @@ struct WithdrawURIView: View {
let raw = withdrawalAmountDetails.amountRaw
let effective = withdrawalAmountDetails.amountEffective
let currency = raw.currencyStr
+ let currencyInfo = controller.info(for: currency, controller.currencyTicker)
let fee = try! Amount.diff(raw, effective)
let outColor = WalletColors().transactionColor(false)
let inColor = WalletColors().transactionColor(true)
@@ -47,7 +49,8 @@ struct WithdrawURIView: View {
let someCoins = SomeCoins(details: withdrawalAmountDetails)
QuiteSomeCoins(someCoins: someCoins,
shouldShowFee: true, // TODO: set to false if we never charge withdrawal fees
- currency: raw.currencyStr,
+ currency: currency,
+ currencyInfo: currencyInfo,
amountEffective: effective)
}
.listStyle(myListStyle.style).anyView
@@ -83,13 +86,10 @@ struct WithdrawURIView: View {
do { // TODO: cancelled
symLog.log(".task")
let withdrawUriInfo = try await model.loadWithdrawalDetailsForUriM(url.absoluteString)
- let amount = withdrawUriInfo.amount
- if let baseURL = withdrawUriInfo.defaultExchangeBaseUrl {
- exchangeBaseUrl = baseURL
- } else if let first = withdrawUriInfo.possibleExchanges.first {
- exchangeBaseUrl = first.exchangeBaseUrl
- }
+ exchangeBaseUrl = withdrawUriInfo.defaultExchangeBaseUrl ??
+ withdrawUriInfo.possibleExchanges.first?.exchangeBaseUrl
if let exchangeBaseUrl {
+ let amount = withdrawUriInfo.amount
let details = try await model.loadWithdrawalDetailsForAmountM(exchangeBaseUrl, amount: amount)
withdrawalAmountDetails = details
// agePicker.setAges(ages: details?.ageRestrictionOptions)