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

Move duration to bottom of OR & TT UIs, ...

and change `Enact Temp Target` & `Enact Override` to `Start Temp Target` & `Start Override`

(Feedback from Matt & Deniz)
Mike Plante 1 год назад
Родитель
Сommit
c68cffe43f
28 измененных файлов с 247 добавлено и 247 удалено
  1. 1 1
      FreeAPS/Sources/Localizations/Main/ar.lproj/Localizable.strings
  2. 1 1
      FreeAPS/Sources/Localizations/Main/ca.lproj/Localizable.strings
  3. 1 1
      FreeAPS/Sources/Localizations/Main/da.lproj/Localizable.strings
  4. 1 1
      FreeAPS/Sources/Localizations/Main/de.lproj/Localizable.strings
  5. 1 1
      FreeAPS/Sources/Localizations/Main/en.lproj/Localizable.strings
  6. 1 1
      FreeAPS/Sources/Localizations/Main/es.lproj/Localizable.strings
  7. 1 1
      FreeAPS/Sources/Localizations/Main/fi.lproj/Localizable.strings
  8. 1 1
      FreeAPS/Sources/Localizations/Main/fr.lproj/Localizable.strings
  9. 1 1
      FreeAPS/Sources/Localizations/Main/he.lproj/Localizable.strings
  10. 1 1
      FreeAPS/Sources/Localizations/Main/hu.lproj/Localizable.strings
  11. 1 1
      FreeAPS/Sources/Localizations/Main/it.lproj/Localizable.strings
  12. 1 1
      FreeAPS/Sources/Localizations/Main/nb.lproj/Localizable.strings
  13. 1 1
      FreeAPS/Sources/Localizations/Main/nl.lproj/Localizable.strings
  14. 1 1
      FreeAPS/Sources/Localizations/Main/pl.lproj/Localizable.strings
  15. 1 1
      FreeAPS/Sources/Localizations/Main/pt-BR.lproj/Localizable.strings
  16. 1 1
      FreeAPS/Sources/Localizations/Main/pt-PT.lproj/Localizable.strings
  17. 1 1
      FreeAPS/Sources/Localizations/Main/ru.lproj/Localizable.strings
  18. 1 1
      FreeAPS/Sources/Localizations/Main/sk.lproj/Localizable.strings
  19. 1 1
      FreeAPS/Sources/Localizations/Main/sv.lproj/Localizable.strings
  20. 1 1
      FreeAPS/Sources/Localizations/Main/tr.lproj/Localizable.strings
  21. 1 1
      FreeAPS/Sources/Localizations/Main/uk.lproj/Localizable.strings
  22. 1 1
      FreeAPS/Sources/Localizations/Main/vi.lproj/Localizable.strings
  23. 1 1
      FreeAPS/Sources/Localizations/Main/zh-Hans.lproj/Localizable.strings
  24. 2 2
      FreeAPS/Sources/Modules/OverrideConfig/OverrideStateModel.swift
  25. 47 47
      FreeAPS/Sources/Modules/OverrideConfig/View/AddOverrideForm.swift
  26. 45 45
      FreeAPS/Sources/Modules/OverrideConfig/View/AddTempTargetForm.swift
  27. 64 64
      FreeAPS/Sources/Modules/OverrideConfig/View/EditOverrideForm.swift
  28. 66 66
      FreeAPS/Sources/Modules/OverrideConfig/View/EditTempTargetForm.swift

+ 1 - 1
FreeAPS/Sources/Localizations/Main/ar.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Duration";
 
 /*  */
-"Enact Temp Target" = "Enact Temp Target";
+"Start Temp Target" = "Start Temp Target";
 
 /* */
 "Target" = "Target";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/ca.lproj/Localizable.strings

@@ -110,7 +110,7 @@
 "Duration" = "Duration";
 
 /*  */
-"Enact Temp Target" = "Enact Temp Target";
+"Start Temp Target" = "Start Temp Target";
 
 /* */
 "Target" = "Target";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/da.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Varighed";
 
 /*  */
