[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taler-ios] 07/07: Transaction list and details
From: |
gnunet |
Subject: |
[taler-taler-ios] 07/07: Transaction list and details |
Date: |
Wed, 22 Feb 2023 16:16:34 +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 4f2b20ca9bd0559742f20a418f5f03f72f521165
Author: Marc Stibane <marc@taler.net>
AuthorDate: Wed Feb 22 16:15:57 2023 +0100
Transaction list and details
---
TalerWallet1/Backend/Transaction.swift | 39 +++++++++---
.../Views/Transactions/TransactionDetail.swift | 72 +++++++++++++++++-----
.../Views/Transactions/TransactionRow.swift | 13 +++-
3 files changed, 97 insertions(+), 27 deletions(-)
diff --git a/TalerWallet1/Backend/Transaction.swift
b/TalerWallet1/Backend/Transaction.swift
index aa2211d..873733e 100644
--- a/TalerWallet1/Backend/Transaction.swift
+++ b/TalerWallet1/Backend/Transaction.swift
@@ -35,6 +35,14 @@ struct TransactionCommon: Decodable {
var extendedStatus: String // TODO: enum with some fixed values?
var pending: Bool
var frozen: Bool
+
+ func fee() -> Amount {
+ do {
+ return try Amount.diff(amountRaw, amountEffective)
+ } catch {
+ return Amount(currency: amountRaw.currencyStr, integer: 0,
fraction: 0)
+ }
+ }
}
struct WithdrawalDetails: Decodable {
@@ -197,18 +205,31 @@ enum Transaction: Decodable, Hashable, Identifiable {
#if DEBUG
extension Transaction { // for PreViews
- init(id: String, time: Timestamp) {
- let common = TransactionCommon(type: WITHDRAWAL,
- amountEffective: try! Amount(fromString:
"Taler:4.8"),
+ init(incoming: Bool, id: String, time: Timestamp) {
+ let effective = incoming ? "Taler:4.8" : "Taler:5.2"
+ let common = TransactionCommon(type: incoming ? WITHDRAWAL : PAYMENT,
+ amountEffective: try! Amount(fromString:
effective),
amountRaw: try! Amount(fromString:
"Taler:5"),
transactionId: id, timestamp: time,
extendedStatus: "done", pending: false, frozen:
false)
- let withdrawalDetails = WithdrawalDetails(type:
WithdrawalDetails.WithdrawalType.bankIntegrated,
- reservePub: "Public Key of the
Exchange",
- confirmed: true)
- let details = WithdrawalTransactionDetails(exchangeBaseUrl:
"Exchange.Demo.Taler.net",
- withdrawalDetails:
withdrawalDetails)
- self = .withdrawal(WithdrawalTransaction(common: common, details:
details))
+ if incoming {
+ let withdrawalDetails = WithdrawalDetails(type:
WithdrawalDetails.WithdrawalType.bankIntegrated,
+ reservePub: "Public Key
of the Exchange",
+ confirmed: true)
+ let wDetails = WithdrawalTransactionDetails(exchangeBaseUrl:
"Exchange.Demo.Taler.net",
+ withdrawalDetails:
withdrawalDetails)
+ self = .withdrawal(WithdrawalTransaction(common: common, details:
wDetails))
+ } else {
+ let merchant = Merchant(name: "some random shop")
+ let info = OrderShortInfo(orderId: "some order ID",
+ merchant: merchant, summary: "some
product summary", products: [])
+ let pDetails = PaymentTransactionDetails(proposalId: "some
proposal ID",
+ status: "paid",
+ totalRefundRaw: try!
Amount(fromString: "Taler:3.2"),
+ totalRefundEffective:
try! Amount(fromString: "Taler:3"),
+ info: info)
+ self = .payment(PaymentTransaction(common: common, details:
pDetails))
+ }
}
}
#endif
diff --git a/TalerWallet1/Views/Transactions/TransactionDetail.swift
b/TalerWallet1/Views/Transactions/TransactionDetail.swift
index 3d5fe56..57faf07 100644
--- a/TalerWallet1/Views/Transactions/TransactionDetail.swift
+++ b/TalerWallet1/Views/Transactions/TransactionDetail.swift
@@ -21,26 +21,32 @@ struct TransactionDetail: View {
var body: some View {
let common = transaction.common()
- let raw = common.amountRaw
- let effective = common.amountEffective
- let fee = try! Amount.diff(raw, effective) // TODO: different
currencies
+ let details = transaction.detailsToShow()
let dateString = TalerDater.dateString(from: common.timestamp)
VStack() {
Spacer()
- Text("\(dateString)")
+ Text("\(common.type)") // TODO: translation
.font(.title)
.fontWeight(.medium)
.padding(.bottom)
- AmountView(title: "Chosen amount to withdraw:",
- value: raw.readableDescription, color:
Color(UIColor.label))
- .padding(.bottom)
- AmountView(title: "Exchange fee:",
- value: fee.readableDescription, color:
Color("Outgoing"))
- .padding(.bottom)
- AmountView(title: "Obtained coins:",
- value: effective.readableDescription, color:
Color("Incoming"))
- .padding(.bottom)
+ Text("\(dateString)")
+ .font(.title)
+ .fontWeight(.medium)
+ .padding(.vertical)
+ switch transaction {
+ case .withdrawal(let withdrawalTransaction):
+ threeAmounts(common: common, topTitle: "Chosen amount to
withdraw:", bottomTitle: "Obtained coins:", incoming: true)
+ case .payment(let paymentTransaction):
+ threeAmounts(common: common, topTitle: "Sum to be paid:",
bottomTitle: "Paid coins:", incoming: false)
+ case .refund(let refundTransaction):
+ threeAmounts(common: common, topTitle: "Refunded amount:",
bottomTitle: "Obtained coins:", incoming: true)
+ case .tip(let tipTransaction):
+ threeAmounts(common: common, topTitle: "Tip to be paid:",
bottomTitle: "Paid coins:", incoming: false)
+ case .refresh(let refreshTransaction):
+ threeAmounts(common: common, topTitle: "Refreshed
amount:", bottomTitle: "Paid coins:", incoming: false)
+ }
+
// if let baseURL = transaction.exchangeBaseUrl {
// VStack {
// Text("From exchange:")
@@ -70,11 +76,47 @@ struct TransactionDetail: View {
}
}
+extension TransactionDetail {
+ struct threeAmounts: View {
+ var common: TransactionCommon
+ var topTitle: String
+ var bottomTitle: String
+ var incoming: Bool
+
+ var body: some View {
+ let raw = common.amountRaw
+ let effective = common.amountEffective
+ let fee = common.fee()
+ let labelColor = Color(UIColor.label)
+ let outColor = Color("Outgoing")
+ let inColor = Color("Incoming")
+
+ AmountView(title: topTitle,
+ value: raw.readableDescription, color: labelColor)
+ .padding(.bottom)
+ AmountView(title: "Exchange fee:",
+ value: fee.readableDescription, color: fee.isZero ?
labelColor : outColor)
+ .padding(.bottom)
+ AmountView(title: bottomTitle,
+ value: effective.readableDescription, color: incoming ?
inColor : outColor)
+ .padding(.bottom)
+ }
+ }
+}
+
#if DEBUG
struct TransactionDetail_Previews: PreviewProvider {
- static var transaction = Transaction(id:"some transActionID", time:
Timestamp(from: 1_666_000_000_000))
+ static var withdrawal = Transaction(incoming: true,
+ id: "some withdrawal ID",
+ time: Timestamp(from:
1_666_000_000_000))
+ static var payment = Transaction(incoming: false,
+ id: "some payment ID",
+ time: Timestamp(from: 1_666_666_000_000))
static var previews: some View {
- TransactionDetail(transaction: transaction)
+ Group {
+ TransactionDetail(transaction: withdrawal)
+ TransactionDetail(transaction: payment)
+ }
}
}
#endif
diff --git a/TalerWallet1/Views/Transactions/TransactionRow.swift
b/TalerWallet1/Views/Transactions/TransactionRow.swift
index c76012a..899aaf4 100644
--- a/TalerWallet1/Views/Transactions/TransactionRow.swift
+++ b/TalerWallet1/Views/Transactions/TransactionRow.swift
@@ -76,10 +76,17 @@ struct TransactionRow: View {
#if DEBUG
struct TransactionRow_Previews: PreviewProvider {
- static var transaction = Transaction(id: "some transActionID",
- time: Timestamp(from:
1_666_000_000_000))
+ static var withdrawal = Transaction(incoming: true,
+ id: "some withdrawal ID",
+ time: Timestamp(from:
1_666_000_000_000))
+ static var payment = Transaction(incoming: false,
+ id: "some payment ID",
+ time: Timestamp(from:
1_666_666_000_000))
static var previews: some View {
- TransactionRow(transaction: transaction)
+ VStack {
+ TransactionRow(transaction: withdrawal)
+ TransactionRow(transaction: payment)
+ }
}
}
#endif
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-taler-ios] branch master updated (df4fe35 -> 4f2b20c), gnunet, 2023/02/22
- [taler-taler-ios] 01/07: Error handling, Amount.diff, gnunet, 2023/02/22
- [taler-taler-ios] 04/07: Constants, cleanup, gnunet, 2023/02/22
- [taler-taler-ios] 03/07: added ext+taler and web+taler to the list of recognized URL schemes, gnunet, 2023/02/22
- [taler-taler-ios] 06/07: Info & SceneConfigurations, v0.9.2, bundleID, gnunet, 2023/02/22
- [taler-taler-ios] 02/07: ported remaining sync wallet-core funcs to try await, gnunet, 2023/02/22
- [taler-taler-ios] 05/07: Transaction definition and JSON decoding - Bug 7678, gnunet, 2023/02/22
- [taler-taler-ios] 07/07: Transaction list and details,
gnunet <=