gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-ios] 07/12: Use AmountRowV for transactions


From: gnunet
Subject: [taler-taler-ios] 07/12: Use AmountRowV for transactions
Date: Tue, 31 Oct 2023 08:53:04 +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 d63adacb8eb239ab117e19fff79a87391fbcfa93
Author: Marc Stibane <marc@taler.net>
AuthorDate: Sun Oct 29 21:38:45 2023 +0100

    Use AmountRowV for transactions
---
 .../Views/Balances/BalancesSectionView.swift       | 11 +--
 TalerWallet1/Views/Balances/PendingRowView.swift   | 33 ++++----
 .../Views/Transactions/TransactionRowView.swift    | 97 +++++++++++++++-------
 .../Views/Transactions/TransactionsListView.swift  | 11 +--
 4 files changed, 97 insertions(+), 55 deletions(-)

diff --git a/TalerWallet1/Views/Balances/BalancesSectionView.swift 
b/TalerWallet1/Views/Balances/BalancesSectionView.swift
index ea56359..a588698 100644
--- a/TalerWallet1/Views/Balances/BalancesSectionView.swift
+++ b/TalerWallet1/Views/Balances/BalancesSectionView.swift
@@ -73,7 +73,8 @@ extension BalancesSectionView: View {
 
         Section {
             if "KUDOS" == currency && !balance.available.isZero {
-                Text("You can spend these KUDOS in the [Demo 
Shop](https://shop.demo.taler.net), or send them to another wallet.")
+                Text(iconOnly ? "Visit the [Demo 
Shop](https://shop.demo.taler.net)" :
+                        "You can spend these KUDOS in the [Demo 
Shop](https://shop.demo.taler.net), or send them to another wallet.")
                     .accessibilityFont(.body)
                     .multilineTextAlignment(.leading)
             }
@@ -102,7 +103,7 @@ extension BalancesSectionView: View {
                     LazyView {
                         TransactionsListView(stack: stack.push(),
                                           navTitle: String(localized: 
"Uncompleted"),
-                                          currency: currency,
+                                      currencyInfo: currencyInfo,
                                       transactions: uncompletedTransactions,
                                         showUpDown: false,
                                    reloadAllAction: reloadUncompleted,
@@ -147,7 +148,7 @@ extension BalancesSectionView: View {
                 let threeTransactions = Array(slice)
                 TransactionsRowsView(symLog: symLog,
                                       stack: stack.push(),
-                                   currency: currency,
+                               currencyInfo: currencyInfo,
                                transactions: threeTransactions,
                             reloadOneAction: reloadOneAction)
             } header: {
@@ -199,7 +200,7 @@ fileprivate struct BalancesPendingRowView: View {
             LazyView {
                 TransactionsListView(stack: stack.push(),
                                   navTitle: String(localized: "Pending"),
-                                  currency: currency,
+                              currencyInfo: currencyInfo,
                               transactions: pendingTransactions,
                                 showUpDown: false,
                            reloadAllAction: reloadPending,
@@ -274,7 +275,7 @@ fileprivate struct BalancesNavigationLinksView: View {
             NavigationLink(destination: LazyView {
                 TransactionsListView(stack: stack.push(),
                                   navTitle: String(localized: "Transactions"),
-                                  currency: currency,
+                              currencyInfo: currencyInfo,
                               transactions: completedTransactions,
                                 showUpDown: true,
                            reloadAllAction: reloadAllAction,
diff --git a/TalerWallet1/Views/Balances/PendingRowView.swift 
b/TalerWallet1/Views/Balances/PendingRowView.swift
index a8b9293..3bcbebf 100644
--- a/TalerWallet1/Views/Balances/PendingRowView.swift
+++ b/TalerWallet1/Views/Balances/PendingRowView.swift
@@ -5,18 +5,17 @@
 import SwiftUI
 import taler_swift
 
-struct InOrOutView: View {
+struct PendingRowContentV: View {
     let titles: (String, String?)
     let isHorizontal: Bool
     let incoming: Bool
-    let imageName: String
 
-    public static func width(image1: String, titles: (String, String?), 
isHorizontal: Bool) -> CGFloat {
+    public static func width(titles: (String, String?), isHorizontal: Bool) -> 
CGFloat {
         let imageFont = TalerFont.uiFont(.largeTitle)
         let uiFont = TalerFont.uiFont(.body)
 
-        let image2 = "++"
-        let imageWidth = image2.widthOfString(usingUIFont: imageFont) + 8.0    
 // spacing: 8
+        let image = "++"
+        let imageWidth = image.widthOfString(usingUIFont: imageFont) + 8.0     
// spacing: 8
         let (title1, title2) = titles
         let title1Width = title1.widthOfString(usingUIFont: uiFont)
         var title2Width = 0.0
@@ -29,16 +28,20 @@ struct InOrOutView: View {
 
 //    let logStr = String(format: "image: %.2f   title: %.2f   total: %.2f", 
imageWidth, max(title1Width, title2Width), totalWidth)
 //    print(logStr)
-        return imageWidth + max(title1Width, title2Width)
+        return imageWidth + (isHorizontal ? totalWidth
+                                          : max(title1Width, title2Width))
     }
 
     var body: some View {
+        let pendingColor = WalletColors().pendingColor(incoming)
+        let imageName = incoming ? "plus.circle"
+                                 : "minus.circle"
         HStack(spacing: 8) {
-            let pendingColor = WalletColors().pendingColor(incoming)
             Image(systemName: imageName)
                 .foregroundColor(pendingColor)
                 .accessibilityFont(.largeTitle)
                 .accessibility(hidden: true)
+
             Text(title(titles, isHorizontal))
                 .lineLimit(4)
                 .accessibilityFont(.body)
@@ -61,14 +64,11 @@ struct PendingRowView: View {
     let outTitle1 = String(localized: "Pending", comment: "Top of line 
<Pending outgoing>")
     let outTitle2 = String(localized: "outgoing", comment: "Bottom of line 
<pending outgoing>")
 
-    func needVStack(available: CGFloat, inOrOutWidth: CGFloat, valueWidth: 
CGFloat) -> Bool {
-        available < (inOrOutWidth + valueWidth + 40)
+    func needVStack(available: CGFloat, contentWidth: CGFloat, valueWidth: 
CGFloat) -> Bool {
+        available < (contentWidth + valueWidth + 40)
     }
 
     var body: some View {
-        let imageName = incoming ? "plus.circle"        // .fill
-                                 : "minus.circle"       // .fill
-        let imageStr = String("\(Image(systemName: imageName))")
         let pendingColor = WalletColors().pendingColor(incoming)
         SingleAxisGeometryReader { width in
             Group {
@@ -80,15 +80,14 @@ struct PendingRowView: View {
                                         : (outTitle1, outTitle2)
                 let title = incoming ? inTitle
                                      : outTitle
-                let inOrOutWidth = InOrOutView.width(image1: imageStr,
-                                                     titles: incoming ? 
inTitle : outTitle,
-                                                     isHorizontal: true)
+                let contentWidth = PendingRowContentV.width(titles: incoming ? 
inTitle : outTitle,
+                                                      isHorizontal: true)
 
-                let needVStack = needVStack(available: width, inOrOutWidth: 
inOrOutWidth, valueWidth: amountWidth)
+                let needVStack = needVStack(available: width, contentWidth: 
contentWidth, valueWidth: amountWidth)
                 AmountRowV(amountStr: amountStr, amountColor: pendingColor, 
largeAmountFont: false,
                            fitsHorizontal: !needVStack, vertAlignment: 
.center) {
                     // isHorizontal=true to try to fit "- Pending outgoing" + 
amount in 1 line
-                    InOrOutView(titles: title, isHorizontal: true, incoming: 
incoming, imageName: imageName)
+                    PendingRowContentV(titles: title, isHorizontal: true, 
incoming: incoming)
                 }
             }
         }
diff --git a/TalerWallet1/Views/Transactions/TransactionRowView.swift 
b/TalerWallet1/Views/Transactions/TransactionRowView.swift
index 3eaaa76..0fb3e01 100644
--- a/TalerWallet1/Views/Transactions/TransactionRowView.swift
+++ b/TalerWallet1/Views/Transactions/TransactionRowView.swift
@@ -5,24 +5,64 @@
 import SwiftUI
 import taler_swift
 
-struct TransactionRowCenter: View {
+struct TransactionRowContentV: View {
     var centerTop: String
     var centerBottom: String
+    let isHorizontal: Bool
+    let incoming: Bool
+    let foreColor:Color
+
+    public static func width(titles: (String, String?), isHorizontal: Bool) -> 
CGFloat {
+        let imageFont = TalerFont.uiFont(.largeTitle)
+        let uiFont1 = TalerFont.uiFont(.headline)
+        let uiFont2 = TalerFont.uiFont(.callout)
+
+        let image = "++"
+        let imageWidth = image.widthOfString(usingUIFont: imageFont) + 8.0     
// spacing: 8
+        let (title1, title2) = titles
+        let title1Width = title1.widthOfString(usingUIFont: uiFont1)
+        var title2Width = 0.0
+        var totalWidth = title1Width
+        if let title2 {
+            title2Width = title2.widthOfString(usingUIFont: uiFont2)
+            let blankStr = " "
+            totalWidth += blankStr.widthOfString(usingUIFont: uiFont1) + 
title2Width
+        }
+
+//    let logStr = String(format: "image: %.2f   title: %.2f   total: %.2f", 
imageWidth, max(title1Width, title2Width), totalWidth)
+//    print(logStr)
+        return imageWidth + (isHorizontal ? totalWidth
+                                          : max(title1Width, title2Width))
+    }
 
     var body: some View {
-        VStack(alignment: .leading) {
-            Text(centerTop)
-                .accessibilityFont(.headline)
-//                .fontWeight(.medium)      iOS 16
-                .padding(.bottom, -2.0)
-            Text(centerBottom)
-                .accessibilityFont(.callout)
+        let imageName = incoming ? "plus.circle.fill"
+                                 : "minus.circle.fill"
+        HStack(spacing: 8) {
+            Image(systemName: imageName)
+                .foregroundColor(foreColor)
+                .accessibilityFont(.largeTitle)
+                .accessibility(hidden: true)
+
+            VStack(alignment: .leading) {
+                Text(centerTop)
+                    .accessibilityFont(.headline)
+//                  .fontWeight(.medium)      iOS 16
+                    .padding(.bottom, -2.0)
+                Text(centerBottom)
+                    .accessibilityFont(.callout)
+            }
         }
     }
 }
 
 struct TransactionRowView: View {
-    var transaction : Transaction
+    let transaction : Transaction
+    let currencyInfo: CurrencyInfo?
+
+    func needVStack(available: CGFloat, contentWidth: CGFloat, valueWidth: 
CGFloat) -> Bool {
+        available < (contentWidth + valueWidth + 40)
+    }
 
     var body: some View {
         let common = transaction.common
@@ -38,26 +78,23 @@ struct TransactionRowView: View {
                       : done ? WalletColors().transactionColor(incoming)
                              : WalletColors().uncompletedColor
 
-        HStack(spacing: 6) {
-            Image(systemName: incoming ? "text.badge.plus" : 
"text.badge.minus")
-                .foregroundColor(foreColor)
-                .accessibilityFont(.largeTitle)
-                .accessibility(hidden: true)
+        SingleAxisGeometryReader { width in
+            Group {
+                let amountStr = amount.string(currencyInfo)
+                let amountWidth = amountStr.width(largeAmountFont: false)
+
+                let contentWidth = PendingRowContentV.width(titles: 
(transaction.localizedType, dateString),
+                                                            isHorizontal: true)
+                let needVStack = needVStack(available: width, contentWidth: 
contentWidth, valueWidth: amountWidth)
+
+                AmountRowV(amountStr: amountStr, amountColor: foreColor, 
largeAmountFont: false,
+                           fitsHorizontal: !needVStack, vertAlignment: 
.center) {
 
-            TransactionRowCenter(centerTop: transaction.localizedType,
-                                 centerBottom: dateString)
-            Spacer()
-            VStack(alignment: .trailing) {
-                let sign = incoming ? "+" : "-"
-                let valueStr = sign + amount.valueStr
-                Text(valueStr)
-                    .foregroundColor(foreColor)
-                    .accessibilityFont(.title)
-                    .monospacedDigit()
+                    TransactionRowContentV(centerTop: 
transaction.localizedType,
+                                           centerBottom: dateString, 
isHorizontal: true, incoming: incoming, foreColor: foreColor)
+                }
             }
         }
-        .accessibilityElement(children: .combine)
-        .padding(.top)
     }
 }
 // MARK: -
@@ -72,9 +109,13 @@ struct TransactionRow_Previews: PreviewProvider {
                                            id: "some payment ID",
                                          time: Timestamp(from: 
1_666_666_000_000))
     static var previews: some View {
+        let testInfo = PreviewCurrencyInfo(TESTCURRENCY, digits: 0)
+        let demoInfo = PreviewCurrencyInfo(TESTCURRENCY, digits: 2)
+        let test = try! Amount(fromString: TESTCURRENCY + ":1.23")
+        let demo = try! Amount(fromString: DEMOCURRENCY + ":1234.56")
         List {
-            TransactionRowView(transaction: withdrawal)
-            TransactionRowView(transaction: payment)
+            TransactionRowView(transaction: withdrawal, currencyInfo: testInfo)
+            TransactionRowView(transaction: payment, currencyInfo: demoInfo)
         }
     }
 }
diff --git a/TalerWallet1/Views/Transactions/TransactionsListView.swift 
b/TalerWallet1/Views/Transactions/TransactionsListView.swift
index 8322ba5..6dc1a4b 100644
--- a/TalerWallet1/Views/Transactions/TransactionsListView.swift
+++ b/TalerWallet1/Views/Transactions/TransactionsListView.swift
@@ -11,7 +11,7 @@ struct TransactionsListView: View {
     @AppStorage("myListStyle") var myListStyle: MyListStyle = .automatic
     let navTitle: String
 
-    let currency: String
+    let currencyInfo: CurrencyInfo?
     let transactions: [Transaction]
     let showUpDown: Bool
     let reloadAllAction: (_ stack: CallStack) async -> ()
@@ -30,7 +30,7 @@ struct TransactionsListView: View {
             List {
                 TransactionsRowsView(symLog: symLog,
                                       stack: stack.push(),
-                                   currency: currency,
+                               currencyInfo: currencyInfo,
                                transactions: transactions,
 //                          reloadAllAction: reloadAllAction,
                             reloadOneAction: reloadOneAction)
@@ -68,7 +68,8 @@ struct TransactionsListView: View {
         }
         .overlay {
             if transactions.isEmpty {
-                TransactionsEmptyView(stack: stack.push(), currency: currency)
+                let unknown = String(localized: "Unknown currency")
+                TransactionsEmptyView(stack: stack.push(), currency: 
currencyInfo?.scope.currency ?? unknown)
             }
         }
         .onAppear {
@@ -81,7 +82,7 @@ struct TransactionsListView: View {
 struct TransactionsRowsView: View {
     let symLog: SymLogV?
     let stack: CallStack
-    let currency: String
+    let currencyInfo: CurrencyInfo?
     let transactions: [Transaction]
 //  let reloadAllAction: (_ stack: CallStack) async -> ()
     let reloadOneAction: ((_ transactionId: String) async throws -> 
Transaction)
@@ -112,7 +113,7 @@ struct TransactionsRowsView: View {
                                    resumeAction: resumeAction)
                 }
             } label: {
-                TransactionRowView(transaction: transaction)
+                TransactionRowView(transaction: transaction, currencyInfo: 
currencyInfo)
             }
             .id(Int(index))
         }

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]