[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.