-"Enact Temp Target" = "Udfør Midlertidigt Mål";
+"Start Temp Target" = "Udfør Midlertidigt Mål";
 
 /* */
 "Target" = "Mål";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/de.lproj/Localizable.strings

@@ -158,7 +158,7 @@
 "Duration" = "Dauer";
 
 /*  */
-"Enact Temp Target" = "Temporäres Ziel starten";
+"Start Temp Target" = "Temporäres Ziel starten";
 
 /* */
 "Target" = "Ziel";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/en.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Duration";
 
 /*  */
-"Enact Temp Target" = "Enact Temp Target";
+"Start Temp Target" = "Start Temp Target";
 
 /* */
 "Target" = "Target";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/es.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Duración";
 
 /*  */
-"Enact Temp Target" = "Iniciar objetivo temporal";
+"Start Temp Target" = "Iniciar objetivo temporal";
 
 /* */
 "Target" = "Target";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/fi.lproj/Localizable.strings

@@ -161,7 +161,7 @@
 "Duration" = "Duration";
 
 /*  */
-"Enact Temp Target" = "Enact Temp Target";
+"Start Temp Target" = "Start Temp Target";
 
 /* */
 "Target" = "Tavoite";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/fr.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Durée";
 
 /*  */
-"Enact Temp Target" = "Activer la cible temporaire";
+"Start Temp Target" = "Activer la cible temporaire";
 
 /* */
 "Target" = "Cible";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/he.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Duration";
 
 /*  */
-"Enact Temp Target" = "Enact Temp Target";
+"Start Temp Target" = "Start Temp Target";
 
 /* */
 "Target" = "Target";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/hu.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Duration";
 
 /*  */
-"Enact Temp Target" = "Átmeneti cél bekapcsolása";
+"Start Temp Target" = "Átmeneti cél bekapcsolása";
 
 /* */
 "Target" = "Cél";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/it.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Durata";
 
 /*  */
-"Enact Temp Target" = "Target Temporaneo";
+"Start Temp Target" = "Target Temporaneo";
 
 /* */
 "Target" = "Target";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/nb.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Varighet";
 
 /*  */
-"Enact Temp Target" = "Start midlertidig mål";
+"Start Temp Target" = "Start midlertidig mål";
 
 /* */
 "Target" = "Mål";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/nl.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Duur";
 
 /*  */
-"Enact Temp Target" = "Start tijdelijk doel";
+"Start Temp Target" = "Start tijdelijk doel";
 
 /* */
 "Target" = "Doelbereik";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/pl.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Czas trwania";
 
 /*  */
-"Enact Temp Target" = "Enact Temp Target";
+"Start Temp Target" = "Start Temp Target";
 
 /* */
 "Target" = "Target";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/pt-BR.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Duração";
 
 /*  */
-"Enact Temp Target" = "Executar Meta Temporária";
+"Start Temp Target" = "Executar Meta Temporária";
 
 /* */
 "Target" = "Target";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/pt-PT.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Duração";
 
 /*  */
-"Enact Temp Target" = "Executar Meta Temporária";
+"Start Temp Target" = "Executar Meta Temporária";
 
 /* */
 "Target" = "Target";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/ru.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Длительность";
 
 /*  */
-"Enact Temp Target" = "Временная цель";
+"Start Temp Target" = "Временная цель";
 
 /* */
 "Target" = "Цель";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/sk.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Trvanie";
 
 /*  */
-"Enact Temp Target" = "Nastaviť dočasný cieľ";
+"Start Temp Target" = "Nastaviť dočasný cieľ";
 
 /* */
 "Target" = "Cieľ";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/sv.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Duration";
 
 /*  */
-"Enact Temp Target" = "Tillfälliga målvärden";
+"Start Temp Target" = "Tillfälliga målvärden";
 
 /* */
 "Target" = "Målvärde";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/tr.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Süre";
 
 /*  */
