Explorar el Código

add confirmationDialog for deleting override preset

Also cancels override first if it is currently running
Mike Plante hace 1 año
padre
commit
47a91c8b14

+ 41 - 3
FreeAPS/Sources/Modules/OverrideConfig/View/OverrideRootView.swift

@@ -15,6 +15,7 @@ extension OverrideConfig {
         @State private var selectedPresetID: String?
         @State private var selectedOverride: OverrideStored?
         // temp targets
+        @State private var isConfirmDeleteShown = false
         @State private var isPromptPresented = false
         @State private var isRemoveAlertPresented = false
         @State private var removeAlert: Alert?
@@ -148,9 +149,8 @@ extension OverrideConfig {
                     overridesView(for: preset)
                         .swipeActions(edge: .trailing, allowsFullSwipe: true) {
                             Button(role: .none) {
-                                Task {
-                                    await state.invokeOverridePresetDeletion(preset.objectID)
-                                }
+                                selectedOverride = preset
+                                isConfirmDeleteShown = true
                             } label: {
                                 Label("Delete", systemImage: "trash")
                                     .tint(.red)
@@ -166,6 +166,44 @@ extension OverrideConfig {
                         }
                 }
                 .onMove(perform: state.reorderOverride)
+                .confirmationDialog(
+                    "Delete the preset \"\(selectedOverride?.name ?? "")\"?",
+                    isPresented: $isConfirmDeleteShown,
+                    titleVisibility: .visible
+                ) {
+                    if let itemToDelete = selectedOverride {
+                        Button(
+                            state.currentActiveOverride == selectedOverride ? "Cancel and Delete" : "Delete",
+                            role: .destructive
+                        ) {
+                            if state.currentActiveOverride == selectedOverride {
+                                Task {
+                                    // Save cancelled Override in OverrideRunStored Entity
+                                    // Cancel ALL active Override
+                                    await state.disableAllActiveOverrides(createOverrideRunEntry: true)
+                                }
+                            }
+                            // Perform the delete action
+                            Task {
+                                await state.invokeOverridePresetDeletion(itemToDelete.objectID)
+                            }
+                            // Reset the selected item after deletion
+                            selectedOverride = nil
+                        }
+                    }
+                    Button("Cancel", role: .cancel) {
+                        // Dismiss the dialog without action
+                        selectedOverride = nil
+                    }
+                } message: {
+                    if state.currentActiveOverride == selectedOverride {
+                        Text(
+                            state
+                                .currentActiveOverride == selectedOverride ?
+                                "This preset is currently running. Deleting will cancel it." : ""
+                        )
+                    }
+                }
                 .listRowBackground(Color.chart)
             } header: {
                 Text("Presets")