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

Fix duplicate picker values for mmol/L users

Deniz Cengiz 1 год назад
Родитель
Сommit
83681bcd42

+ 6 - 1
FreeAPS/Sources/Models/DecimalPickerSettings.swift

@@ -8,7 +8,7 @@ class PickerSettingsProvider: ObservableObject {
     private init() {} // Private init to enforce singleton pattern
 
     // Helper function to generate values for the picker
-    func generatePickerValues(from setting: PickerSetting) -> [Decimal] {
+    func generatePickerValues(from setting: PickerSetting, units: GlucoseUnits) -> [Decimal] {
         var values: [Decimal] = []
         var currentValue = setting.min
 
@@ -17,6 +17,11 @@ class PickerSettingsProvider: ObservableObject {
             currentValue += setting.step
         }
 
+        // Glucose values are stored as mg/dl values, so Integers.
+        // Filter out odd numbers to avoid duplicate mmol/L values due to rounding.
+        if units == .mmolL, setting.type == PickerSetting.PickerSettingType.glucose {
+            values = values.filter { Int($0) % 2 == 0 }
+        }
         return values
     }
 }

+ 3 - 3
FreeAPS/Sources/Modules/MealSettings/View/MealSettingsRootView.swift

@@ -83,7 +83,7 @@ extension MealSettings {
                                 let setting = PickerSettingsProvider.shared.settings.maxCarbs
                                 Picker(selection: $state.maxCarbs, label: Text("")) {
                                     ForEach(
-                                        PickerSettingsProvider.shared.generatePickerValues(from: setting),
+                                        PickerSettingsProvider.shared.generatePickerValues(from: setting, units: state.units),
                                         id: \.self
                                     ) { value in
                                         Text("\(value.description)").tag(value)
@@ -117,7 +117,7 @@ extension MealSettings {
                                     let setting = PickerSettingsProvider.shared.settings.maxFat
                                     Picker(selection: $state.maxCarbs, label: Text("")) {
                                         ForEach(
-                                            PickerSettingsProvider.shared.generatePickerValues(from: setting),
+                                            PickerSettingsProvider.shared.generatePickerValues(from: setting, units: state.units),
                                             id: \.self
                                         ) { value in
                                             Text("\(value.description)").tag(value)
@@ -150,7 +150,7 @@ extension MealSettings {
                                     let setting = PickerSettingsProvider.shared.settings.maxProtein
                                     Picker(selection: $state.maxProtein, label: Text("")) {
                                         ForEach(
-                                            PickerSettingsProvider.shared.generatePickerValues(from: setting),
+                                            PickerSettingsProvider.shared.generatePickerValues(from: setting, units: state.units),
                                             id: \.self
                                         ) { value in
                                             Text("\(value.description)").tag(value)

+ 2 - 2
FreeAPS/Sources/Modules/UserInterfaceSettings/View/UserInterfaceSettingsRootView.swift

@@ -129,7 +129,7 @@ extension UserInterfaceSettings {
 
                             Picker(selection: $state.low, label: Text("")) {
                                 ForEach(
-                                    PickerSettingsProvider.shared.generatePickerValues(from: setting),
+                                    PickerSettingsProvider.shared.generatePickerValues(from: setting, units: state.units),
                                     id: \.self
                                 ) { value in
                                     let displayValue = state.units == .mgdL ? value : value.asMmolL
@@ -163,7 +163,7 @@ extension UserInterfaceSettings {
                             let setting = PickerSettingsProvider.shared.settings.high
                             Picker(selection: $state.high, label: Text("")) {
                                 ForEach(
-                                    PickerSettingsProvider.shared.generatePickerValues(from: setting),
+                                    PickerSettingsProvider.shared.generatePickerValues(from: setting, units: state.units),
                                     id: \.self
                                 ) { value in
                                     let displayValue = state.units == .mgdL ? value : value.asMmolL

+ 1 - 1
FreeAPS/Sources/Views/SettingInputSection.swift

@@ -199,7 +199,7 @@ struct SettingInputSection: View {
 
             if displayPicker.wrappedValue {
                 Picker(selection: decimalValue, label: Text("")) {
-                    ForEach(pickerSettingsProvider.generatePickerValues(from: setting), id: \.self) { value in
+                    ForEach(pickerSettingsProvider.generatePickerValues(from: setting, units: self.units), id: \.self) { value in
                         displayText(for: setting, decimalValue: value).tag(value)
                     }
                 }

+ 2 - 2
Trio.xcworkspace/xcshareddata/swiftpm/Package.resolved

@@ -1,5 +1,5 @@
 {
-  "originHash" : "f5c836c216c4ca7d356e3777e58d6d4f9502b03f3974891349eb775f4c4cf750",
+  "originHash" : "59ac7eba66375d6eb406e758cb0b9964f4b3b0ae45c5665596f00384c32262b9",
   "pins" : [
     {
       "identity" : "cryptoswift",
@@ -49,7 +49,7 @@
     {
       "identity" : "swiftcharts",
       "kind" : "remoteSourceControl",
-      "location" : "https://github.com/ivanschuetz/SwiftCharts",
+      "location" : "https://github.com/ivanschuetz/SwiftCharts.git",
       "state" : {
         "branch" : "master",
         "revision" : "c354c1945bb35a1f01b665b22474f6db28cba4a2"