-"Enact Temp Target" = "Geçici Hedefe Başla";
+"Start Temp Target" = "Geçici Hedefe Başla";
 
 /* */
 "Target" = "Target";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/uk.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Тривалість";
 
 /*  */
-"Enact Temp Target" = "Запустити Тимчасову ціль";
+"Start Temp Target" = "Запустити Тимчасову ціль";
 
 /* */
 "Target" = "Ціль";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/vi.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "Duration";
 
 /*  */
-"Enact Temp Target" = "Chấp nhận mục tiêu tạm thời";
+"Start Temp Target" = "Chấp nhận mục tiêu tạm thời";
 
 /* */
 "Target" = "Mục tiêu";

+ 1 - 1
FreeAPS/Sources/Localizations/Main/zh-Hans.lproj/Localizable.strings

@@ -155,7 +155,7 @@
 "Duration" = "持续时间";
 
 /*  */
-"Enact Temp Target" = "设置临时目标";
+"Start Temp Target" = "设置临时目标";
 
 /* */
 "Target" = "Target";

+ 2 - 2
FreeAPS/Sources/Modules/OverrideConfig/OverrideStateModel.swift

@@ -690,7 +690,7 @@ extension OverrideConfig.StateModel {
         // Save Temp Target to Core Data
         await tempTargetStorage.storeTempTarget(tempTarget: tempTarget)
 
-        // Enact Temp Target for oref
+        // Start Temp Target for oref
         tempTargetStorage.saveTempTargetsToStorage([tempTarget])
 
         // Reset State variables
@@ -725,7 +725,7 @@ extension OverrideConfig.StateModel {
         setupTempTargetPresetsArray()
     }
 
-    // Enact Temp Target Preset
+    // Start Temp Target Preset
     /// here we only have to update the Boolean Flag 'enabled'
     @MainActor func enactTempTargetPreset(withID id: NSManagedObjectID) async {
         do {

+ 47 - 47
FreeAPS/Sources/Modules/OverrideConfig/View/AddOverrideForm.swift

@@ -102,52 +102,6 @@ struct AddOverrideForm: View {
             }
             .listRowBackground(Color.chart)
 
-            Section {
-                Toggle(isOn: $state.indefinite) {
-                    Text("Enable Indefinitely")
-                }
-
-                if !state.indefinite {
-                    HStack {
-                        Text("Duration")
-                        Spacer()
-                        Text(formatHrMin(Int(state.overrideDuration)))
-                            .foregroundColor(!displayPickerDuration ? .primary : .accentColor)
-                    }
-                    .onTapGesture {
-                        displayPickerDuration = toggleScrollWheel(displayPickerDuration)
-                    }
-
-                    if displayPickerDuration {
-                        HStack {
-                            Picker("Hours", selection: $durationHours) {
-                                ForEach(0 ..< 24) { hour in
-                                    Text("\(hour) hr").tag(hour)
-                                }
-                            }
-                            .pickerStyle(WheelPickerStyle())
-                            .frame(maxWidth: .infinity)
-                            .onChange(of: durationHours) {
-                                state.overrideDuration = convertToMinutes(durationHours, durationMinutes)
-                            }
-
-                            Picker("Minutes", selection: $durationMinutes) {
-                                ForEach(Array(stride(from: 0, through: 55, by: 5)), id: \.self) { minute in
-                                    Text("\(minute) min").tag(minute)
-                                }
-                            }
-                            .pickerStyle(WheelPickerStyle())
-                            .frame(maxWidth: .infinity)
-                            .onChange(of: durationMinutes) {
-                                state.overrideDuration = convertToMinutes(durationHours, durationMinutes)
-                            }
-                        }
-                        .listRowSeparator(.hidden, edges: .top)
-                    }
-                }
-            }
-            .listRowBackground(Color.chart)
-
             Section(footer: percentageDescription(state.overridePercentage)) {
                 // Percentage Picker
                 HStack {
@@ -398,6 +352,52 @@ struct AddOverrideForm: View {
                 }
                 .listRowBackground(Color.chart)
             }
+
+            Section {
+                Toggle(isOn: $state.indefinite) {
+                    Text("Enable Indefinitely")
+                }
+
+                if !state.indefinite {
+                    HStack {
+                        Text("Duration")
+                        Spacer()
+                        Text(formatHrMin(Int(state.overrideDuration)))
+                            .foregroundColor(!displayPickerDuration ? .primary : .accentColor)
+                    }
+                    .onTapGesture {
+                        displayPickerDuration = toggleScrollWheel(displayPickerDuration)
+                    }
+
+                    if displayPickerDuration {
+                        HStack {
+                            Picker("Hours", selection: $durationHours) {
+                                ForEach(0 ..< 24) { hour in
+                                    Text("\(hour) hr").tag(hour)
+                                }
+                            }
+                            .pickerStyle(WheelPickerStyle())
+                            .frame(maxWidth: .infinity)
+                            .onChange(of: durationHours) {
+                                state.overrideDuration = convertToMinutes(durationHours, durationMinutes)
+                            }
+
+                            Picker("Minutes", selection: $durationMinutes) {
+                                ForEach(Array(stride(from: 0, through: 55, by: 5)), id: \.self) { minute in
+                                    Text("\(minute) min").tag(minute)
+                                }
+                            }
+                            .pickerStyle(WheelPickerStyle())
+                            .frame(maxWidth: .infinity)
+                            .onChange(of: durationMinutes) {
+                                state.overrideDuration = convertToMinutes(durationHours, durationMinutes)
+                            }
+                        }
+                        .listRowSeparator(.hidden, edges: .top)
+                    }
+                }
+            }
+            .listRowBackground(Color.chart)
         }
     }
 
@@ -423,7 +423,7 @@ struct AddOverrideForm: View {
                             dismiss()
                         }
                     }, label: {
-                        Text("Enact Override")
+                        Text("Start Override")
                     })
                         .disabled(isInvalid)
                         .frame(maxWidth: .infinity, alignment: .center)

