gnunet-svn
[Top][All Lists]
Advanced

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

[taler-taler-ios] 02/02: SegmentControl for manual details


From: gnunet
Subject: [taler-taler-ios] 02/02: SegmentControl for manual details
Date: Fri, 12 Apr 2024 17:47:49 +0200

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 f964712d7f285c8af7ee10b278829c279088a0ec
Author: Marc Stibane <marc@taler.net>
AuthorDate: Fri Apr 12 17:47:33 2024 +0200

    SegmentControl for manual details
---
 .../Views/Transactions/ManualDetailsV.swift        | 77 ++++++++++++++++++++--
 1 file changed, 73 insertions(+), 4 deletions(-)

diff --git a/TalerWallet1/Views/Transactions/ManualDetailsV.swift 
b/TalerWallet1/Views/Transactions/ManualDetailsV.swift
index e3049b4..5adcb9c 100644
--- a/TalerWallet1/Views/Transactions/ManualDetailsV.swift
+++ b/TalerWallet1/Views/Transactions/ManualDetailsV.swift
@@ -6,6 +6,65 @@ import SwiftUI
 import OrderedCollections
 import taler_swift
 
+struct SegmentControl: View {
+    let value: Int
+    let accountDetails: [WithdrawalExchangeAccountDetails]
+    let action: (Int) -> Void
+
+    @Environment(\.colorScheme) private var colorScheme
+    @Environment(\.colorSchemeContrast) private var colorSchemeContrast
+
+    @State private var selectedAccount = 0
+    @ScaledMetric var frameHeight = 80       // relative to fontSize
+
+    public var body: some View {
+        let count = accountDetails.count
+        ZStack(alignment: .center) {
+            GeometryReader { geo in
+                RoundedRectangle(cornerRadius: 6.0)
+                    
.foregroundColor(WalletColors().pickerSelected(colorScheme, 
colorSchemeContrast))
+                    .cornerRadius(6.0)
+                    .padding(4)
+                    .frame(width: geo.size.width / CGFloat(count))
+                    .shadow(color: .black.opacity(0.1), radius: 2, x: 1, y: 1)
+                    .offset(x: geo.size.width / CGFloat(count) * 
CGFloat(selectedAccount), y: 0)
+            }
+            .frame(height: frameHeight)
+
+            HStack(spacing: 0) {
+                ForEach((0..<count), id: \.self) { index in
+                    let detail = accountDetails[index]
+                    let amount = detail.transferAmount
+                    VStack(spacing: 6) {
+                        let amountStr = amount?.readableDescription ?? ""
+                        Text(amountStr)
+                            .talerFont(.title3)
+                        let bankName = detail.bankLabel ?? ("BankName " + 
String(index))
+                        Text(bankName)
+                            .talerFont(.subheadline)
+                    }
+                    .frame(maxWidth: .infinity)
+                    .background(.gray.opacity(0.00001))
+                    .onTapGesture {
+                        withAnimation(.easeInOut(duration: 0.150)) {
+                            selectedAccount = index
+                        }
+                    }
+                }
+            }
+        }
+        .onAppear() {
+            withAnimation { selectedAccount = value }
+        }
+        .onChange(of: selectedAccount) { selected in
+            action(selected)
+        }
+        .background(
+            RoundedRectangle(cornerRadius: 6.0)
+                .fill(WalletColors().fieldBackground)
+        )
+    }
+}
 struct AccountPicker: View {
     let title: String
     let value: Int
@@ -18,14 +77,12 @@ struct AccountPicker: View {
         Picker(title, selection: $selectedAccount, content: {
             ForEach(0..<accountDetails.count, id: \.self, content: { index in
                 let detail = accountDetails[index]
-                if detail.status.lowercased() == "ok" {
                     if let amount = detail.transferAmount {
                         let amountStr = amount.readableDescription
                         let bankName = detail.bankLabel ?? ("BankName " + 
String(index))
                         Text(bankName + ":   " + amountStr)
                             .tag(index)
                     }
-                }
             })
         })
         .talerFont(.title3)
@@ -107,8 +164,20 @@ struct ManualDetailsV: View {
                             .multilineTextAlignment(.leading)
                             .listRowSeparator(.hidden)
                     }
-                    AccountPicker(title: String(localized: "Bank"), value: 
accountID,
-                         accountDetails: validDetails, action: redraw)
+                    if validDetails.count > 1 {
+                        if validDetails.count > 3 {
+                            AccountPicker(title: String(localized: "Bank"), 
value: accountID,
+                                          accountDetails: validDetails, 
action: redraw)
+                            .listRowSeparator(.hidden)
+                        } else {
+                            SegmentControl(value: accountID, accountDetails: 
validDetails, action: redraw)
+                                .listRowSeparator(.hidden)
+                        }
+                    } else if let amount = account.transferAmount {
+                        let amountStr = amount.readableDescription
+                        let bankName = account.bankLabel ?? "Unknown bank"
+                        Text(bankName + ":   " + amountStr)
+                    }
                     let payto = account.paytoUri
                     let payURL = URL(string: payto)
                     if let queryParameters = payURL?.queryParameters {

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