taler-ios

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

commit f8eda5bf2235fb6a8940c4c758229a0e501c74b7
parent c790d300dd8710c5ddcb965fc6a66ab309f8f9db
Author: Marc Stibane <marc@taler.net>
Date:   Fri, 12 Dec 2025 07:55:59 +0100

show dialog tx row

Diffstat:
MTalerWallet1/Views/Balances/BalancesSectionView.swift | 137+++++++++++++++++++++++++++++++++++++++++++++----------------------------------
1 file changed, 78 insertions(+), 59 deletions(-)

diff --git a/TalerWallet1/Views/Balances/BalancesSectionView.swift b/TalerWallet1/Views/Balances/BalancesSectionView.swift @@ -46,6 +46,7 @@ struct BalancesSectionView { @State private var completedTransactions: [TalerTransaction] = [] @State private var recentTransactions: [TalerTransaction] = [] @State private var pendingTransactions: [TalerTransaction] = [] + @State private var scannedTransactions: [TalerTransaction] = [] private static func className() -> String {"\(self)"} @@ -80,11 +81,20 @@ struct BalancesSectionView { func loadPending(_ stack: CallStack) async -> () { if let transactions = try? await model.getTransactionsV2(stack.push("loadPending - \(balance.scopeInfo.url?.trimURL)"), scope: balance.scopeInfo, - filterByState: .nonfinal, + filterByState: .nonfinalApproved, includeRefreshes: developerMode) { withAnimation { pendingTransactions = transactions } } } + @MainActor + func loadScanned(_ stack: CallStack) async -> () { + if let transactions = try? await model.getTransactionsV2(stack.push("loadScanned - \(balance.scopeInfo.url?.trimURL)"), + scope: balance.scopeInfo, + filterByState: .nonfinalDialog, + includeRefreshes: developerMode) { + withAnimation { scannedTransactions = transactions } + } + } } extension BalancesSectionView: View { @@ -95,7 +105,7 @@ extension BalancesSectionView: View { #endif let scopeInfo = balance.scopeInfo - Group { + Group { let balanceDest = TransactionsListView(stack: stack.push("\(Self.className())()"), scope: scopeInfo, balance: balance, @@ -104,67 +114,76 @@ extension BalancesSectionView: View { oimEuro: oimEuro, transactions: $completedTransactions, reloadAllAction: loadCompleted) - Section { - if scopeInfo.type == .exchange { - let baseURL = scopeInfo.url?.trimURL ?? String(localized: "Unknown payment service", comment: "exchange url") - Text(baseURL) - .talerFont(.subheadline) - .foregroundColor(.secondary) - // .listRowSeparator(.hidden) - } - BalanceCellV(stack: stack.push("BalanceCell"), - scope: balance.scopeInfo, - amount: balance.available, - historyTapped: $historyTapped, - balanceIndex: balanceIndex, - balanceDest: balanceDest) -// .listRowSeparator(.hidden) -// .border(.red) - - if pendingTransactions.count > 0 { - BalancesPendingRowV(//symLog: symLog, - stack: stack.push(), - balance: balance, - selectedBalance: $selectedBalance, - pendingTransactions: $pendingTransactions, - reloadPending: loadPending) - .padding(.leading, ICONLEADING) - } - } header: { - BarGraphHeader(stack: stack.push(), - scope: scopeInfo, - reloadTransactions: $reloadTransactions) - }.id(sectionID) - .listRowSeparator(.hidden) - .task(id: reloadTransactions + 1_000_000) { - symLog.log(".task for BalancesSectionView - load recent+completed+pending") - await loadRecent(stack.push(".task - load recent")) - await loadCompleted(stack.push(".task - load completed")) - await loadPending(stack.push(".task - load pending")) - } - /// if there is only one currency, then show MAXRECENT recent transactions - if sectionCount == 1 && recentTransactions.count > 0 { Section { - let _ = symLog.log("recent transactions") - TransactionsArraySliceV(symLog: symLog, - logger: logger, + if scopeInfo.type == .exchange { + let baseURL = scopeInfo.url?.trimURL ?? String(localized: "Unknown payment service", comment: "exchange url") + Text(baseURL) + .talerFont(.subheadline) + .foregroundColor(.secondary) + // .listRowSeparator(.hidden) + } + BalanceCellV(stack: stack.push("BalanceCell"), + scope: balance.scopeInfo, + amount: balance.available, + historyTapped: $historyTapped, + balanceIndex: balanceIndex, + balanceDest: balanceDest) +// .listRowSeparator(.hidden) +// .border(.red) + + if pendingTransactions.count > 0 { + BalancesPendingRowV(//symLog: symLog, stack: stack.push(), - scope: scopeInfo, - transactions: $recentTransactions, - reloadAllAction: loadRecent) - .padding(.leading, ICONLEADING) - } header: { - if !minimalistic { - let recentHeader = recentTransactions.count > 1 - ? String(localized: "Recent transactions", comment: "section header plural") - : String(localized: "Recent transaction", comment: "section header singular") - Text(recentHeader) - .talerFont(.title3) - .foregroundColor(WalletColors().secondary(colorScheme, colorSchemeContrast)) + balance: balance, + selectedBalance: $selectedBalance, + pendingTransactions: $pendingTransactions, + reloadPending: loadPending) + .padding(.leading, ICONLEADING) } + if scannedTransactions.count > 0 { + BalancesDialogRowV(stack: stack.push(), + balance: balance, + selectedBalance: $selectedBalance, + scannedTransactions: $scannedTransactions, + reloadScanned: loadScanned) + .padding(.leading, ICONLEADING) + } + } header: { + BarGraphHeader(stack: stack.push(), + scope: scopeInfo, + reloadTransactions: $reloadTransactions) + }.id(sectionID) + .listRowSeparator(.hidden) + .task(id: reloadTransactions + 1_000_000) { + symLog.log(".task for BalancesSectionView - load recent+completed+pending") + await loadRecent(stack.push(".task - load recent")) + await loadCompleted(stack.push(".task - load completed")) // TODO: only in TX list view + await loadPending(stack.push(".task - load pending")) + await loadScanned(stack.push(".task - load scanned")) } - } // recent transactions - } + /// if there is only one currency, then show MAXRECENT recent transactions + if sectionCount == 1 && recentTransactions.count > 0 { + Section { + let _ = symLog.log("recent transactions") + TransactionsArraySliceV(symLog: symLog, + logger: logger, + stack: stack.push(), + scope: scopeInfo, + transactions: $recentTransactions, + reloadAllAction: loadRecent) + .padding(.leading, ICONLEADING) + } header: { + if !minimalistic { + let recentHeader = recentTransactions.count > 1 + ? String(localized: "Recent transactions", comment: "section header plural") + : String(localized: "Recent transaction", comment: "section header singular") + Text(recentHeader) + .talerFont(.title3) + .foregroundColor(WalletColors().secondary(colorScheme, colorSchemeContrast)) + } + } + } // recent transactions + } } // body } // BalancesSectionView // MARK: -