+ 45 - 45
FreeAPS/Sources/Modules/OverrideConfig/View/AddTempTargetForm.swift

@@ -132,50 +132,6 @@ struct AddTempTargetForm: View {
             }.listRowBackground(Color.chart)
 
             Section {
-                DatePicker("Date", selection: $state.date)
-            }.listRowBackground(Color.chart)
-
-            Section {
-                VStack {
-                    HStack {
-                        Text("Duration")
-                        Spacer()
-                        Text(formatHrMin(Int(state.tempTargetDuration)))
-                            .foregroundColor(!displayPickerDuration ? .primary : .accentColor)
-                    }
-                    .onTapGesture {
-                        displayPickerDuration = toggleScrollWheel(displayPickerDuration)
-                    }
-
-                    if displayPickerDuration {
-                        HStack {
-                            Picker("Hours", selection: $durationHours) {
-                                ForEach(0 ..< 24) { hour in
-                                    Text("\(hour) hr").tag(hour)
-                                }
-                            }
-                            .pickerStyle(WheelPickerStyle())
-                            .frame(maxWidth: .infinity)
-                            .onChange(of: durationHours) {
-                                state.tempTargetDuration = Decimal(totalDurationInMinutes())
-                            }
-
-                            Picker("Minutes", selection: $durationMinutes) {
-                                ForEach(Array(stride(from: 0, through: 55, by: 5)), id: \.self) { minute in
-                                    Text("\(minute) min").tag(minute)
-                                }
-                            }
-                            .pickerStyle(WheelPickerStyle())
-                            .frame(maxWidth: .infinity)
-                            .onChange(of: durationMinutes) {
-                                state.tempTargetDuration = Decimal(totalDurationInMinutes())
-                            }
-                        }
-                    }
-                }
-            }.listRowBackground(Color.chart)
-
-            Section {
                 let settingsProvider = PickerSettingsProvider.shared
                 let glucoseSetting = PickerSetting(value: 0, step: targetStep, min: 80, max: 270, type: .glucose)
                 TargetPicker(
@@ -255,6 +211,50 @@ struct AddTempTargetForm: View {
                     .listRowBackground(Color.chart)
                 }
             }
+
+            Section {
+                DatePicker("Date", selection: $state.date)
+            }.listRowBackground(Color.chart)
+
+            Section {
+                VStack {
+                    HStack {
+                        Text("Duration")
+                        Spacer()
+                        Text(formatHrMin(Int(state.tempTargetDuration)))
+                            .foregroundColor(!displayPickerDuration ? .primary : .accentColor)
+                    }
+                    .onTapGesture {
+                        displayPickerDuration = toggleScrollWheel(displayPickerDuration)
+                    }
+
+                    if displayPickerDuration {
+                        HStack {
+                            Picker("Hours", selection: $durationHours) {
+                                ForEach(0 ..< 24) { hour in
+                                    Text("\(hour) hr").tag(hour)
+                                }
+                            }
+                            .pickerStyle(WheelPickerStyle())
+                            .frame(maxWidth: .infinity)
+                            .onChange(of: durationHours) {
+                                state.tempTargetDuration = Decimal(totalDurationInMinutes())
+                            }
+
+                            Picker("Minutes", selection: $durationMinutes) {
+                                ForEach(Array(stride(from: 0, through: 55, by: 5)), id: \.self) { minute in
+                                    Text("\(minute) min").tag(minute)
+                                }
+                            }
+                            .pickerStyle(WheelPickerStyle())
+                            .frame(maxWidth: .infinity)
+                            .onChange(of: durationMinutes) {
+                                state.tempTargetDuration = Decimal(totalDurationInMinutes())
+                            }
+                        }
+                    }
+                }
+            }.listRowBackground(Color.chart)
         }
     }
 
