polscm32 2 年之前
父節點
當前提交
8c9c2c3dff
共有 1 個文件被更改,包括 43 次插入7 次删除
  1. 43 7
      FreeAPS/Sources/Modules/Home/View/Chart/MainChartView2.swift

+ 43 - 7
FreeAPS/Sources/Modules/Home/View/Chart/MainChartView2.swift

@@ -48,6 +48,7 @@ struct MainChartView2: View {
         static let bolusScale: CGFloat = 2.5
         static let carbsSize: CGFloat = 5
         static let carbsScale: CGFloat = 0.3
+        static let fpuSize: CGFloat = 20
     }
 
     @Binding var glucose: [BloodGlucose]
@@ -76,6 +77,7 @@ struct MainChartView2: View {
     @State private var TempBasals: [PumpHistoryEvent] = []
     @State private var Predictions: [Prediction] = []
     @State private var ChartCarbs: [Carb] = []
+    @State private var ChartFpus: [Carb] = []
     @State private var ChartBoluses: [ChartBolus] = []
     @State private var startMarker = Date(timeIntervalSince1970: TimeInterval(NSDate().timeIntervalSince1970 - 86400))
     @State private var endMarker = Date(timeIntervalSince1970: TimeInterval(NSDate().timeIntervalSince1970 + 10800))
@@ -96,6 +98,15 @@ struct MainChartView2: View {
         return formatter
     }
 
+    private var fpuFormatter: NumberFormatter {
+        let formatter = NumberFormatter()
+        formatter.numberStyle = .decimal
+        formatter.maximumFractionDigits = 1
+        formatter.decimalSeparator = "."
+        formatter.minimumIntegerDigits = 0
+        return formatter
+    }
+
     var body: some View {
         VStack(alignment: .center, spacing: 8, content: {
             ScrollViewReader { scroller in
@@ -157,18 +168,32 @@ extension MainChartView2 {
                         unit: .second
                     )
                 ).foregroundStyle(.clear)
-                ForEach(ChartCarbs, id: \.self) { carb in
-                    let carbAmount = carb.amount
+                /* ForEach(ChartCarbs, id: \.self) { carb in
+                     let carbAmount = carb.amount
+                     PointMark(
+                         x: .value("Time", carb.timestamp, unit: .second),
+                         y: .value("Value", carb.nearestGlucose.sgv ?? 120)
+                     )
+                     .symbolSize((Config.carbsSize + CGFloat(carbAmount) * Config.carbsScale) * 10)
+                     .foregroundStyle(Color.orange)
+                     .annotation(position: .top) {
+                         Text(bolusFormatter.string(from: carbAmount as NSNumber)!).font(.caption2)
+                     }
+                 }
+                 */
+                ForEach(ChartFpus, id: \.self) { fpu in
+                    let fpuAmount = fpu.amount
                     PointMark(
-                        x: .value("Time", carb.timestamp, unit: .second),
-                        y: .value("Value", carb.nearestGlucose.sgv ?? 120)
+                        x: .value("Time", fpu.timestamp, unit: .second),
+                        y: .value("Value", fpu.nearestGlucose.sgv ?? 120)
                     )
-                    .symbolSize((Config.carbsSize + CGFloat(carbAmount) * Config.carbsScale) * 10)
-                    .foregroundStyle(Color.orange)
+                    .symbolSize((Config.fpuSize + CGFloat(fpuAmount) * Config.carbsScale) * 10)
+                    .foregroundStyle(Color.brown)
                     .annotation(position: .top) {
-                        Text(bolusFormatter.string(from: carbAmount as NSNumber)!).font(.caption2)
+                        Text(bolusFormatter.string(from: fpuAmount as NSNumber)!).font(.caption2)
                     }
                 }
+
                 ForEach(ChartBoluses, id: \.self) { bolus in
                     let bolusAmount = bolus.amount
                     PointMark(
@@ -232,6 +257,7 @@ extension MainChartView2 {
                 }
                 .onChange(of: carbs) { _ in
                     calculateCarbs()
+                    calculateFpus()
                 }
                 .onChange(of: boluses) { _ in
                     calculateBoluses()
@@ -449,6 +475,16 @@ extension MainChartView2 {
         ChartCarbs = calculatedCarbs
     }
 
+    private func calculateFpus() {
+        var calculatedFpus: [Carb] = []
+        let fpus = carbs.filter { $0.isFPU ?? false }
+        fpus.forEach { fpu in
+            let bg = timeToNearestGlucose(time: fpu.createdAt.timeIntervalSince1970)
+            calculatedFpus.append(Carb(amount: fpu.carbs, timestamp: fpu.createdAt, nearestGlucose: bg))
+        }
+        ChartFpus = calculatedFpus
+    }
+
     private func calculateBoluses() {
         var calculatedBoluses: [ChartBolus] = []
         boluses.forEach { bolus in