polscm32 1 anno fa
parent
commit
036724554c

+ 37 - 74
Trio/Sources/Modules/Main/View/OnboardingSteps/GlucoseTargetStepView.swift

@@ -392,80 +392,43 @@ struct GlucoseTargetStepView: View {
     // Chart for visualizing glucose targets
     private var glucoseTargetChart: some View {
         Chart {
-//            ForEach(onboardingData.targetItems.indices, id: \.self) { index in
-//                let item = onboardingData.targetItems[index]
-//                let lowValue = onboardingData.targetRateValues[item.lowIndex]
-//                let highValue = onboardingData.targetRateValues[item.highIndex]
-//
-//                let tzOffset = TimeZone.current.secondsFromGMT() * -1
-//                let startDate = Date(timeIntervalSinceReferenceDate: onboardingData.targetTimeValues[item.timeIndex])
-//                    .addingTimeInterval(TimeInterval(tzOffset))
-//
-//                // Calculate end date (next target or end of day)
-//                let endDate: Date
-//                if index < onboardingData.targetItems.count - 1 {
-//                    let nextItem = onboardingData.targetItems[index + 1]
-//                    endDate = Date(timeIntervalSinceReferenceDate: onboardingData.targetTimeValues[nextItem.timeIndex])
-//                        .addingTimeInterval(TimeInterval(tzOffset))
-//                } else {
-//                    endDate = Date(timeIntervalSinceReferenceDate: onboardingData.targetTimeValues.last!)
-//                        .addingTimeInterval(30 * 60)
-//                        .addingTimeInterval(TimeInterval(tzOffset))
-//                }
-//
-//                // Low target line
-//                LineMark(
-//                    x: .value("Start", startDate),
-//                    y: .value("Low Target", lowValue)
-//                )
-//                .foregroundStyle(Color.blue)
-//                .lineStyle(StrokeStyle(lineWidth: 2))
-//
-//                LineMark(
-//                    x: .value("End", endDate),
-//                    y: .value("Low Target", lowValue)
-//                )
-//                .foregroundStyle(Color.blue)
-//                .lineStyle(StrokeStyle(lineWidth: 2))
-//
-//                // High target line
-//                LineMark(
-//                    x: .value("Start", startDate),
-//                    y: .value("High Target", highValue)
-//                )
-//                .foregroundStyle(Color.blue.opacity(0.6))
-//                .lineStyle(StrokeStyle(lineWidth: 2))
-//
-//                LineMark(
-//                    x: .value("End", endDate),
-//                    y: .value("High Target", highValue)
-//                )
-//                .foregroundStyle(Color.blue.opacity(0.6))
-//                .lineStyle(StrokeStyle(lineWidth: 2))
-//
-//                // Target range area
-//                AreaMark(
-//                    x: .value("Start", startDate),
-//                    yStart: .value("Low Target", lowValue),
-//                    yEnd: .value("High Target", highValue)
-//                )
-//                .foregroundStyle(.linearGradient(
-//                    colors: [Color.blue.opacity(0.3), Color.blue.opacity(0.1)],
-//                    startPoint: .bottom,
-//                    endPoint: .top
-//                ))
-//
-//                AreaMark(
-//                    x: .value("End", endDate),
-//                    yStart: .value("Low Target", lowValue),
-//                    yEnd: .value("High Target", highValue)
-//                )
-//                .foregroundStyle(.linearGradient(
-//                    colors: [Color.blue.opacity(0.3), Color.blue.opacity(0.1)],
-//                    startPoint: .bottom,
-//                    endPoint: .top
-//                ))
-//            }
+            ForEach(Array(onboardingData.targetItems.enumerated()), id: \.element.id) { index, item in
+                let displayValue = onboardingData.targetRateValues[item.lowIndex]
+
+                let tzOffset = TimeZone.current.secondsFromGMT() * -1
+                let startDate = Date(timeIntervalSinceReferenceDate: onboardingData.targetTimeValues[item.timeIndex])
+                    .addingTimeInterval(TimeInterval(tzOffset))
+                let endDate = onboardingData.targetItems.count > index + 1 ?
+                    Date(
+                        timeIntervalSinceReferenceDate: onboardingData
+                            .targetTimeValues[onboardingData.targetItems[index + 1].timeIndex]
+                    )
+                    .addingTimeInterval(TimeInterval(tzOffset)) :
+                    Date(timeIntervalSinceReferenceDate: onboardingData.targetTimeValues.last!).addingTimeInterval(30 * 60)
+                    .addingTimeInterval(TimeInterval(tzOffset))
+
+                RectangleMark(
+                    xStart: .value("start", startDate),
+                    xEnd: .value("end", endDate),
+                    yStart: .value("rate-start", displayValue),
+                    yEnd: .value("rate-end", 0)
+                ).foregroundStyle(
+                    .linearGradient(
+                        colors: [
+                            Color.green.opacity(0.6),
+                            Color.green.opacity(0.1)
+                        ],
+                        startPoint: .bottom,
+                        endPoint: .top
+                    )
+                ).alignsMarkStylesWithPlotArea()
+
+                LineMark(x: .value("End Date", startDate), y: .value("Ratio", displayValue))
+                    .lineStyle(.init(lineWidth: 1)).foregroundStyle(Color.green)
+
+                LineMark(x: .value("Start Date", endDate), y: .value("Ratio", displayValue))
+                    .lineStyle(.init(lineWidth: 1)).foregroundStyle(Color.green)
+            }
         }
         .id(refreshUI) // Force chart update
         .chartXAxis {