ソースを参照

Merge branch 'dev' into fix/delete-glucose-ns

Deniz Cengiz 2 週間 前
コミット
cecbcc715b

+ 1 - 1
Config.xcconfig

@@ -19,7 +19,7 @@ TRIO_APP_GROUP_ID = group.org.nightscout.$(DEVELOPMENT_TEAM).trio.trio-app-group
 
 // The developers set the version numbers, please leave them alone
 APP_VERSION = 0.7.0
-APP_DEV_VERSION = 0.7.0
+APP_DEV_VERSION = 0.7.0.1
 APP_BUILD_NUMBER = 1
 COPYRIGHT_NOTICE =
 

+ 6 - 3
Trio/Sources/Modules/Adjustments/View/Overrides/AdjustmentsRootView+Overrides.swift

@@ -19,8 +19,11 @@ extension Adjustments.RootView {
                 overridesView(for: preset, showCheckMark: showOverrideCheckmark) {
                     enactOverridePreset(preset)
                 }
+                .contextMenu {
+                    actionButtonsForOverrides(for: preset)
+                }
                 .swipeActions(edge: .trailing, allowsFullSwipe: true) {
-                    swipeActionsForOverrides(for: preset)
+                    actionButtonsForOverrides(for: preset)
                 }
             }
             .onMove(perform: state.reorderOverride)
@@ -88,9 +91,9 @@ extension Adjustments.RootView {
         }
     }
 