@@ -299,7 +299,7 @@ struct AddTempTargetForm: View {
                             dismiss()
                         }
                     }, label: {
-                        Text("Enact Temp Target")
+                        Text("Start Temp Target")
                     })
                         .disabled(isInvalid)
                         .frame(maxWidth: .infinity, alignment: .center)

+ 64 - 64
FreeAPS/Sources/Modules/OverrideConfig/View/EditOverrideForm.swift

@@ -167,70 +167,6 @@ struct EditOverrideForm: View {
                 .listRowBackground(Color.chart)
             }
 
-            Section {
-                Toggle(isOn: $indefinite) { Text("Enable Indefinitely") }
-                    .onChange(of: indefinite) { hasChanges = true }
-
-                if !indefinite {
-                    HStack {
-                        Text("Duration")
-                        Spacer()
-                        Text(formatHrMin(Int(truncating: duration as NSNumber)))
-                            .foregroundColor(!displayPickerDuration ? .primary : .accentColor)
-                    }
-                    .onTapGesture {
-                        displayPickerDuration = toggleScrollWheel(displayPickerDuration)
-                    }
-
-                    if displayPickerDuration {
-                        HStack {
-                            Picker(
-                                selection: Binding(
-                                    get: {
-                                        Int(truncating: duration as NSNumber) / 60
-                                    },
-                                    set: {
-                                        let minutes = Int(truncating: duration as NSNumber) % 60
-                                        let totalMinutes = $0 * 60 + minutes
-                                        duration = Decimal(totalMinutes)
-                                        hasChanges = true
-                                    }
-                                ),
-                                label: Text("")
-                            ) {
-                                ForEach(0 ..< 24) { hour in
-                                    Text("\(hour) hr").tag(hour)
-                                }
-                            }
-                            .pickerStyle(WheelPickerStyle())
-                            .frame(maxWidth: .infinity)
-
-                            Picker(
-                                selection: Binding(
-                                    get: {
-                                        Int(truncating: duration as NSNumber) %
-                                            60 // Convert Decimal to Int for modulus operation
-                                    },
-                                    set: {
-                                        duration = Decimal((Int(truncating: duration as NSNumber) / 60) * 60 + $0)
-                                        hasChanges = true
-                                    }
-                                ),
-                                label: Text("")
-                            ) {
-                                ForEach(Array(stride(from: 0, through: 55, by: 5)), id: \.self) { minute in
-                                    Text("\(minute) min").tag(minute)
-                                }
-                            }
-                            .pickerStyle(WheelPickerStyle())
-                            .frame(maxWidth: .infinity)
-                        }
-                        .listRowSeparator(.hidden, edges: .top)
-                    }
-                }
-            }
-            .listRowBackground(Color.chart)
-
             // Percentage Picker
             Section(footer: percentageDescription(percentage)) {
                 HStack {
@@ -519,6 +455,70 @@ struct EditOverrideForm: View {
                 }
                 .listRowBackground(Color.chart)
             }
+
+            Section {
+                Toggle(isOn: $indefinite) { Text("Enable Indefinitely") }
+                    .onChange(of: indefinite) { hasChanges = true }
+
+                if !indefinite {
+                    HStack {
+                        Text("Duration")
+                        Spacer()
+                        Text(formatHrMin(Int(truncating: duration as NSNumber)))
+                            .foregroundColor(!displayPickerDuration ? .primary : .accentColor)
+                    }
+                    .onTapGesture {
+                        displayPickerDuration = toggleScrollWheel(displayPickerDuration)
+                    }
+
+                    if displayPickerDuration {
+                        HStack {
+                            Picker(
+                                selection: Binding(
+                                    get: {
+                                        Int(truncating: duration as NSNumber) / 60
+                                    },
+                                    set: {
+                                        let minutes = Int(truncating: duration as NSNumber) % 60
+                                        let totalMinutes = $0 * 60 + minutes
+                                        duration = Decimal(totalMinutes)
+                                        hasChanges = true
+                                    }
+                                ),
+                                label: Text("")
+                            ) {
+                                ForEach(0 ..< 24) { hour in
+                                    Text("\(hour) hr").tag(hour)
+                                }
+                            }
+                            .pickerStyle(WheelPickerStyle())
+                            .frame(maxWidth: .infinity)
+
+                            Picker(
+                                selection: Binding(
+                                    get: {
+                                        Int(truncating: duration as NSNumber) %
+                                            60 // Convert Decimal to Int for modulus operation
+                                    },
+                                    set: {
+                                        duration = Decimal((Int(truncating: duration as NSNumber) / 60) * 60 + $0)
+                                        hasChanges = true
+                                    }
+                                ),
+                                label: Text("")
+                            ) {
+                                ForEach(Array(stride(from: 0, through: 55, by: 5)), id: \.self) { minute in
+                                    Text("\(minute) min").tag(minute)
+                                }
+                            }
+                            .pickerStyle(WheelPickerStyle())
+                            .frame(maxWidth: .infinity)
+                        }
+                        .listRowSeparator(.hidden, edges: .top)
+                    }
+                }
+            }
+            .listRowBackground(Color.chart)
         }
     }
 

