taler-ios

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

commit e7dfcd59b5ad3453f0e5c772224f6eff1a91e899
parent 7b974dd1a9bbeb30d0a09a6b8e5b076ef184be88
Author: Marc Stibane <marc@taler.net>
Date:   Wed, 25 Sep 2024 08:58:44 +0200

dismiss after delete

Diffstat:
MTalerWallet1/Views/HelperViews/TransactionButton.swift | 31+++++++++++++++++--------------
MTalerWallet1/Views/Transactions/TransactionSummaryV.swift | 54++++++++++++++++++++++++++++++++++++++++++------------
2 files changed, 59 insertions(+), 26 deletions(-)

diff --git a/TalerWallet1/Views/HelperViews/TransactionButton.swift b/TalerWallet1/Views/HelperViews/TransactionButton.swift @@ -57,6 +57,7 @@ struct TransactionButton: View { let transactionId: String let command: TxAction let warning: String? + @Binding var didExecute: Bool let action: (_ transactionId: String, _ viewHandles: Bool) async throws -> Void @State private var disabled: Bool = false @@ -69,6 +70,7 @@ struct TransactionButton: View { if let _ = try? await action(transactionId, false) { // symLog.log("\(executed) \(transactionId)") executed = true // change button text + didExecute = true } } } @@ -91,18 +93,19 @@ struct TransactionButton: View { } // MARK: - #if DEBUG -struct TransactionButton_Previews: PreviewProvider { - - static func action(_ transactionId: String, _ viewHandles: Bool) async throws { - print(transactionId) - } - - static var previews: some View { - List { - TransactionButton(transactionId: "Button pressed", command: .abort, - warning: "Are you sure you want to abort this transaction?", - action: action) - } - } -} +//struct TransactionButton_Previews: PreviewProvider { +// +// static func action(_ transactionId: String, _ viewHandles: Bool) async throws { +// print(transactionId) +// } +// +// static var previews: some View { +// List { +// TransactionButton(transactionId: "Button pressed", command: .abort, +// warning: "Are you sure you want to abort this transaction?", +// didExecute: <#Binding<Bool>#>, +// action: action) +// } +// } +//} #endif diff --git a/TalerWallet1/Views/Transactions/TransactionSummaryV.swift b/TalerWallet1/Views/Transactions/TransactionSummaryV.swift @@ -40,6 +40,7 @@ struct TransactionSummaryV: View { @Environment(\.colorScheme) private var colorScheme @Environment(\.colorSchemeContrast) private var colorSchemeContrast + @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode> @AppStorage("myListStyle") var myListStyle: MyListStyle = .automatic #if DEBUG @AppStorage("developerMode") var developerMode: Bool = true @@ -47,7 +48,9 @@ struct TransactionSummaryV: View { @AppStorage("developerMode") var developerMode: Bool = false #endif - @State var transaction: Transaction = Transaction(dummyCurrency: DEMOCURRENCY) + @State private var ignoreThis: Bool = false + @State private var didDelete: Bool = false + @State var transaction = Transaction(dummyCurrency: DEMOCURRENCY) @State var viewId = UUID() func loadTransaction() async { @@ -76,6 +79,15 @@ struct TransactionSummaryV: View { return false } + @MainActor + private func dismiss(_ stack: CallStack) { + if hasDone { // if this view is in a sheet then dissmiss the whole sheet + dismissTop(stack.push()) + } else { // on a NavigationStack just pop + presentationMode.wrappedValue.dismiss() + } + } + func checkReload(_ notification: Notification, _ logStr: String = "") { if let transition = notification.userInfo?[TRANSACTIONTRANSITION] as? TransactionTransition { if transition.transactionId == transactionId { // is the transition for THIS transaction? @@ -110,11 +122,17 @@ struct TransactionSummaryV: View { if developerMode { if transaction.isSuspendable { if let suspendAction { TransactionButton(transactionId: common.transactionId, - command: .suspend, warning: nil, action: suspendAction) + command: .suspend, + warning: nil, + didExecute: $ignoreThis, + action: suspendAction) } } if transaction.isResumable { if let resumeAction { TransactionButton(transactionId: common.transactionId, - command: .resume, warning: nil, action: resumeAction) + command: .resume, + warning: nil, + didExecute: $ignoreThis, + action: resumeAction) } } } // Suspend + Resume buttons Group { @@ -164,19 +182,31 @@ struct TransactionSummaryV: View { // warning: nil, action: abortAction) // } } // Retry button if transaction.isAbortable { if let abortAction { - TransactionButton(transactionId: common.transactionId, command: .abort, - warning: String(localized: "Are you sure you want to abort this transaction?"), - action: abortAction) + TransactionButton(transactionId: common.transactionId, + command: .abort, + warning: String(localized: "Are you sure you want to abort this transaction?"), + didExecute: $ignoreThis, + action: abortAction) } } // Abort button if transaction.isFailable { if let failAction { - TransactionButton(transactionId: common.transactionId, command: .fail, - warning: String(localized: "Are you sure you want to abandon this transaction?"), - action: failAction) + TransactionButton(transactionId: common.transactionId, + command: .fail, + warning: String(localized: "Are you sure you want to abandon this transaction?"), + didExecute: $ignoreThis, + action: failAction) } } // Fail button if transaction.isDeleteable { if let deleteAction { - TransactionButton(transactionId: common.transactionId, command: .delete, - warning: String(localized: "Are you sure you want to delete this transaction?"), - action: deleteAction) + TransactionButton(transactionId: common.transactionId, + command: .delete, + warning: String(localized: "Are you sure you want to delete this transaction?"), + didExecute: $didDelete, + action: deleteAction) + .onChange(of: didDelete) { wasDeleted in + if wasDeleted { + symLog.log("wasDeleted -> dismiss view") + dismiss(stack) + } + } } } // Delete button }.id(viewId) // change viewId to enforce a draw update .listStyle(myListStyle.style).anyView