polscm32 hai 1 ano
pai
achega
544b0ff403

+ 41 - 28
Trio/Sources/Modules/Main/View/OnboardingSteps/CarbRatioStepView.swift

@@ -40,7 +40,7 @@ struct CarbRatioStepView: View {
                     .padding(.horizontal)
 
                 // Chart visualization
-                if !onboardingData.items.isEmpty {
+                if !onboardingData.carbRatioItems.isEmpty {
                     VStack(alignment: .leading) {
                         Text("Carb Ratio Profile")
                             .font(.headline)
@@ -64,7 +64,7 @@ struct CarbRatioStepView: View {
                         Spacer()
 
                         // Add new carb ratio button
-                        if onboardingData.items.count < 24 {
+                        if onboardingData.carbRatioItems.count < 24 {
                             Button(action: {
                                 showTimeSelector = true
                             }) {
@@ -79,7 +79,7 @@ struct CarbRatioStepView: View {
                     }
                     .padding(.horizontal)
 
-                    if onboardingData.items.isEmpty {
+                    if onboardingData.carbRatioItems.isEmpty {
                         // Add default entry if no items exist
                         Button("Add Initial Carb Ratio") {
                             onboardingData.addCarbRatio()
@@ -93,12 +93,15 @@ struct CarbRatioStepView: View {
                     } else {
                         // List of carb ratios
                         VStack(spacing: 2) {
-                            ForEach(Array(onboardingData.items.enumerated()), id: \.element.id) { index, item in
+                            ForEach(Array(onboardingData.carbRatioItems.enumerated()), id: \.element.id) { index, item in
                                 HStack {
                                     // Time display
                                     Text(
                                         dateFormatter
-                                            .string(from: Date(timeIntervalSince1970: onboardingData.timeValues[item.timeIndex]))
+                                            .string(from: Date(
+                                                timeIntervalSince1970: onboardingData
+                                                    .carbRatioTimeValues[item.timeIndex]
+                                            ))
                                     )
                                     .frame(width: 80, alignment: .leading)
                                     .padding(.leading)
@@ -106,16 +109,20 @@ struct CarbRatioStepView: View {
                                     // Ratio slider
                                     Slider(
                                         value: Binding(
-                                            get: { Double(truncating: onboardingData.rateValues[item.rateIndex] as NSNumber) },
+                                            get: {
+                                                Double(
+                                                    truncating: onboardingData
+                                                        .carbRatioRateValues[item.rateIndex] as NSNumber
+                                                ) },
                                             set: { newValue in
                                                 // Find closest match in rateValues array
-                                                let newIndex = onboardingData.rateValues
+                                                let newIndex = onboardingData.carbRatioRateValues
                                                     .firstIndex { abs(Double($0) - newValue) < 0.05 } ?? item.rateIndex
-                                                onboardingData.items[index].rateIndex = newIndex
+                                                onboardingData.carbRatioItems[index].rateIndex = newIndex
                                             }
                                         ),
-                                        in: Double(truncating: onboardingData.rateValues.first! as NSNumber) ...
-                                            Double(truncating: onboardingData.rateValues.last! as NSNumber),
+                                        in: Double(truncating: onboardingData.carbRatioRateValues.first! as NSNumber) ...
+                                            Double(truncating: onboardingData.carbRatioRateValues.last! as NSNumber),
                                         step: 0.5
                                     )
                                     .accentColor(.orange)
@@ -123,14 +130,14 @@ struct CarbRatioStepView: View {
 
                                     // Display the current value
                                     Text(
-                                        "\(formatter.string(from: onboardingData.rateValues[item.rateIndex] as NSNumber) ?? "--") g/U"
+                                        "\(formatter.string(from: onboardingData.carbRatioRateValues[item.rateIndex] as NSNumber) ?? "--") g/U"
                                     )
                                     .frame(width: 60, alignment: .trailing)
 
                                     // Delete button (not for the first entry at 00:00)
                                     if index > 0 {
                                         Button(action: {
-                                            onboardingData.items.remove(at: index)
+                                            onboardingData.carbRatioItems.remove(at: index)
                                         }) {
                                             Image(systemName: "trash")
                                                 .foregroundColor(.red)
@@ -154,7 +161,7 @@ struct CarbRatioStepView: View {
                 }
 
                 // Example calculation based on first carb ratio
-                if !onboardingData.items.isEmpty {
+                if !onboardingData.carbRatioItems.isEmpty {
                     Divider()
                         .padding(.horizontal)
 
@@ -169,9 +176,12 @@ struct CarbRatioStepView: View {
                                 .padding(.horizontal)
 
                             let insulinNeeded = 45 /
-                                Double(truncating: onboardingData.rateValues[onboardingData.items.first!.rateIndex] as NSNumber)
+                                Double(
+                                    truncating: onboardingData
+                                        .carbRatioRateValues[onboardingData.carbRatioItems.first!.rateIndex] as NSNumber
+                                )
                             Text(
-                                "45g ÷ \(formatter.string(from: onboardingData.rateValues[onboardingData.items.first!.rateIndex] as NSNumber) ?? "--") = \(String(format: "%.1f", insulinNeeded)) units of insulin"
+                                "45g ÷ \(formatter.string(from: onboardingData.carbRatioRateValues[onboardingData.carbRatioItems.first!.rateIndex] as NSNumber) ?? "--") = \(String(format: "%.1f", insulinNeeded)) units of insulin"
                             )
                             .font(.system(.body, design: .monospaced))
                             .foregroundColor(.orange)
@@ -212,18 +222,18 @@ struct CarbRatioStepView: View {
             for hour in 0 ..< 24 {
                 let hourInMinutes = hour * 60
                 // Calculate timeIndex for this hour
-                let timeIndex = onboardingData.timeValues.firstIndex { abs($0 - Double(hourInMinutes * 60)) < 10 } ?? 0
+                let timeIndex = onboardingData.carbRatioTimeValues.firstIndex { abs($0 - Double(hourInMinutes * 60)) < 10 } ?? 0
 
                 // Check if this hour is already in the profile
-                if !onboardingData.items.contains(where: { $0.timeIndex == timeIndex }) {
+                if !onboardingData.carbRatioItems.contains(where: { $0.timeIndex == timeIndex }) {
                     buttons.append(.default(Text("\(String(format: "%02d:00", hour))")) {
                         // Get the current ratio from the last item
-                        let rateIndex = onboardingData.items.last?.rateIndex ?? 0
+                        let rateIndex = onboardingData.carbRatioItems.last?.rateIndex ?? 0
                         // Create new item with the specified time
                         let newItem = CarbRatioEditor.Item(rateIndex: rateIndex, timeIndex: timeIndex)
                         // Add the new item and sort the list
-                        onboardingData.items.append(newItem)
-                        onboardingData.items.sort(by: { $0.timeIndex < $1.timeIndex })
+                        onboardingData.carbRatioItems.append(newItem)
+                        onboardingData.carbRatioItems.sort(by: { $0.timeIndex < $1.timeIndex })
                     })
                 }
             }
@@ -240,23 +250,26 @@ struct CarbRatioStepView: View {
 
     // Computed property to check if we can add more carb ratios
     private var canAddRatio: Bool {
-        guard let lastItem = onboardingData.items.last else { return true }
-        return lastItem.timeIndex < onboardingData.timeValues.count - 1
+        guard let lastItem = onboardingData.carbRatioItems.last else { return true }
+        return lastItem.timeIndex < onboardingData.carbRatioTimeValues.count - 1
     }
 
     // Chart for visualizing carb ratios
     private var carbRatioChart: some View {
         Chart {
-            ForEach(Array(onboardingData.items.enumerated()), id: \.element.id) { index, item in
-                let displayValue = onboardingData.rateValues[item.rateIndex]
+            ForEach(Array(onboardingData.carbRatioItems.enumerated()), id: \.element.id) { index, item in
+                let displayValue = onboardingData.carbRatioRateValues[item.rateIndex]
 
                 let tzOffset = TimeZone.current.secondsFromGMT() * -1
-                let startDate = Date(timeIntervalSinceReferenceDate: onboardingData.timeValues[item.timeIndex])
+                let startDate = Date(timeIntervalSinceReferenceDate: onboardingData.carbRatioTimeValues[item.timeIndex])
                     .addingTimeInterval(TimeInterval(tzOffset))
-                let endDate = onboardingData.items.count > index + 1 ?
-                    Date(timeIntervalSinceReferenceDate: onboardingData.timeValues[onboardingData.items[index + 1].timeIndex])
+                let endDate = onboardingData.carbRatioItems.count > index + 1 ?
+                    Date(
+                        timeIntervalSinceReferenceDate: onboardingData
+                            .carbRatioTimeValues[onboardingData.carbRatioItems[index + 1].timeIndex]
+                    )
                     .addingTimeInterval(TimeInterval(tzOffset)) :
-                    Date(timeIntervalSinceReferenceDate: onboardingData.timeValues.last!).addingTimeInterval(30 * 60)
+                    Date(timeIntervalSinceReferenceDate: onboardingData.carbRatioTimeValues.last!).addingTimeInterval(30 * 60)
                     .addingTimeInterval(TimeInterval(tzOffset))
 
                 RectangleMark(

+ 6 - 5
Trio/Sources/Modules/Onboarding/Model.swift

@@ -1,7 +1,7 @@
-import Foundation
 import Combine
-import SwiftUI
+import Foundation
 import LoopKit
+import SwiftUI
 
 /// Represents the different steps in the onboarding process.
 enum OnboardingStep: Int, CaseIterable, Identifiable {
@@ -114,7 +114,7 @@ enum OnboardingStep: Int, CaseIterable, Identifiable {
     var initialCarbRatioItems: [CarbRatioEditor.Item] = []
     let carbRatioTimeValues = stride(from: 0.0, to: 1.days.timeInterval, by: 30.minutes.timeInterval).map { $0 }
     let carbRatioRateValues = stride(from: 30.0, to: 501.0, by: 1.0).map { ($0.decimal ?? .zero) / 10 }
-    
+
     // Basal Profile related
     var initialBasalProfileItems: [BasalProfileEditor.Item] = []
     var basalProfileItems: [BasalProfileEditor.Item] = []
@@ -239,7 +239,8 @@ extension OnboardingData {
     }
 }
 
-//MARK: - Setup Basal Profile
+// MARK: - Setup Basal Profile
+
 extension OnboardingData {
     func saveBasalProfile() -> AnyPublisher<Void, Error> {
         let profile = basalProfileItems.map { item -> BasalProfileEntry in
@@ -251,7 +252,7 @@ extension OnboardingData {
             let rate = self.basalProfileRateValues[item.rateIndex]
             return BasalProfileEntry(start: formatter.string(from: date), minutes: minutes, rate: rate)
         }
-            
+
         guard let pump = deviceManager?.pumpManager else {
             debugPrint("\(DebuggingIdentifiers.failed) No pump found; cannot save basal profile!")
             return Fail(error: NSError()).eraseToAnyPublisher()