+ 66 - 66
FreeAPS/Sources/Modules/OverrideConfig/View/EditTempTargetForm.swift

@@ -102,72 +102,6 @@ struct EditTempTargetForm: View {
             }.listRowBackground(Color.chart)
 
             Section {
-                DatePicker("Date", selection: $date)
-                    .onChange(of: date) { hasChanges = true }
-            }.listRowBackground(Color.chart)
-
-            Section {
-                VStack {
-                    HStack {
-                        Text("Duration")
-                        Spacer()
-                        Text(formatHrMin(Int(duration)))
-                            .foregroundColor(!displayPickerDuration ? .primary : .accentColor)
-                    }
-                    .onTapGesture {
-                        displayPickerDuration = toggleScrollWheel(displayPickerDuration)
-                    }
-                    .onChange(of: duration) { hasChanges = true }
-
-                    if displayPickerDuration {
-                        HStack {
-                            Picker(
-                                selection: Binding(
-                                    get: {
-                                        Int(truncating: duration as NSNumber) / 60
-                                    },
-                                    set: {
-                                        let minutes = Int(truncating: duration as NSNumber) % 60
-                                        let totalMinutes = $0 * 60 + minutes
-                                        duration = Decimal(totalMinutes)
-                                        hasChanges = true
-                                    }
-                                ),
-                                label: Text("")
-                            ) {
-                                ForEach(0 ..< 24) { hour in
-                                    Text("\(hour) hr").tag(hour)
-                                }
-                            }
-                            .pickerStyle(WheelPickerStyle())
-                            .frame(maxWidth: .infinity)
-
-                            Picker(
-                                selection: Binding(
-                                    get: {
-                                        Int(truncating: duration as NSNumber) %
-                                            60 // Convert Decimal to Int for modulus operation
-                                    },
-                                    set: {
-                                        duration = Decimal((Int(truncating: duration as NSNumber) / 60) * 60 + $0)
-                                        hasChanges = true
-                                    }
-                                ),
-                                label: Text("")
-                            ) {
-                                ForEach(Array(stride(from: 0, through: 55, by: 5)), id: \.self) { minute in
-                                    Text("\(minute) min").tag(minute)
-                                }
-                            }
-                            .pickerStyle(WheelPickerStyle())
-                            .frame(maxWidth: .infinity)
-                        }
-                        .listRowSeparator(.hidden, edges: .top)
-                    }
-                }
-            }.listRowBackground(Color.chart)
-
-            Section {
                 // Picker on the right side
                 let settingsProvider = PickerSettingsProvider.shared
                 let glucoseSetting = PickerSetting(value: 0, step: targetStep, min: 80, max: 270, type: .glucose)
@@ -267,6 +201,72 @@ struct EditTempTargetForm: View {
                     .listRowBackground(Color.chart)
                 }
             }
