gnunet-svn
[Top][All Lists]
Advanced

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

[taler-taler-ios] 47/69: single routine for rendering amounts


From: gnunet
Subject: [taler-taler-ios] 47/69: single routine for rendering amounts
Date: Fri, 19 Jan 2024 09:02:20 +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 bd89805251278c1fa306f411eba6d3f00b86f846
Author: Marc Stibane <marc@taler.net>
AuthorDate: Wed Jan 17 23:37:42 2024 +0100

    single routine for rendering amounts
---
 TalerWallet.xcodeproj/project.pbxproj              | 18 +++--
 TalerWallet1/Controllers/Controller.swift          | 25 +++++--
 TalerWallet1/Views/Balances/BalanceRowView.swift   | 22 +++---
 TalerWallet1/Views/Balances/PendingRowView.swift   | 21 +-----
 TalerWallet1/Views/HelperViews/AmountRowV.swift    | 80 ++++++++++++++++++++++
 TalerWallet1/Views/HelperViews/AmountV.swift       | 38 ++++++++++
 TalerWallet1/Views/HelperViews/AmountView.swift    | 44 ------------
 .../Views/Transactions/ThreeAmountsV.swift         | 12 ++--
 .../Views/Transactions/TransactionRowView.swift    | 20 ++----
 9 files changed, 172 insertions(+), 108 deletions(-)

