commit ef9b59f24bc9479543f2bfd1d97b870c2bda2574
parent 8edd36d8c090ebb67c7ec72988d8fe65228cd6c4
Author: Marc Stibane <marc@taler.net>
Date: Tue, 27 Jun 2023 14:24:06 +0200
failTransaction
Diffstat:
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: {