+
+            Section {
+                DatePicker("Date", selection: $date)
+                    .onChange(of: date) { hasChanges = true }
+            }.listRowBackground(Color.chart)
+
+            Section {
+                VStack {
+                    HStack {
+                        Text("Duration")
+                        Spacer()
+                        Text(formatHrMin(Int(duration)))
+                            .foregroundColor(!displayPickerDuration ? .primary : .accentColor)
+                    }
+                    .onTapGesture {
+                        displayPickerDuration = toggleScrollWheel(displayPickerDuration)
+                    }
+                    .onChange(of: duration) { hasChanges = true }
+
+                    if displayPickerDuration {
+                        HStack {
+                            Picker(
+                                selection: Binding(
+                                    get: {
+                                        Int(truncating: duration as NSNumber) / 60
+                                    },
+                                    set: {
+                                        let minutes = Int(truncating: duration as NSNumber) % 60
+                                        let totalMinutes = $0 * 60 + minutes
+                                        duration = Decimal(totalMinutes)
+                                        hasChanges = true
+                                    }
+                                ),
+                                label: Text("")
+                            ) {
+                                ForEach(0 ..< 24) { hour in
+                                    Text("\(hour) hr").tag(hour)
+                                }
+                            }
+                            .pickerStyle(WheelPickerStyle())
+                            .frame(maxWidth: .infinity)
+
+                            Picker(
+                                selection: Binding(
+                                    get: {
+                                        Int(truncating: duration as NSNumber) %
+                                            60 // Convert Decimal to Int for modulus operation
+                                    },
+                                    set: {
+                                        duration = Decimal((Int(truncating: duration as NSNumber) / 60) * 60 + $0)
+                                        hasChanges = true
+                                    }
+                                ),
+                                label: Text("")
+                            ) {
+                                ForEach(Array(stride(from: 0, through: 55, by: 5)), id: \.self) { minute in
+                                    Text("\(minute) min").tag(minute)
+                                }
+                            }
+                            .pickerStyle(WheelPickerStyle())
+                            .frame(maxWidth: .infinity)
+                        }
+                        .listRowSeparator(.hidden, edges: .top)
+                    }
+                }
+            }.listRowBackground(Color.chart)
         }
     }