diff --git a/TalerWallet.xcodeproj/project.pbxproj 
b/TalerWallet.xcodeproj/project.pbxproj
index 2e1557a..ce4c031 100644
--- a/TalerWallet.xcodeproj/project.pbxproj
+++ b/TalerWallet.xcodeproj/project.pbxproj
@@ -11,6 +11,8 @@
                4E2254972A822B8100E41D29 /* payment_received.m4a in Resources 
*/ = {isa = PBXBuildFile; fileRef = 4E2254952A822B8100E41D29 /* 
payment_received.m4a */; };
                4E2254982A822B8100E41D29 /* payment_sent.m4a in Resources */ = 
{isa = PBXBuildFile; fileRef = 4E2254962A822B8100E41D29 /* payment_sent.m4a */; 
};
                4E2D8DD32B3F513800234039 /* MarkdownUI in Frameworks */ = {isa 
= PBXBuildFile; productRef = 4E2D8DD22B3F513800234039 /* MarkdownUI */; };
+               4E2D8DD52B45822A00234039 /* AmountV.swift in Sources */ = {isa 
= PBXBuildFile; fileRef = 4E2D8DD42B45822A00234039 /* AmountV.swift */; };
+               4E2D8DD62B45822A00234039 /* AmountV.swift in Sources */ = {isa 
= PBXBuildFile; fileRef = 4E2D8DD42B45822A00234039 /* AmountV.swift */; };
                4E3327BA2AD1635100BF5AD6 /* AsyncSemaphore.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4E3327B92AD1635100BF5AD6 /* 
AsyncSemaphore.swift */; };
                4E3327BB2AD1635100BF5AD6 /* AsyncSemaphore.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4E3327B92AD1635100BF5AD6 /* 
AsyncSemaphore.swift */; };
                4E363CBC2A237E0900D7E98C /* URL+id+iban.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E363CBB2A237E0900D7E98C /* URL+id+iban.swift 
*/; };
@@ -66,7 +68,7 @@
                4E3EAE482A990778009F1BE8 /* PayTemplateView.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EBA56402A7FF5200084948B /* 
PayTemplateView.swift */; };
                4E3EAE492A990778009F1BE8 /* ManualWithdrawDone.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4EB431662A1E55C700C5690E /* 
ManualWithdrawDone.swift */; };
                4E3EAE4B2A990778009F1BE8 /* ShareSheet.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E753A072A0B6A5F002D9328 /* ShareSheet.swift */; 
};
-               4E3EAE4C2A990778009F1BE8 /* AmountView.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB095492989CBFE0043A8A1 /* AmountView.swift */; 
};
+               4E3EAE4C2A990778009F1BE8 /* AmountRowV.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB095492989CBFE0043A8A1 /* AmountRowV.swift */; 
};
                4E3EAE4D2A990778009F1BE8 /* P2pAcceptDone.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E3B4BC22A42252300CC88B8 /* P2pAcceptDone.swift 
*/; };
                4E3EAE4E2A990778009F1BE8 /* AnyTransition+backslide.swift in 
Sources */ = {isa = PBXBuildFile; fileRef = 4E363CBD2A23CB2100D7E98C /* 
AnyTransition+backslide.swift */; };
                4E3EAE4F2A990778009F1BE8 /* TwoRowButtons.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB065432A4CD1A80039B91D /* TwoRowButtons.swift 
*/; };
@@ -211,7 +213,7 @@
                4EB095692989CBFE0043A8A1 /* ErrorView.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB095452989CBFE0043A8A1 /* ErrorView.swift */; 
};
                4EB0956A2989CBFE0043A8A1 /* Buttons.swift in Sources */ = {isa 
= PBXBuildFile; fileRef = 4EB095472989CBFE0043A8A1 /* Buttons.swift */; };
                4EB0956B2989CBFE0043A8A1 /* TextFieldAlert.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EB095482989CBFE0043A8A1 /* 
TextFieldAlert.swift */; };
-               4EB0956C2989CBFE0043A8A1 /* AmountView.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB095492989CBFE0043A8A1 /* AmountView.swift */; 
};
+               4EB0956C2989CBFE0043A8A1 /* AmountRowV.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB095492989CBFE0043A8A1 /* AmountRowV.swift */; 
};
                4EB0956D2989CBFE0043A8A1 /* LoadingView.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB0954A2989CBFE0043A8A1 /* LoadingView.swift 
*/; };
                4EB0956E2989CBFE0043A8A1 /* Model+Pending.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB0954C2989CBFE0043A8A1 /* Model+Pending.swift 
*/; };
                4EB3136129FEE79B007D68BC /* P2PReadyV.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB3136029FEE79B007D68BC /* P2PReadyV.swift */; 
};
@@ -291,6 +293,7 @@
                4E16E12229F3BB99008B9C86 /* CurrencySpecification.swift */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.swift; path = CurrencySpecification.swift; sourceTree = "<group>"; };
                4E2254952A822B8100E41D29 /* payment_received.m4a */ = {isa = 
PBXFileReference; lastKnownFileType = file; path = payment_received.m4a; 
sourceTree = "<group>"; };
                4E2254962A822B8100E41D29 /* payment_sent.m4a */ = {isa = 
PBXFileReference; lastKnownFileType = file; path = payment_sent.m4a; sourceTree 
= "<group>"; };
+               4E2D8DD42B45822A00234039 /* AmountV.swift */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmountV.swift; 
sourceTree = "<group>"; };
                4E3327B92AD1635100BF5AD6 /* AsyncSemaphore.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= AsyncSemaphore.swift; sourceTree = "<group>"; };
                4E363CBB2A237E0900D7E98C /* URL+id+iban.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= "URL+id+iban.swift"; sourceTree = "<group>"; };
                4E363CBD2A23CB2100D7E98C /* AnyTransition+backslide.swift */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.swift; path = "AnyTransition+backslide.swift"; sourceTree = 
