ソースを参照

Refactor continued; still WIP

Deniz Cengiz 1 年間 前
コミット
6b3e8bb688

+ 11 - 3
Trio/Sources/Modules/Onboarding/OnboardingStateModel.swift

@@ -139,7 +139,7 @@ extension Onboarding {
         // Target related
         // Target related
         var targetItems: [TargetsEditor.Item] = []
         var targetItems: [TargetsEditor.Item] = []
         var initialTargetItems: [TargetsEditor.Item] = []
         var initialTargetItems: [TargetsEditor.Item] = []
-        let targetTimeValues = stride(from: 0.0, to: 1.days.timeInterval, by: 30.minutes.timeInterval).map { $0 }
+        let targetTimeValues = stride(from: 0, to: 1.days.timeInterval, by: 30.minutes.timeInterval).map { $0 }
 
 
         var targetRateValues: [Decimal] {
         var targetRateValues: [Decimal] {
             let settingsProvider = PickerSettingsProvider.shared
             let settingsProvider = PickerSettingsProvider.shared
@@ -203,9 +203,11 @@ extension Onboarding {
 
 
         func getTherapyItems(from targets: [TargetsEditor.Item]) -> [TherapySettingItem] {
         func getTherapyItems(from targets: [TargetsEditor.Item]) -> [TherapySettingItem] {
             targets.map {
             targets.map {
-                TherapySettingItem(
+                debug(.default, "- timeIndex: \($0.timeIndex), valueIndex: \($0.lowIndex)")
+                return TherapySettingItem(
                     id: UUID(),
                     id: UUID(),
-                    time: targetTimeValues[$0.timeIndex],
+//                    time: targetTimeValues[$0.timeIndex],
+                    time: targetTimeValues[safe: $0.timeIndex] ?? 0.0,
                     value: Double(targetRateValues[$0.lowIndex])
                     value: Double(targetRateValues[$0.lowIndex])
                 )
                 )
             }
             }
@@ -474,3 +476,9 @@ extension Onboarding.StateModel {
         }.eraseToAnyPublisher()
         }.eraseToAnyPublisher()
     }
     }
 }
 }
+
+extension Collection {
+    subscript(safe index: Index) -> Element? {
+        indices.contains(index) ? self[index] : nil
+    }
+}

+ 1 - 4
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/GlucoseTargetStepView.swift

@@ -58,15 +58,12 @@ struct GlucoseTargetStepView: View {
 
 
                 // Glucose target list
                 // Glucose target list
                 VStack(alignment: .leading) {
                 VStack(alignment: .leading) {
-                    Text("Glucose Targets")
-                        .font(.title2)
-                        .padding(.horizontal)
-
                     TimeValueEditorView(
                     TimeValueEditorView(
                         items: $therapyItems,
                         items: $therapyItems,
                         unit: state.units.rawValue,
                         unit: state.units.rawValue,
                         valueOptions: state.targetRateValues
                         valueOptions: state.targetRateValues
                     )
                     )
+                    .id(therapyItems.count) // quick workaround to force refresh on change
                 }
                 }
             }
             }
         }.onAppear {
         }.onAppear {

+ 10 - 5
Trio/Sources/Modules/Onboarding/View/OnboardingView+Util.swift

@@ -20,7 +20,7 @@ struct TimeValuePickerRow: View {
                 )) {
                 )) {
                     ForEach(0 ..< 48) { i in
                     ForEach(0 ..< 48) { i in
                         let seconds = Double(i * 30 * 60)
                         let seconds = Double(i * 30 * 60)
-                        Text(timeFormatter.string(from: Date(timeIntervalSince1970: seconds)))
+                        Text(timeFormatter.string(from: Date(timeIntervalSinceReferenceDate: seconds)))
                             .tag(seconds)
                             .tag(seconds)
                     }
                     }
                 }
                 }
@@ -46,6 +46,7 @@ struct TimeValuePickerRow: View {
     private var timeFormatter: DateFormatter {
     private var timeFormatter: DateFormatter {
         let formatter = DateFormatter()
         let formatter = DateFormatter()
         formatter.dateFormat = "HH:mm"
         formatter.dateFormat = "HH:mm"
+        formatter.timeZone = TimeZone.current
         return formatter
         return formatter
     }
     }
 }
 }
@@ -77,13 +78,14 @@ struct TimeValueEditorView: View {
                 .disabled(items.count >= 48)
                 .disabled(items.count >= 48)
             }
             }
 
 
-            ForEach(Array(items.enumerated()), id: \.element.id) { index, item in
+            ForEach($items) { $item in
                 VStack(spacing: 0) {
                 VStack(spacing: 0) {
                     Button {
                     Button {
                         selectedItemID = selectedItemID == item.id ? nil : item.id
                         selectedItemID = selectedItemID == item.id ? nil : item.id
                     } label: {
                     } label: {
                         HStack {
                         HStack {
-                            Text(timeFormatter.string(from: Date(timeIntervalSince1970: item.time)))
+                            let startDate = Date(timeIntervalSinceReferenceDate: item.time)
+                            Text(timeFormatter.string(from: startDate))
                                 .foregroundStyle(selectedItemID == item.id ? Color.accentColor : Color.primary)
                                 .foregroundStyle(selectedItemID == item.id ? Color.accentColor : Color.primary)
                             Spacer()
                             Spacer()
                             HStack {
                             HStack {
@@ -99,7 +101,7 @@ struct TimeValueEditorView: View {
 
 
                     if selectedItemID == item.id {
                     if selectedItemID == item.id {
                         TimeValuePickerRow(
                         TimeValuePickerRow(
-                            item: $items[index],
+                            item: $item,
                             valueOptions: valueOptions,
                             valueOptions: valueOptions,
                             unit: unit
                             unit: unit
                         )
                         )
@@ -107,7 +109,7 @@ struct TimeValueEditorView: View {
                     }
                     }
                 }
                 }
                 .swipeActions(edge: .trailing, allowsFullSwipe: true) {
                 .swipeActions(edge: .trailing, allowsFullSwipe: true) {
-                    if index > 0 {
+                    if let index = items.firstIndex(where: { $0.id == item.id }), index > 0 {
                         Button(role: .destructive) {
                         Button(role: .destructive) {
                             items.remove(at: index)
                             items.remove(at: index)
                             selectedItemID = nil
                             selectedItemID = nil
@@ -118,6 +120,9 @@ struct TimeValueEditorView: View {
                 }
                 }
             }
             }
         }
         }
+        .onAppear {
+            debug(.default, "ITEMS TO DISPLAY: \(items)")
+        }
     }
     }
 
 
     private var timeFormatter: DateFormatter {
     private var timeFormatter: DateFormatter {