commit e7dfcd59b5ad3453f0e5c772224f6eff1a91e899
parent 7b974dd1a9bbeb30d0a09a6b8e5b076ef184be88
Author: Marc Stibane <marc@taler.net>
Date: Wed, 25 Sep 2024 08:58:44 +0200
dismiss after delete
Diffstat:
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