"<group>"; };
@@ -385,7 +388,7 @@
                4EB095452989CBFE0043A8A1 /* ErrorView.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= ErrorView.swift; sourceTree = "<group>"; };
                4EB095472989CBFE0043A8A1 /* Buttons.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= Buttons.swift; sourceTree = "<group>"; };
                4EB095482989CBFE0043A8A1 /* TextFieldAlert.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= TextFieldAlert.swift; sourceTree = "<group>"; };
-               4EB095492989CBFE0043A8A1 /* AmountView.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= AmountView.swift; sourceTree = "<group>"; };
+               4EB095492989CBFE0043A8A1 /* AmountRowV.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= AmountRowV.swift; sourceTree = "<group>"; };
                4EB0954A2989CBFE0043A8A1 /* LoadingView.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= LoadingView.swift; sourceTree = "<group>"; };
                4EB0954C2989CBFE0043A8A1 /* Model+Pending.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= "Model+Pending.swift"; sourceTree = "<group>"; };
                4EB3136029FEE79B007D68BC /* P2PReadyV.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= P2PReadyV.swift; sourceTree = "<group>"; };
@@ -729,6 +732,7 @@
                                4EF840A62A0B85F400EE0D47 /* CopyShare.swift */,
                                4ECB62812A0BB01D004ABBB7 /* SelectDays.swift */,
                                4EA551242A2C923600FEC9A8 /* 
CurrencyInputView.swift */,
+                               4E2D8DD42B45822A00234039 /* AmountV.swift */,
                                4E53A33629F50B7B00830EC2 /* CurrencyField.swift 
*/,
                                4EEC157229F8242800D46A03 /* 
QRGeneratorView.swift */,
                                4E5A88F42A38A4FD00072618 /* 
QRCodeDetailView.swift */,
@@ -737,7 +741,7 @@
                                4E983C2B2ADC416800FA9CC5 /* 
View+fitsSideBySide.swift */,
                                4EB095482989CBFE0043A8A1 /* 
TextFieldAlert.swift */,
                                4EBA82AA2A3EB2CA00E5F39A /* 
TransactionButton.swift */,
-                               4EB095492989CBFE0043A8A1 /* AmountView.swift */,
+                               4EB095492989CBFE0043A8A1 /* AmountRowV.swift */,
                                4EB0954A2989CBFE0043A8A1 /* LoadingView.swift 
*/,
                                4EB095432989CBFE0043A8A1 /* 
LaunchAnimationView.swift */,
                                4EFA395F2AA7946B00742548 /* ToSButtonView.swift 
*/,
@@ -1075,11 +1079,12 @@
                                4E3EAE452A990778009F1BE8 /* P2PReadyV.swift in 
Sources */,
                                4E3EAE462A990778009F1BE8 /* 
TextFieldAlert.swift in Sources */,
                                4E3EAE472A990778009F1BE8 /* 
QuiteSomeCoins.swift in Sources */,
+                               4E2D8DD52B45822A00234039 /* AmountV.swift in 
Sources */,
                                4E3EAE482A990778009F1BE8 /* 
PayTemplateView.swift in Sources */,
                                4E3EAE492A990778009F1BE8 /* 
ManualWithdrawDone.swift in Sources */,
                                4E3EAE4B2A990778009F1BE8 /* ShareSheet.swift in 
Sources */,
                                4EC4008F2AE8019700DF72C7 /* 
ExchangeRowView.swift in Sources */,
-                               4E3EAE4C2A990778009F1BE8 /* AmountView.swift in 
Sources */,
+                               4E3EAE4C2A990778009F1BE8 /* AmountRowV.swift in 
Sources */,
                                4E605DBA2AB05FB6002FB9A7 /* BarGraph.swift in 
Sources */,
                                4E3EAE4D2A990778009F1BE8 /* P2pAcceptDone.swift 
in Sources */,
                                4E3EAE4E2A990778009F1BE8 /* 
AnyTransition+backslide.swift in Sources */,
@@ -1180,11 +1185,12 @@
                                4EB3136129FEE79B007D68BC /* P2PReadyV.swift in 
Sources */,
                                4EB0956B2989CBFE0043A8A1 /* 
TextFieldAlert.swift in Sources */,
                                4EBA82AD2A3F580500E5F39A /* 
QuiteSomeCoins.swift in Sources */,
+                               4E2D8DD62B45822A00234039 /* AmountV.swift in 
Sources */,
                                4EBA56412A7FF5200084948B /* 
PayTemplateView.swift in Sources */,
                                4EB431672A1E55C700C5690E /* 
ManualWithdrawDone.swift in Sources */,
                                4E753A082A0B6A5F002D9328 /* ShareSheet.swift in 
Sources */,
                                4EC400902AE8019700DF72C7 /* 
ExchangeRowView.swift in Sources */,
-                               4EB0956C2989CBFE0043A8A1 /* AmountView.swift in 
Sources */,
+                               4EB0956C2989CBFE0043A8A1 /* AmountRowV.swift in 
Sources */,
                                4E605DBB2AB05FB6002FB9A7 /* BarGraph.swift in 
Sources */,
                                4E3B4BC32A42252300CC88B8 /* P2pAcceptDone.swift 
in Sources */,
                                4E363CBE2A23CB2100D7E98C /* 
AnyTransition+backslide.swift in Sources */,
diff --git a/TalerWallet1/Controllers/Controller.swift 
b/TalerWallet1/Controllers/Controller.swift
index cb24e39..6d122da 100644
--- a/TalerWallet1/Controllers/Controller.swift
+++ b/TalerWallet1/Controllers/Controller.swift
@@ -69,21 +69,36 @@ class Controller: ObservableObject {
         return nil
     }
 
