Просмотр исходного кода

move glucose deletion to state model and add alert

polscm32 2 лет назад
Родитель
Сommit
6c533153ab

+ 22 - 0
FreeAPS/Sources/Modules/DataTable/DataTableStateModel.swift

@@ -31,6 +31,28 @@ extension DataTable {
             broadcaster.register(DeterminationObserver.self, observer: self)
         }
 
+        @MainActor func invokeGlucoseDeletionTask(_ glucose: GlucoseStored) {
+            Task {
+                do {
+                    await deleteGlucose(glucose)
+                }
+            }
+        }
+
+        func deleteGlucose(_ glucose: GlucoseStored) async {
+            do {
+                coredataContext.delete(glucose)
+                try coredataContext.save()
+                debugPrint(
+                    "Data Table State: \(#function) \(DebuggingIdentifiers.succeeded) deleted glucose from core data"
+                )
+            } catch {
+                debugPrint(
+                    "Data Table State: \(#function) \(DebuggingIdentifiers.failed) error while deleting glucose from core data"
+                )
+            }
+        }
+
         @MainActor func invokeCarbDeletionTask(_ treatment: CarbEntryStored) {
             Task {
                 do {

+ 33 - 2
FreeAPS/Sources/Modules/DataTable/View/DataTableRootView.swift

@@ -11,7 +11,7 @@ extension DataTable {
         @State private var alertMessage: String = ""
         @State private var alertTreatmentToDelete: PumpEventStored?
         @State private var alertCarbEntryToDelete: CarbEntryStored?
-        @State private var alertGlucoseToDelete: Glucose?
+        @State private var alertGlucoseToDelete: GlucoseStored?
 
         @State private var showFutureEntries: Bool = false // default to hide future entries
         @State private var showManualGlucose: Bool = false
@@ -238,8 +238,39 @@ extension DataTable {
                             Spacer()
 
                             Text(dateFormatter.string(from: glucose.date ?? Date()))
+                        }.swipeActions {
+                            Button(
+                                "Delete",
+                                systemImage: "trash.fill",
+                                role: .none,
+                                action: {
+                                    alertGlucoseToDelete = glucose
+
+                                    alertTitle = "Delete Glucose?"
+                                    alertMessage = dateFormatter
+                                        .string(from: glucose.date ?? Date()) + ", " +
+                                        (numberFormatter.string(for: glucose.glucose) ?? "0")
+
+                                    isRemoveHistoryItemAlertPresented = true
+                                }
+                            ).tint(.red)
                         }
-                    }.onDelete(perform: deleteGlucose)
+                        .alert(
+                            Text(NSLocalizedString(alertTitle, comment: "")),
+                            isPresented: $isRemoveHistoryItemAlertPresented
+                        ) {
+                            Button("Cancel", role: .cancel) {}
+                            Button("Delete", role: .destructive) {
+                                guard let glucoseToDelete = alertGlucoseToDelete else {
+                                    debug(.default, "Cannot gracefully unwrap alertCarbEntryToDelete!")
+                                    return
+                                }
+                                state.invokeGlucoseDeletionTask(glucoseToDelete)
+                            }
+                        } message: {
+                            Text("\n" + NSLocalizedString(alertMessage, comment: ""))
+                        }
+                    }
                 } else {
                     HStack {
                         Text("No data.")