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

only allow one scroll wheel picker open at a time in override views

Mike Plante 1 год назад
Родитель
Сommit
83feb17f47

+ 14 - 5
FreeAPS/Sources/Modules/OverrideConfig/View/AddOverrideForm.swift

@@ -122,7 +122,7 @@ struct AddOverrideForm: View {
                             .foregroundColor(!displayPickerDuration ? .primary : .accentColor)
                     }
                     .onTapGesture {
-                        displayPickerDuration.toggle()
+                        displayPickerDuration = toggleScrollWheel(displayPickerDuration)
                     }
 
                     if displayPickerDuration {
@@ -164,7 +164,7 @@ struct AddOverrideForm: View {
                         .foregroundColor(!displayPickerPercentage ? .primary : .accentColor)
                 }
                 .onTapGesture {
-                    displayPickerPercentage.toggle()
+                    displayPickerPercentage = toggleScrollWheel(displayPickerPercentage)
                 }
 
                 if displayPickerPercentage {
@@ -251,7 +251,7 @@ struct AddOverrideForm: View {
                         .foregroundColor(!displayPickerTarget ? .primary : .accentColor)
                     }
                     .onTapGesture {
-                        displayPickerTarget.toggle()
+                        displayPickerTarget = toggleScrollWheel(displayPickerTarget)
                     }
 
                     if displayPickerTarget {
@@ -348,7 +348,7 @@ struct AddOverrideForm: View {
                         Spacer()
                     }
                     .onTapGesture {
-                        displayPickerDisableSmbSchedule.toggle()
+                        displayPickerDisableSmbSchedule = toggleScrollWheel(displayPickerDisableSmbSchedule)
                     }
 
                     if displayPickerDisableSmbSchedule {
@@ -407,7 +407,7 @@ struct AddOverrideForm: View {
                                 .foregroundColor(!displayPickerSmbMinutes ? .primary : .accentColor)
                         }
                         .onTapGesture {
-                            displayPickerSmbMinutes.toggle()
+                            displayPickerSmbMinutes = toggleScrollWheel(displayPickerSmbMinutes)
                         }
 
                         if displayPickerSmbMinutes {
@@ -493,6 +493,15 @@ struct AddOverrideForm: View {
         }
     }
 
+    private func toggleScrollWheel(_ toggle: Bool) -> Bool {
+        displayPickerDuration = false
+        displayPickerPercentage = false
+        displayPickerTarget = false
+        displayPickerDisableSmbSchedule = false
+        displayPickerSmbMinutes = false
+        return !toggle
+    }
+
     private func totalDurationInMinutes() -> Int {
         let durationTotal = (durationHours * 60) + durationMinutes
         return max(0, durationTotal)

+ 21 - 9
FreeAPS/Sources/Modules/OverrideConfig/View/EditOverrideForm.swift

@@ -188,7 +188,7 @@ struct EditOverrideForm: View {
                             .foregroundColor(!displayPickerDuration ? .primary : .accentColor)
                     }
                     .onTapGesture {
-                        displayPickerDuration.toggle()
+                        displayPickerDuration = toggleScrollWheel(displayPickerDuration)
                     }
 
                     if displayPickerDuration {
@@ -249,7 +249,7 @@ struct EditOverrideForm: View {
                         .foregroundColor(!displayPickerPercentage ? .primary : .accentColor)
                 }
                 .onTapGesture {
-                    displayPickerPercentage.toggle()
+                    displayPickerPercentage = toggleScrollWheel(displayPickerPercentage)
                 }
 
                 if displayPickerPercentage {
@@ -336,7 +336,9 @@ struct EditOverrideForm: View {
                         options: generateTargetPickerValues(),
                         units: state.units,
                         hasChanges: $hasChanges,
-                        targetStep: $targetStep
+                        targetStep: $targetStep,
+                        displayPickerTarget: $displayPickerTarget,
+                        toggleScrollWheel: toggleScrollWheel
                     )
                 }
             }
@@ -391,7 +393,7 @@ struct EditOverrideForm: View {
                         .foregroundColor(!displayPickerDisableSmbSchedule ? .primary : .accentColor)
                     }
                     .onTapGesture {
-                        displayPickerDisableSmbSchedule.toggle()
+                        displayPickerDisableSmbSchedule = toggleScrollWheel(displayPickerDisableSmbSchedule)
                     }
 
                     if displayPickerDisableSmbSchedule {
@@ -469,7 +471,7 @@ struct EditOverrideForm: View {
                                 .foregroundColor(!displayPickerSmbMinutes ? .primary : .accentColor)
                         }
                         .onTapGesture {
-                            displayPickerSmbMinutes.toggle()
+                            displayPickerSmbMinutes = toggleScrollWheel(displayPickerSmbMinutes)
                         }
 
                         if displayPickerSmbMinutes {
@@ -630,6 +632,15 @@ struct EditOverrideForm: View {
         uamMinutes = override.uamMinutes?.decimalValue ?? state.defaultUamMinutes
     }
 
+    private func toggleScrollWheel(_ toggle: Bool) -> Bool {
+        displayPickerDuration = false
+        displayPickerPercentage = false
+        displayPickerTarget = false
+        displayPickerDisableSmbSchedule = false
+        displayPickerSmbMinutes = false
+        return !toggle
+    }
+
     func generateTargetPickerValues() -> [Decimal] {
         var values: [Decimal] = []
         var currentValue: Double = 72
@@ -670,7 +681,8 @@ struct TargetPicker: View {
     let units: GlucoseUnits
     @Binding var hasChanges: Bool
     @Binding var targetStep: Decimal
-    @State private var isDisplayed: Bool = false
+    @Binding var displayPickerTarget: Bool
+    var toggleScrollWheel: (_ picker: Bool) -> Bool
 
     var body: some View {
         HStack {
@@ -679,12 +691,12 @@ struct TargetPicker: View {
             Text(
                 (units == .mgdL ? selection.description : selection.formattedAsMmolL) + " " + units.rawValue
             )
-            .foregroundColor(!isDisplayed ? .primary : .accentColor)
+            .foregroundColor(!displayPickerTarget ? .primary : .accentColor)
         }
         .onTapGesture {
-            isDisplayed.toggle()
+            displayPickerTarget = toggleScrollWheel(displayPickerTarget)
         }
-        if isDisplayed {
+        if displayPickerTarget {
             HStack {
                 // Radio buttons and text on the left side
                 VStack(alignment: .leading) {