-    func info(for currency: String, _ ticker: Int) -> CurrencyInfo {
-        if ticker != currencyTicker {
-            print("❗️Yikes")
-        }
+    func info(for currency: String) -> CurrencyInfo? {
         for info in currencyInfos {
             if info.scope.currency == currency {
                 return info
             }
         }
-        return CurrencyInfo.zero(currency)
+        return nil
+    }
+    func info(for currency: String, _ ticker: Int) -> CurrencyInfo {
+        if ticker != currencyTicker {
+            print("❗️Yikes")
+        }
+        return info(for: currency) ?? CurrencyInfo.zero(currency)
     }
 
     @MainActor
     func getInfo(from exchangeBaseUrl: String, model: WalletModel) async -> 
CurrencyInfo? {
         if let exchange = await model.getExchangeByUrl(url: exchangeBaseUrl) {
+//            let scopeInfo = exchange.scopeInfo
+//            if let info = hasInfo(for: scopeInfo.currency) {
+//                return info
+//            }
+//            do {
+//                let info = try await model.getCurrencyInfoM(scope: 
scopeInfo, delay: 0)
+//                await setInfo(info)
+//                return info
+//            } catch {
+//                return nil
+//            }
+
             if let scopeInfo = exchange.scopeInfo {
                 if let info = hasInfo(for: scopeInfo.currency) {
                     return info
diff --git a/TalerWallet1/Views/Balances/BalanceRowView.swift 
b/TalerWallet1/Views/Balances/BalanceRowView.swift
index 7b738b7..130c379 100644
--- a/TalerWallet1/Views/Balances/BalanceRowView.swift
+++ b/TalerWallet1/Views/Balances/BalanceRowView.swift
@@ -5,8 +5,8 @@
 import SwiftUI
 import taler_swift
 
-struct BalanceButton: View {
-    let amountStr: String
+struct BalanceCell: View {
+    let amount: Amount
     let sizeCategory: ContentSizeCategory
     let rowAction: () -> Void
     let balanceDest: LazyView<TransactionsListView>?
@@ -17,13 +17,11 @@ struct BalanceButton: View {
     /// Renders the Balance button. "Balance" leading, amountStr trailing. If 
it doesn't fit in one row then
     /// amount (trailing) goes underneath "Balance" (leading).
     var body: some View {
-        let amountText = Text(amountStr)
-            .accessibilityFont(.title)
+        let amountV = AmountV(amount: amount, large: true)
             .foregroundColor(.primary)
-            .monospacedDigit()
         let hLayout = HStack(spacing: 0) {
                 Spacer(minLength: 0)
-                amountText
+                amountV
             }
         let balanceCell = Group {
             if iconOnly {
@@ -85,12 +83,10 @@ struct BalanceRowView: View {
                                  comment: "`Request Payment´ in Balances - set 
exactly 1 \\t for line break")
     var body: some View {
         VStack (alignment: .trailing, spacing: 6) {
-            let currencyInfo = controller.info(for: amount.currencyStr, 
controller.currencyTicker)
-            let amountStr = amount.string(currencyInfo)
-            BalanceButton(amountStr: amountStr,
-                       sizeCategory: sizeCategory,
-                          rowAction: rowAction,
-                        balanceDest: balanceDest)
+            BalanceCell(amount: amount,
+                     sizeCategory: sizeCategory,
+                        rowAction: rowAction,
+                      balanceDest: balanceDest)
 //            .border(.red)
 
             let sendTitle = iconOnly ? sendTitle0 : sendTitle1
@@ -125,8 +121,6 @@ struct BalanceRowView_Previews: PreviewProvider {
     var body: some View {
         let test = Amount(currency: TESTCURRENCY, cent: 123)
         let demo = Amount(currency: DEMOCURRENCY, cent: 123456)
-//        let testStr = test.string(testInfo)
-//        let demoStr = demo.string(demoInfo)
 
         List {
             Section {
diff --git a/TalerWallet1/Views/Balances/PendingRowView.swift 
b/TalerWallet1/Views/Balances/PendingRowView.swift
index 62f3292..65bf5d6 100644
--- a/TalerWallet1/Views/Balances/PendingRowView.swift
+++ b/TalerWallet1/Views/Balances/PendingRowView.swift
@@ -12,8 +12,7 @@ struct PendingRowView: View {
     let shouldConfirm: Bool
     let needsKYC: Bool
 
-    @Environment(\.sizeCategory) var sizeCategory
-    @EnvironmentObject private var controller: Controller
+//    @Environment(\.sizeCategory) var sizeCategory
     @AppStorage("iconOnly") var iconOnly: Bool = false
 
     let inTitle0 = String(localized: "TitleIncoming_Short", defaultValue: 
"Incoming",
@@ -34,11 +33,8 @@ struct PendingRowView: View {
         let outTitle = iconOnly ? outTitle0 : outTitle1
         let pendingTitle = incoming ? inTitle : outTitle
 
-        let currencyInfo = controller.info(for: amount.currencyStr, 
controller.currencyTicker)
-        let amountText = Text(amount.string(currencyInfo))
+        let amountText = AmountV(amount)
             .foregroundColor(pendingColor)
-            .accessibilityFont(.title2)
-            .monospacedDigit()
 
         // this is the default view for iOS 15
         let vStack = VStack {
@@ -72,19 +68,6 @@ struct PendingRowView: View {
 }
 // MARK: -
 #if DEBUG
-func PreviewCurrencyInfo(_ currency: String, digits: Int) -> CurrencyInfo {
-    let unitName = digits == 0 ? "テ" : "ク"  // do not use real currency 
symbols like "¥" : "€"
-    let scope = ScopeInfo(type: .global, currency: currency)
-    let specs = CurrencySpecification(name: currency,
-                                      code: currency,
-                     fractionalInputDigits: digits,
-                    fractionalNormalDigits: digits,
-              fractionalTrailingZeroDigits: digits,
-                              altUnitNames: [0 : unitName])
-    let previewFormatter = CurrencyFormatter.formatter(scope: scope, specs: 
specs)
-    return CurrencyInfo(scope: scope, specs: specs, formatter: 
previewFormatter)
-}
-
 @MainActor
 fileprivate struct Preview_Content: View {
     var body: some View {
diff --git a/TalerWallet1/Views/HelperViews/AmountRowV.swift 
b/TalerWallet1/Views/HelperViews/AmountRowV.swift
new file mode 100644
index 0000000..ed5f6df
--- /dev/null
+++ b/TalerWallet1/Views/HelperViews/AmountRowV.swift
@@ -0,0 +1,80 @@
+/*
+ * This file is part of GNU Taler, ©2022-23 Taler Systems S.A.
+ * See LICENSE.md
+ */
+import SwiftUI
+import taler_swift
+
+// Title and Amount
+struct AmountRowV: View {
+    let title: String
+    let amount: Amount
+    let color: Color
+    let large: Bool      // set to false for QR or IBAN
+
+    var body: some View {
+        let titleV = Text(title)
+                        .multilineTextAlignment(.leading)
+                        .accessibilityFont(.body)
+        let amountV = AmountV(amount: amount, large: large)
+                        .foregroundColor(color)
+        let verticalV = VStack(alignment: .leading) {
+            titleV
+            HStack(alignment: .lastTextBaseline) {
+                Spacer(minLength: 2)
+                amountV
+            }
+        }
+        Group {
+            if #available(iOS 16.0, *) {
+                ViewThatFits(in: .horizontal) {
+                    HStack(alignment: .lastTextBaseline) {
+                        titleV//.border(.orange)
+                        Spacer(minLength: 2)
+                        amountV//.border(.gray)
+                    }
+                    HStack(alignment: .lastTextBaseline) {
+                        titleV//.border(.blue)
+                            .lineLimit(2, reservesSpace: true)
+                            .fixedSize(horizontal: false, vertical: true)
+                        Spacer(minLength: 2)
+                        amountV//.border(.gray)
+                    }
+                    verticalV
+                }
+            } else { // view for iOS 15
+                verticalV
+            }
+        }
+            .frame(maxWidth: .infinity, alignment: .leading)
+            .listRowSeparator(.hidden)
+    }
+}
+extension AmountRowV {
+    init(title: String, amount: Amount, color: Color) {
+        self.title = title
+        self.amount = amount
+        self.color = color
+        self.large = true
+    }
+}
+
+// MARK: -
+fileprivate func talerFromStr(_ from: String) -> Amount {
+    do {
+        let amount = try Amount(fromString: from)
+        return amount
+    } catch {
+        return Amount(currency: "Taler", cent: 480)
+    }
+}
+#Preview {
+    List {
+        let fee = Amount(currency: "Taler", cent: 20)
+        AmountRowV(title: "Fee", amount: fee, color: Color("Outgoing"), large: 
false)
+        let cents = Amount(currency: "Taler", cent: 480)
+        AmountRowV(title: "Cents", amount: cents, color: Color("Incoming"))
+        let amount = talerFromStr("Taler:4.80")
+        AmountRowV(title: "Chosen amount to withdraw", amount: amount, color: 
Color("Incoming"))
+    }
+}
diff --git a/TalerWallet1/Views/HelperViews/AmountV.swift 
b/TalerWallet1/Views/HelperViews/AmountV.swift
new file mode 100644
index 0000000..5a7760f
--- /dev/null
+++ b/TalerWallet1/Views/HelperViews/AmountV.swift
@@ -0,0 +1,38 @@
+/*
+ * This file is part of GNU Taler, ©2022-23 Taler Systems S.A.
+ * See LICENSE.md
+ */
+import SwiftUI
+import taler_swift
+
+struct AmountV: View {
+    let amount: Amount
+    let large: Bool      // set to false for QR or IBAN
+
+    @EnvironmentObject private var controller: Controller
+
+    var amountStr: String {
+        if let currencyInfo = controller.info(for: amount.currencyStr) {
+            return amount.string(currencyInfo)
+        }
+        return amount.readableDescription
+    }
+
+    var body: some View {
+        Text(amountStr)
+            .multilineTextAlignment(.center)
+            .accessibilityFont(large ? .title : .title2)
+//            .fontWeight(large ? .medium : .regular)       // @available(iOS 
16.0, *)
+            .monospacedDigit()
+    }
+}
+extension AmountV {
+    init(_ amount: Amount) {
+        self.amount = amount
+        self.large = false
+    }
+}
+// MARK: -
+//#Preview {
+//    AmountV()
+//}
diff --git a/TalerWallet1/Views/HelperViews/AmountView.swift 
b/TalerWallet1/Views/HelperViews/AmountView.swift
deleted file mode 100644
index 2015115..0000000
--- a/TalerWallet1/Views/HelperViews/AmountView.swift
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * This file is part of GNU Taler, ©2022-23 Taler Systems S.A.
- * See LICENSE.md
- */
-import SwiftUI
-
-struct AmountView: View {
-    let title: String
-    let value: String
-    let color: Color
-    let large: Bool      // set to false for QR or IBAN
-
-    var body: some View {
-        VStack(alignment: .leading) {
-            Text(title)
-                .fixedSize(horizontal: false, vertical: true)       // wrap in 
scrollview
-                .multilineTextAlignment(.leading)
-                .accessibilityFont(.body)
-            HStack {
-                Spacer()
-                Text(value)
-                    .fixedSize(horizontal: false, vertical: true)   // wrap in 
scrollview
-                    .multilineTextAlignment(.center)
-                    .foregroundColor(color)
-                    .accessibilityFont(large ? .title : .title2)
-//                    .fontWeight(large ? .medium : .regular)       // 
@available(iOS 16.0, *)
-                    .monospacedDigit()
-            }
-        }
-            .frame(maxWidth: .infinity, alignment: .leading)
-            .listRowSeparator(.hidden)
-    }
-}
-
-struct AmountView_Previews: PreviewProvider {
-    static var previews: some View {
-        List {
-            AmountView(title: "Fee", value: "- 0,2 Taler",
-                       color: Color("Outgoing"), large: true)
-            AmountView(title: "Coins", value: "4,8 Taler",
-                       color: Color("Incoming"), large: false)
-        }
-    }
-}
diff --git a/TalerWallet1/Views/Transactions/ThreeAmountsV.swift 
b/TalerWallet1/Views/Transactions/ThreeAmountsV.swift
index 0f9cef0..7442714 100644
--- a/TalerWallet1/Views/Transactions/ThreeAmountsV.swift
+++ b/TalerWallet1/Views/Transactions/ThreeAmountsV.swift
@@ -69,24 +69,24 @@ struct ThreeAmountsV: View {
                     .lineLimit(4)
                     .padding(.bottom)
             }
-            AmountView(title: iconOnly ? topAbbrev : topTitle,
-                       value: topAmount.readableDescription,
+            AmountRowV(title: iconOnly ? topAbbrev : topTitle,
+                      amount: topAmount,
                        color: labelColor,
                        large: large)
                 .padding(.bottom, 4)
                 .accessibilityElement(children: .combine)
             if let fee {
-                AmountView(title: iconOnly ? String(localized: "Fee:")
+                AmountRowV(title: iconOnly ? String(localized: "Fee:")
                                            : String(localized: "Exchange 
fee:"),
-                           value: fee.readableDescription,
+                          amount: fee,
                            color: labelColor,
                            large: false)
                 .padding(.bottom, 4)
                 .accessibilityElement(children: .combine)
             }
             if let bottomAmount {
-                AmountView(title: iconOnly ? bottomAbbrev : bottomTitle,
-                           value: bottomAmount.readableDescription,
+                AmountRowV(title: iconOnly ? bottomAbbrev : bottomTitle,
+                          amount: bottomAmount,
                            color: foreColor,
                            large: large)
                 .accessibilityElement(children: .combine)
diff --git a/TalerWallet1/Views/Transactions/TransactionRowView.swift 
b/TalerWallet1/Views/Transactions/TransactionRowView.swift
index bf97108..1b80bc2 100644
--- a/TalerWallet1/Views/Transactions/TransactionRowView.swift
+++ b/TalerWallet1/Views/Transactions/TransactionRowView.swift
@@ -42,7 +42,6 @@ struct TransactionRowView: View {
 
     @Environment(\.sizeCategory) var sizeCategory
     @Environment(\.colorSchemeContrast) private var colorSchemeContrast
-    @EnvironmentObject private var controller: Controller
 
     func needVStack(available: CGFloat, contentWidth: CGFloat, valueWidth: 
CGFloat) -> Bool {
         available < (contentWidth + valueWidth + 40)
@@ -66,19 +65,12 @@ struct TransactionRowView: View {
                              : WalletColors().uncompletedColor
         let textColor = doneOrPending ? .primary :
                     increasedContrast ? .secondary : Color(.tertiaryLabel)
-        let currencyInfo = controller.info(for: currency, 
controller.currencyTicker)
 
         let iconBadge = IconBadge(foreColor: foreColor, done: done, incoming: 
incoming,
                                   shouldConfirm: shouldConfirm, needsKYC: 
needsKYC)
-        let amountStr = common.amountEffective.string(currencyInfo)
-        let amountText = Text(amountStr)
-            .accessibilityFont(.title2)
+        let amountV = AmountV(common.amountEffective)
             .foregroundColor(foreColor)
-            .monospacedDigit()
-        let amount = HStack(spacing: 0) {
-                Spacer(minLength: 0)
-                amountText
-            }
+
         let topString = transaction.localizedType
         let centerTop = Text(topString)
             .foregroundColor(textColor)
@@ -101,7 +93,7 @@ struct TransactionRowView: View {
                 }
                 Spacer(minLength: 2)
             }
-            amountText
+            amountV
         }
 
         let layout2 = VStack(spacing: 0) {
@@ -113,7 +105,7 @@ struct TransactionRowView: View {
                     centerBottom
                     Spacer(minLength: 2)
                 }//.border(.green)
-                amountText//.border(.red)
+                amountV//.border(.red)
             }//.border(.orange)
         }
 
@@ -125,7 +117,7 @@ struct TransactionRowView: View {
                     centerTop
                     Spacer(minLength: 2)
                 }
-                amountText
+                amountV
             }
             centerBottom
         }
@@ -136,7 +128,7 @@ struct TransactionRowView: View {
                 iconBadge//.border(.green)
                 Spacer(minLength: 2
                 )
-                amountText//.border(.green)
+                amountV//.border(.green)
             }//.border(.orange)
             centerBottom
         }

-- 
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]