taler-ios

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

commit ef9b59f24bc9479543f2bfd1d97b870c2bda2574
parent 8edd36d8c090ebb67c7ec72988d8fe65228cd6c4
Author: Marc Stibane <marc@taler.net>
Date:   Tue, 27 Jun 2023 14:24:06 +0200

failTransaction

Diffstat:
MTalerWallet1/Views/Balances/BalancesSectionView.swift | 10+++++++---
MTalerWallet1/Views/HelperViews/TransactionButton.swift | 5+++--
MTalerWallet1/Views/Transactions/TransactionDetailView.swift | 7++++++-
MTalerWallet1/Views/Transactions/TransactionsListView.swift | 28++++++++++++++++------------
4 files changed, 32 insertions(+), 18 deletions(-)

diff --git a/TalerWallet1/Views/Balances/BalancesSectionView.swift b/TalerWallet1/Views/Balances/BalancesSectionView.swift @@ -84,6 +84,7 @@ struct BalancesSectionView: View { let abortAction = model.abortTransactionT let suspendAction = model.suspendTransactionT // dummyTransaction let resumeAction = model.resumeTransactionT + let failAction = model.failTransaction Section { // if "KUDOS" == currency && !balance.available.isZero { @@ -110,8 +111,9 @@ struct BalancesSectionView: View { transactions: completedTransactions, reloadAllAction: reloadCompleted, reloadOneAction: reloadOneAction, - deleteAction: deleteAction, abortAction: abortAction, + deleteAction: deleteAction, + failAction: failAction, suspendAction: suspendAction, resumeAction: resumeAction) }, tag: 3, selection: $buttonSelected @@ -139,8 +141,9 @@ struct BalancesSectionView: View { transactions: pendingTransactions, reloadAllAction: reloadPending, reloadOneAction: reloadOneAction, - deleteAction: deleteAction, abortAction: abortAction, + deleteAction: deleteAction, + failAction: failAction, suspendAction: suspendAction, resumeAction: resumeAction) } @@ -170,8 +173,9 @@ struct BalancesSectionView: View { transactions: uncompletedTransactions, reloadAllAction: reloadUncompleted, reloadOneAction: reloadOneAction, - deleteAction: deleteAction, abortAction: abortAction, + deleteAction: deleteAction, + failAction: failAction, suspendAction: suspendAction, resumeAction: resumeAction) } diff --git a/TalerWallet1/Views/HelperViews/TransactionButton.swift b/TalerWallet1/Views/HelperViews/TransactionButton.swift @@ -14,9 +14,10 @@ struct TransactionButton: View { @State var disabled: Bool = false @State var executed: Bool = false var body: some View { + let isDestructive = (command == .delete) || (command == .fail) let role: ButtonRole? = (command == .abort) ? .cancel - : (command == .delete) ? .destructive - : nil + : isDestructive ? .destructive + : nil Button(role: role, action: { Task { disabled = true // don't try this more than once diff --git a/TalerWallet1/Views/Transactions/TransactionDetailView.swift b/TalerWallet1/Views/Transactions/TransactionDetailView.swift @@ -31,8 +31,9 @@ struct TransactionDetailView: View { @State var viewId = UUID() var reloadAction: ((_ transactionId: String) async throws -> Transaction) - var deleteAction: ((_ transactionId: String) async throws -> Void)? var abortAction: ((_ transactionId: String) async throws -> Void)? + var deleteAction: ((_ transactionId: String) async throws -> Void)? + var failAction: ((_ transactionId: String) async throws -> Void)? var doneAction: (() -> Void)? var suspendAction: ((_ transactionId: String) async throws -> Void)? var resumeAction: ((_ transactionId: String) async throws -> Void)? @@ -69,6 +70,10 @@ struct TransactionDetailView: View { TransactionButton(transactionId: common.transactionId, command: .abort, action: abortAction) } } // Abort button + if transaction.isFailable { if let failAction { + TransactionButton(transactionId: common.transactionId, + command: .fail, action: failAction) + } } // Delete button if transaction.isDeleteable { if let deleteAction { TransactionButton(transactionId: common.transactionId, command: .delete, action: deleteAction) diff --git a/TalerWallet1/Views/Transactions/TransactionsListView.swift b/TalerWallet1/Views/Transactions/TransactionsListView.swift @@ -14,8 +14,9 @@ struct TransactionsListView: View { let transactions: [Transaction] let reloadAllAction: () async -> () let reloadOneAction: ((_ transactionId: String) async throws -> Transaction) - let deleteAction: (_ transactionId: String) async throws -> () let abortAction: (_ transactionId: String) async throws -> () + let deleteAction: (_ transactionId: String) async throws -> () + let failAction: (_ transactionId: String) async throws -> () let suspendAction: (_ transactionId: String) async throws -> () let resumeAction: (_ transactionId: String) async throws -> () @@ -29,15 +30,16 @@ struct TransactionsListView: View { // let title = AttributedString(localized: "^[\(count) Ticket](inflect: true)") let title: String = "\(count) \(navTitle)" Content(symLog: symLog, - currency: currency, - transactions: transactions, - myListStyle: $myListStyle, - reloadAllAction: reloadAllAction, - reloadOneAction: reloadOneAction, - deleteAction: deleteAction, - abortAction: abortAction, - suspendAction: suspendAction, - resumeAction: resumeAction) + currency: currency, + transactions: transactions, + myListStyle: $myListStyle, + reloadAllAction: reloadAllAction, + reloadOneAction: reloadOneAction, + abortAction: abortAction, + deleteAction: deleteAction, + failAction: failAction, + suspendAction: suspendAction, + resumeAction: resumeAction) .navigationTitle(title) .navigationBarTitleDisplayMode(.large) // .inline .onAppear { @@ -58,8 +60,9 @@ extension TransactionsListView { @Binding var myListStyle: MyListStyle let reloadAllAction: () async -> () let reloadOneAction: ((_ transactionId: String) async throws -> Transaction) - let deleteAction: (_ transactionId: String) async throws -> () let abortAction: (_ transactionId: String) async throws -> () + let deleteAction: (_ transactionId: String) async throws -> () + let failAction: (_ transactionId: String) async throws -> () let suspendAction: (_ transactionId: String) async throws -> () let resumeAction: (_ transactionId: String) async throws -> () @@ -102,8 +105,9 @@ extension TransactionsListView { // pending may not be deleted, but only aborted TransactionDetailView(transactionId: transaction.id, reloadAction: reloadOneAction, - deleteAction: deleteAction, abortAction: abortAction, + deleteAction: deleteAction, + failAction: failAction, suspendAction: suspendAction, resumeAction: resumeAction) }} label: {