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

Fix rounding of glucose entries. CGM readings and Manual entries.

(cherry picked from commit 7ca62a85ef06b2c94c96a4211daf3129c1225c7c)
Jon Mårtensson 2 лет назад
Родитель
Сommit
e0488c2b99
1 измененных файлов с 28 добавлено и 12 удалено
  1. 28 12
      FreeAPS/Sources/Modules/DataTable/View/DataTableRootView.swift

+ 28 - 12
FreeAPS/Sources/Modules/DataTable/View/DataTableRootView.swift

@@ -29,10 +29,24 @@ extension DataTable {
         private var glucoseFormatter: NumberFormatter {
             let formatter = NumberFormatter()
             formatter.numberStyle = .decimal
-            formatter.maximumFractionDigits = 0
+
+            if state.units == .mmolL {
+                formatter.maximumFractionDigits = 1
+                formatter.roundingMode = .halfUp
+            } else {
+                formatter.maximumFractionDigits = 0
+            }
+            return formatter
+        }
+
+        private var manualGlucoseFormatter: NumberFormatter {
+            let formatter = NumberFormatter()
+            formatter.numberStyle = .decimal
             if state.units == .mmolL {
                 formatter.maximumFractionDigits = 1
                 formatter.roundingMode = .ceiling
+            } else {
+                formatter.maximumFractionDigits = 0
             }
             return formatter
         }
@@ -152,7 +166,7 @@ extension DataTable {
                                 DecimalTextField(
                                     " ... ",
                                     value: $state.manualGlucose,
-                                    formatter: glucoseFormatter,
+                                    formatter: manualGlucoseFormatter,
                                     autofocus: true,
                                     cleanInput: true
                                 )
@@ -317,7 +331,12 @@ extension DataTable {
         @ViewBuilder private func glucoseView(_ item: Glucose, isManual: BloodGlucose) -> some View {
             HStack {
                 Text(item.glucose.glucose.map {
-                    glucoseFormatter.string(from: Double(
+                    (
+                        isManual.type == GlucoseType.manual.rawValue ?
+                            manualGlucoseFormatter :
+                            glucoseFormatter
+                    )
+                    .string(from: Double(
                         state.units == .mmolL ? $0.asMmolL : Decimal($0)
                     ) as NSNumber)!
                 } ?? "--")
@@ -337,14 +356,15 @@ extension DataTable {
                     role: .none,
                     action: {
                         alertGlucoseToDelete = item
-
-                        let valueText = glucoseFormatter.string(from: Double(
+                        let valueText = (
+                            isManual.type == GlucoseType.manual.rawValue ?
+                                manualGlucoseFormatter :
+                                glucoseFormatter
+                        ).string(from: Double(
                             state.units == .mmolL ? Double(item.glucose.value.asMmolL) : item.glucose.value
                         ) as NSNumber)! + " " + state.units.rawValue
-
                         alertTitle = "Delete Glucose?"
                         alertMessage = dateFormatter.string(from: item.glucose.dateString) + ", " + valueText
-
                         isRemoveHistoryItemAlertPresented = true
                     }
                 ).tint(.red)
@@ -355,14 +375,10 @@ extension DataTable {
             ) {
                 Button("Cancel", role: .cancel) {}
                 Button("Delete", role: .destructive) {
-                    // gracefully unwrap value here.
-                    // value cannot ever really be nil because it is an existing(!) table entry
-                    // but just to be sure.
                     guard let glucoseToDelete = alertGlucoseToDelete else {
-                        print("Cannot gracefully unwrap alertTreatmentToDelete!")
+                        print("Cannot unwrap alertTreatmentToDelete!")
                         return
                     }
-
                     state.deleteGlucose(glucoseToDelete)
                 }
             } message: {