taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

commit 30aba5cbc0c66792890867b91a35e26d37fddab8
parent ee92d4efbeb4257dd9c82e0108cd65d5ce045566
Author: Marc Stibane <marc@taler.net>
Date:   Fri, 10 Jul 2026 10:42:46 +0200

segmented control for passes & discounts

Diffstat:
MTalerWallet1/Views/Balances/DiscountPasses.swift | 53+++++++++++++++++++++++++++++++----------------------
1 file changed, 31 insertions(+), 22 deletions(-)

diff --git a/TalerWallet1/Views/Balances/DiscountPasses.swift b/TalerWallet1/Views/Balances/DiscountPasses.swift @@ -162,35 +162,44 @@ struct DiscountsPassesList: View { : !isValid } } + + @ViewBuilder func section(_ token: TalerToken, index: Int) -> some View { + DiscountsPassesItem(stack: stack.push(), + token: token, + isPass: isPass, + activeExpired: activeExpired, + index: index + ) { deletionID in + Task { // runs on MainActor + let _ = await delete(deletionID) + await refresh() + } + } + } + var body: some View { let tokens = talerTokens() let count = tokens.count + let comment: StaticString = "segmented control for passes & discounts" + let strings = [String(localized: "Active", comment: comment), + String(localized: "Expired", comment: comment)] let list = List { - if count == 0 { - Text(isPass ? "No passes yet" - : "No discounts yet") + Section { + if count == 0 { + Text(isPass ? ( activeExpired == 0 ? "No active passes yet" : "No expired / used passes yet") + : ( activeExpired == 0 ? "No active discounts yet" : "No expired / used discounts yet")) .talerFont(.headline) - } else { - let comment: StaticString = "segmented control for passes & discounts" - let strings = [String(localized: "Active", comment: comment), - String(localized: "Expired", comment: comment)] + } else { + let token = tokens[0] + section(token, index: 0) + } + } header: { SegmentControl2(value: $activeExpired, strings: strings) - .listRowSeparator(.hidden) - .padding(.bottom, 10) - - ForEach(0..<count, id: \.self) { index in + } + if count > 1 { + ForEach(1..<count, id: \.self) { index in let token = tokens[index] - DiscountsPassesItem(stack: stack.push(), - token: token, - isPass: isPass, - activeExpired: activeExpired, - index: index - ) { deletionID in - Task { // runs on MainActor - let _ = await delete(deletionID) - await refresh() - } - } + section(token, index: index) } } }