Jonas Björkert пре 1 година
родитељ
комит
e0daae6b7b

+ 21 - 3
LoopFollow/Alarm/AlarmEditing/Components/AlarmBGSection.swift

@@ -6,18 +6,25 @@ import HealthKit
 import SwiftUI
 
 struct AlarmBGSection: View {
+    // MARK: – public parameters
+
     let header: String?
     let footer: String?
     let title: String
     let range: ClosedRange<Double>
-    @Binding var value: Double
+
+    // MARK: – underlying optional binding
+
+    @Binding private var value: Double?
+
+    // MARK: – designated initialiser
 
     init(
         header: String? = nil,
         footer: String? = nil,
         title: String,
         range: ClosedRange<Double>,
-        value: Binding<Double>
+        value: Binding<Double?>
     ) {
         self.header = header
         self.footer = footer
@@ -26,6 +33,17 @@ struct AlarmBGSection: View {
         _value = value
     }
 
+    // MARK: – derived non-optional binding
+
+    private var nonOptional: Binding<Double> {
+        Binding(
+            get: { value ?? range.lowerBound },
+            set: { newVal in value = newVal }
+        )
+    }
+
+    // MARK: – view
+
     var body: some View {
         Section(
             header: header.map(Text.init),
@@ -34,7 +52,7 @@ struct AlarmBGSection: View {
             BGPicker(
                 title: title,
                 range: range,
-                value: $value
+                value: nonOptional
             )
         }
     }

+ 1 - 4
LoopFollow/Alarm/AlarmEditing/Editors/FastDropAlarmEditor.swift

@@ -21,10 +21,7 @@ struct FastDropAlarmEditor: View {
                 footer: "This is how much the glucose must drop to be considered a fast drop.",
                 title: "Falls by",
                 range: 3 ... 54,
-                value: Binding(
-                    get: { alarm.delta ?? 18 }, // This value is not used, the default value is set on the alarm
-                    set: { alarm.delta = $0 }
-                )
+                value: $alarm.delta
             )
 
             AlarmStepperSection(

+ 1 - 4
LoopFollow/Alarm/AlarmEditing/Editors/FastRiseAlarmEditor.swift

@@ -23,10 +23,7 @@ struct FastRiseAlarmEditor: View {
                 footer: "This is how much the glucose must rise to be considered a fast rise.",
                 title: "Rises by",
                 range: 3 ... 54,
-                value: Binding(
-                    get: { alarm.delta ?? 10 }, // This value has not effect since it is set as default on the alarm
-                    set: { alarm.delta = $0 }
-                )
+                value: $alarm.delta
             )
 
             AlarmStepperSection(

+ 1 - 4
LoopFollow/Alarm/AlarmEditing/Editors/HighBgAlarmEditor.swift

@@ -21,10 +21,7 @@ struct HighBgAlarmEditor: View {
                 footer: "The alert becomes eligible once any reading is at or above this value.",
                 title: "BG",
                 range: 120 ... 350,
-                value: Binding(
-                    get: { alarm.aboveBG ?? 180 }, // This value is not used, default is set on the alarm type
-                    set: { alarm.aboveBG = $0 }
-                )
+                value: $alarm.aboveBG
             )
 
             AlarmStepperSection(

+ 1 - 4
LoopFollow/Alarm/AlarmEditing/Editors/LowBgAlarmEditor.swift

@@ -18,10 +18,7 @@ struct LowBgAlarmEditor: View {
                 footer: "Alert when any reading or prediction is at or below this value.",
                 title: "BG",
                 range: 40 ... 150,
-                value: Binding(
-                    get: { alarm.belowBG ?? 80 },
-                    set: { alarm.belowBG = $0 }
-                )
+                value: $alarm.belowBG
             )
 
             AlarmStepperSection(

+ 1 - 1
LoopFollow/Storage/Storage+Migrate.swift

@@ -614,7 +614,7 @@ extension Storage {
 
         // core trigger parameters
         alarm.delta = Double(take("alertFastDropDelta", default: 10.0))
-        alarm.monitoringWindow = take("alertFastDropReadings", default: 3) - 1// store #readings
+        alarm.monitoringWindow = take("alertFastDropReadings", default: 3) - 1 // store #readings
         if take("alertFastDropUseLimit", default: false) {
             alarm.belowBG = Double(take("alertFastDropBelowBG", default: 120.0))
         }