-    func swipeActionsForOverrides(for preset: OverrideStored) -> some View {
+    func actionButtonsForOverrides(for preset: OverrideStored) -> some View {
         Group {
-            Button(role: .none) {
+            Button(role: .destructive) {
                 selectedOverride = preset
                 isConfirmDeletePresented = true
             } label: {

+ 7 - 4
Trio/Sources/Modules/Adjustments/View/TempTargets/AdjustmentsRootView+TempTargets.swift

@@ -21,7 +21,7 @@ extension Adjustments.RootView {
             ForEach(state.scheduledTempTargets) { tempTarget in
                 tempTargetView(for: tempTarget)
                     .swipeActions(edge: .trailing, allowsFullSwipe: true) {
-                        swipeActionsForTempTargets(for: tempTarget)
+                        actionButtonsForTempTargets(for: tempTarget)
                     }
             }
             .listRowBackground(Color.chart)
@@ -36,8 +36,11 @@ extension Adjustments.RootView {
                 tempTargetView(for: preset, showCheckmark: showTempTargetCheckmark) {
                     enactTempTargetPreset(preset)
                 }
+                .contextMenu {
+                    actionButtonsForTempTargets(for: preset)
+                }
                 .swipeActions(edge: .trailing, allowsFullSwipe: true) {
-                    swipeActionsForTempTargets(for: preset)
+                    actionButtonsForTempTargets(for: preset)
                 }
             }
             .onMove(perform: state.reorderTempTargets)
@@ -74,9 +77,9 @@ extension Adjustments.RootView {
         }
     }
 
-    private func swipeActionsForTempTargets(for tempTarget: TempTargetStored) -> some View {
+    private func actionButtonsForTempTargets(for tempTarget: TempTargetStored) -> some View {
         Group {
-            Button {
+            Button(role: .destructive) {
                 Task {
                     selectedTempTarget = tempTarget
                     isConfirmDeletePresented = true

+ 95 - 2
Trio/Sources/Modules/History/View/HistoryRootView.swift

@@ -506,7 +506,27 @@ extension History {
                             Spacer()
 
                             Text(Formatter.dateFormatter.string(from: glucose.date ?? Date()))
-                        }.swipeActions {
+                        }
+                        .contextMenu {
+                            Button(
+                                "Delete",
+                                systemImage: "trash.fill",
+                                role: .destructive,
+                                action: {
+                                    alertGlucoseToDelete = glucose
+
+                                    let glucoseToDisplay = state.units == .mgdL ? glucose.glucose
+                                        .description : Int(glucose.glucose).formattedAsMmolL
+                                    alertTitle = String(localized: "Delete Glucose?", comment: "Alert title for deleting glucose")
+                                    alertMessage = Formatter.dateFormatter
+                                        .string(from: glucose.date ?? Date()) + ", " + glucoseToDisplay + " " + state.units
+                                        .rawValue
+
+                                    isRemoveHistoryItemAlertPresented = true
+                                }
+                            ).tint(.red)
+                        }
+                        .swipeActions {
                             Button(
                                 "Delete",
                                 systemImage: "trash.fill",
@@ -667,6 +687,34 @@ extension History {
                 Spacer()
                 Text(Formatter.dateFormatter.string(from: item.timestamp ?? Date())).moveDisabled(true)
             }
+            .contextMenu {
+                if item.bolus != nil {
+                    Button(
+                        "Delete",
+                        systemImage: "trash.fill",
+                        role: .destructive,
+                        action: {
+                            alertTreatmentToDelete = item
+                            alertTitle = String(localized: "Delete Insulin?", comment: "Alert title for deleting insulin")
+                            alertMessage = Formatter.dateFormatter
+                                .string(from: item.timestamp ?? Date()) + ", " +
+                                (Formatter.decimalFormatterWithThreeFractionDigits.string(from: item.bolus?.amount ?? 0) ?? "0") +
+                                String(localized: " U", comment: "Insulin unit")
+
+                            if let bolus = item.bolus {
+                                // Add text snippet, so that alert message is more descriptive for SMBs
+                                alertMessage += bolus.isSMB ? String(
+                                    localized: " SMB",
+                                    comment: "Super Micro Bolus indicator in delete alert"
+                                )
+                                    : ""
+                            }
+
+                            isRemoveHistoryItemAlertPresented = true
+                        }
+                    ).tint(.red)
+                }
+            }
             .swipeActions {
                 if item.bolus != nil {
                     Button(
@@ -746,12 +794,57 @@ extension History {
                     }.padding(.top, 5).foregroundColor(.secondary)
                 }
             }
-            .swipeActions {
+            .contextMenu {
                 Button(
                     "Delete",
                     systemImage: "trash.fill",
+                    role: .destructive,
+                    action: {
+                        alertCarbEntryToDelete = meal
+
+                        // meal is carb-only
+                        if meal.fpuID == nil {
+                            alertTitle = String(localized: "Delete Carbs?", comment: "Alert title for deleting carbs")
+                            alertMessage = Formatter.dateFormatter
+                                .string(from: meal.date ?? Date()) + ", " +
+                                (Formatter.decimalFormatterWithTwoFractionDigits.string(for: meal.carbs) ?? "0") +
+                                String(localized: " g", comment: "gram of carbs")
+                        }
+                        // meal is complex-meal or fpu-only
+                        else {
+                            alertTitle = meal.isFPU ? String(
+                                localized: "Delete Carbs Equivalents?",
+                                comment: "Alert title for deleting carb equivalents"
+                            )
+                                : String(localized: "Delete Carbs?", comment: "Alert title for deleting carbs")
+                            alertMessage = String(
+                                localized: "All FPUs and the carbs of the meal will be deleted.",
+                                comment: "Alert message for meal deletion"
+                            )
+                        }
+
+                        isRemoveHistoryItemAlertPresented = true
+                    }
+                ).tint(.red)
+
+                Button(
+                    "Edit",
+                    systemImage: "pencil",
                     role: .none,
                     action: {
+                        state.carbEntryToEdit = meal
+                        state.showCarbEntryEditor = true
+                    }
+                )
+                .tint(!state.settingsManager.settings.useFPUconversion && meal.isFPU ? Color(.systemGray4) : Color.blue)
+                .disabled(!state.settingsManager.settings.useFPUconversion && meal.isFPU)
+            }
+            .swipeActions {
+                Button(
+                    "Delete",
+                    systemImage: "trash.fill",
+                    role: .destructive,
+                    action: {
                         alertCarbEntryToDelete = meal
 
                         // meal is carb-only

+ 12 - 0
Trio/Sources/Modules/Onboarding/View/TherapySettingEditorView.swift

@@ -96,6 +96,18 @@ struct TherapySettingEditorView: View {
                                 .transition(.slide)
                             }
                         }
+                        .contextMenu {
+                            if let index = items.firstIndex(where: { $0.id == item.id }), items.count > 1 {
+                                Button(role: .destructive) {
+                                    items.remove(at: index)
+                                    selectedItemID = nil
+                                    validateTherapySettingItems()
+                                } label: {
+                                    Label("Delete", systemImage: "trash")
+                                }
+                                .tint(.red)
+                            }
+                        }
                         .swipeActions(edge: .trailing, allowsFullSwipe: true) {
                             if let index = items.firstIndex(where: { $0.id == item.id }), items.count > 1 {
                                 Button(role: .destructive) {