Jon Mårtensson пре 3 година
родитељ
комит
7dd0cda802

+ 1 - 1
FreeAPS/Sources/Modules/Home/HomeProvider.swift

@@ -19,7 +19,7 @@ extension Home {
             if stat?.count ?? 0 != 0 {
                 return stat![0]
             }
-            return storage.retrieve(OpenAPS.Monitor.statistics, as: Statistics.self)
+            return nil
         }
 
         var enactedSuggestion: Suggestion? {

+ 1 - 0
FreeAPS/Sources/Modules/Home/HomeStateModel.swift

@@ -418,6 +418,7 @@ extension Home.StateModel:
     func enactedSuggestionDidUpdate(_ suggestion: Suggestion) {
         enactedSuggestion = suggestion
         setStatusTitle()
+        setupStatistics()
     }
 
     func pumpBatteryDidChange(_: Battery) {

+ 139 - 143
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -11,6 +11,16 @@ extension Home {
         @State var isStatusPopupPresented = false
         @State var selectedState: durationState
 
+        @State var hba1c_all: String
+        @State var average_: String
+        @State var median_: String
+        @State var tir_low: String
+        @State var tir_high: String
+        @State var tir_: String
+        @State var hba1c_: String
+        @State var sd_: String
+        @State var cv_: String
+
         private var numberFormatter: NumberFormatter {
             let formatter = NumberFormatter()
             formatter.numberStyle = .decimal
@@ -227,154 +237,101 @@ extension Home {
 
         @ViewBuilder private func statPanel() -> some View {
             if state.settingsManager.settings.displayStatistics {
-                VStack(alignment: .center, spacing: 8) {
-                    VStack(alignment: .center, spacing: 4) {
-                        // stateButton(states: durationState.allCases, selectedState: $selectedState)
-                        HStack {
-                            Group {
-                                
-                                durationButton(states: durationState.allCases, selectedState: $selectedState)
-
-                                Text("Updated").font(.caption2)
-                                    .foregroundColor(.secondary)
-                                Text(
-                                    dateFormatter.string(from: state.statistics?.created_at ?? Date())
-                                ).font(.system(size: 12))
-                            }
+                VStack(alignment: .center, spacing: 6) {
+                    HStack {
+                        Group {
+                            durationButton(states: durationState.allCases, selectedState: $selectedState)
+                            updateStats()
+                            Text("Updated").font(.caption2)
+                                .foregroundColor(.secondary)
+                            Text(dateFormatter.string(from: state.statistics?.created_at ?? Date())).font(.system(size: 12))
                         }
+                    }
+                    HStack {
+                        Group {
+                            Text(NSLocalizedString("Average", comment: "")).font(.caption2).foregroundColor(.secondary)
 
-                        var hba1c_all = getString(state.statistics?.Statistics.HbA1c, .total)
-                        
-                        var average_ = getString(state.statistics?.Statistics.Glucose.Average.day, true)
-                        var median_ = getString(state.statistics?.Statistics.Glucose.Median.day, true)
-                        var tir_low = getString(state.statistics?.Statistics.Distribution.Hypos.day, false)
-                        var tir_high = getString(state.statistics?.Statistics.Distribution.Hypers.day, false)
-                        var tir_ = getString(state.statistics?.Statistics.Distribution.TIR.day, false)
-                        var hba1c_ = getString(state.statistics?.Statistics.HbA1c.day, false)
-                        var sd_ = getString(state.statistics?.Statistics.Variance.SD.day, true)
-                        var cv_ = getString(state.statistics?.Statistics.Variance.CV.day, false)
-                        
-                        switch selectedState {
-                        case .day:
-                            continue
-                        case .week:
-                            average_ = getString(state.statistics?.Statistics.Glucose.Average.week, true)
-                            median_ = getString(state.statistics?.Statistics.Glucose.Median.week, true)
-                            tir_low = getString(state.statistics?.Statistics.Distribution.Hypos.week, false)
-                            tir_high = getString(state.statistics?.Statistics.Distribution.Hypers.week, false)
-                            tir_ = getString(state.statistics?.Statistics.Distribution.TIR.week, false)
-                            hba1c_ = getString(state.statistics?.Statistics.HbA1c.week, false)
-                            sd_ = getString(state.statistics?.Statistics.Variance.SD.week, true)
-                            cv_ = getString(state.statistics?.Statistics.Variance.CV.week, false)
-                        case .month:
-                            average_ = getString(state.statistics?.Statistics.Glucose.Average.month, true)
-                            median_ = getString(state.statistics?.Statistics.Glucose.Median.month, true)
-                            tir_low = getString(state.statistics?.Statistics.Distribution.Hypos.month, false)
-                            tir_high = getString(state.statistics?.Statistics.Distribution.Hypers.month, false)
-                            tir_ = getString(state.statistics?.Statistics.Distribution.TIR.month, false)
-                            hba1c_ = getString(state.statistics?.Statistics.HbA1c.month, false)
-                            sd_ = getString(state.statistics?.Statistics.Variance.SD.month, true)
-                            cv_ = getString(state.statistics?.Statistics.Variance.CV.month, false)
-                        case .ninetyDays:
-                            average_ = getString(state.statistics?.Statistics.Glucose.Average.ninetyDays, true)
-                            median_ = getString(state.statistics?.Statistics.Glucose.Median.ninetyDays, true)
-                            tir_low = getString(state.statistics?.Statistics.Distribution.Hypos.ninetyDays, false)
-                            tir_high = getString(state.statistics?.Statistics.Distribution.Hypers.ninetyDays, false)
-                            tir_ = getString(state.statistics?.Statistics.Distribution.TIR.ninetyDays, false)
-                            hba1c_ = getString(state.statistics?.Statistics.HbA1c.ninetyDays, false)
-                            sd_ = getString(state.statistics?.Statistics.Variance.SD.ninetyDays, true)
-                            cv_ = getString(state.statistics?.Statistics.Variance.CV.ninetyDays, false)
-                        case .total:
-                            average_ = getString(state.statistics?.Statistics.Glucose.Average.total, true)
-                            median_ = getString(state.statistics?.Statistics.Glucose.Median.total, true)
-                            tir_low = getString(state.statistics?.Statistics.Distribution.Hypos.total, false)
-                            tir_high = getString(state.statistics?.Statistics.Distribution.Hypers.total, false)
-                            tir_ = getString(state.statistics?.Statistics.Distribution.TIR.total, false)
-                            hba1c_ = getString(state.statistics?.Statistics.HbA1c.total, false)
-                            sd_ = getString(state.statistics?.Statistics.Variance.SD.total, true)
-                            cv_ = getString(state.statistics?.Statistics.Variance.CV.total, false)
-                        }
-                        HStack {
-                            Group {
-                                Text(
-                                    NSLocalizedString("Average", comment: "")
-                                ).font(.caption2).foregroundColor(.secondary)
-                                Text(average_).font(.system(size: 12))
-                                Text("Median")
-                                    .font(.caption2).foregroundColor(.secondary)
-                                Text(median_).font(.system(size: 12))
-                            }
-                        }
+                            Text(average_).font(.system(size: 12))
 
-                        HStack {
-                            Group {
-                                Text(
-                                    NSLocalizedString("Low (<", comment: " ") +
-                                        (
-                                            targetFormatter
-                                                .string(from: state.settingsManager.preferences.low as NSNumber) ?? ""
-                                        ) + ")"
-                                ).font(.caption2).foregroundColor(.secondary)
+                            Text("Median")
+                                .font(.caption2).foregroundColor(.secondary)
 
-                                Text(tir_low + " %").font(.system(size: 12)).foregroundColor(.loopRed)
+                            Text(median_).font(.system(size: 12))
+                        }
+                    }
+                    HStack {
+                        Group {
+                            Text(
+                                NSLocalizedString("Low (<", comment: " ") +
+                                    getString(state.settingsManager.preferences.low, false) + ")"
+                            ).font(.caption2).foregroundColor(.secondary)
 
-                                Text("Normal").font(.caption2).foregroundColor(.secondary)
+                            Text(tir_low + " %").font(.system(size: 12)).foregroundColor(.loopRed)
 
-                                Text(tir_ + " %").font(.system(size: 12)).foregroundColor(.loopGreen)
+                            Text("Normal").font(.caption2).foregroundColor(.secondary)
 
-                                Text(
-                                    NSLocalizedString("High (>", comment: " ") +
-                                        (targetFormatter.string(from: state.settingsManager.preferences.high as NSNumber) ?? "") +
-                                        ")"
-                                ).font(.caption2).foregroundColor(.secondary)
+                            Text(tir_ + " %").font(.system(size: 12)).foregroundColor(.loopGreen)
 
-                                Text(tir_high + " %").font(.system(size: 12)).foregroundColor(.loopYellow)
-                            }
+                            Text(
+                                NSLocalizedString("High (>", comment: " ") +
+                                    getString(state.settingsManager.preferences.high, false) +
+                                    ")"
+                            ).font(.caption2).foregroundColor(.secondary)
+
+                            Text(tir_high + " %").font(.system(size: 12)).foregroundColor(.loopYellow)
                         }
-                        HStack {
-                            Group {
-                                Text("HbA1c").font(.caption2).foregroundColor(.secondary)
-                                Text(hba1c_).font(.system(size: 12))
-
-                                if !state.settingsManager.preferences.displaySD {
-                                    Text(
-                                        NSLocalizedString("CV", comment: "CV")
-                                    ).font(.caption2).foregroundColor(.secondary)
-
-                                    Text(cv_).font(.system(size: 12))
-                                } else {
-                                    Text(
-                                        NSLocalizedString("SD", comment: "SD")
-                                    ).font(.caption2).foregroundColor(.secondary)
-                                    Text(sd_).font(.system(size: 12))
-                                }
+                    }
+                    HStack {
+                        Group {
+                            Text("HbA1c").font(.caption2).foregroundColor(.secondary)
+                            Text(hba1c_).font(.system(size: 12))
 
+                            if !state.settingsManager.preferences.displaySD {
                                 Text(
-                                    NSLocalizedString("All ", comment: "") +
-                                        (
-                                            targetFormatter
-                                                .string(from: (state.statistics?.GlucoseStorage_Days ?? 0) as NSNumber) ?? ""
-                                        ) +
-                                        NSLocalizedString(" days", comment: "")
+                                    NSLocalizedString("CV", comment: "CV")
                                 ).font(.caption2).foregroundColor(.secondary)
 
-                                Text(hba1c_all).font(.system(size: 12))
+                                Text(cv_).font(.system(size: 12))
+                            } else {
+                                Text(
+                                    NSLocalizedString("SD", comment: "SD")
+                                ).font(.caption2).foregroundColor(.secondary)
+                                Text(sd_).font(.system(size: 12))
                             }
+
+                            Text(
+                                NSLocalizedString("All ", comment: "") + getString(state.statistics?.GlucoseStorage_Days, false) +
+                                    NSLocalizedString(" days", comment: "")
+                            ).font(.caption2).foregroundColor(.secondary)
+
+                            Text(hba1c_all).font(.system(size: 12))
                         }
                     }
-                        
+
                     if state.settingsManager.preferences.displayLoops {
                         HStack {
                             Group {
                                 Text("Loops").font(.caption2)
                                     .foregroundColor(.secondary)
-                                Text(tirFormatter.string(from: (state.statistics?.Statistics.LoopCycles.loops ?? 0) as NSNumber) ?? "")
+                                Text(
+                                    tirFormatter
+                                        .string(from: (state.statistics?.Statistics.LoopCycles.loops ?? 0) as NSNumber) ?? ""
+                                )
                                 Text("Average Interval").font(.caption2)
                                     .foregroundColor(.secondary)
-                                Text(targetFormatter.string(from: (state.statistics?.Statistics.LoopCycles.avg_interval ?? 0) as NSNumber) ?? "")
+                                Text(
+                                    targetFormatter
+                                        .string(from: (state.statistics?.Statistics.LoopCycles.avg_interval ?? 0) as NSNumber) ??
+                                        ""
+                                )
                                 Text("Median Duration").font(.caption2)
                                     .foregroundColor(.secondary)
-                                Text(numberFormatter.string(from: (state.statistics?.Statistics.LoopCycles.median_duration ?? 0) as NSNumber) ?? "")
+                                Text(
+                                    numberFormatter
+                                        .string(
+                                            from: (state.statistics?.Statistics.LoopCycles.median_duration ?? 0) as NSNumber
+                                        ) ?? ""
+                                )
                             }
                         }
                     }
@@ -553,11 +510,11 @@ extension Home {
                     }
                     .gesture(
                         DragGesture(minimumDistance: 10, coordinateSpace: .local)
-                        .onEnded { value in
-                            if value.translation.height < 0 {
-                                isStatusPopupPresented = false
+                            .onEnded { value in
+                                if value.translation.height < 0 {
+                                    isStatusPopupPresented = false
+                                }
                             }
-                        }
                     )
             }
         }
@@ -568,19 +525,6 @@ extension Home {
                     .padding(.bottom, 4)
                 if let suggestion = state.suggestion {
                     TagCloudView(tags: suggestion.reasonParts).animation(.none, value: false)
-                    /*
-                     Text(
-                         "Total insulin past 24 hours: " + numberFormatter
-                             .string(from: (state.statistics?.Statistics.Insulin.TDD ?? 0) as NSNumber) +
-                             " U ,bolus insulin: " + numberFormatter
-                             .string(from: (state.statistics?.Statistics.Insulin.bolus ?? 0) as NSNumber) +
-                             " U, temp. basal insulin: " + numberFormatter
-                             .string(from: (state.statistics?.Statistics.Insulin.temp_basal ?? 0) as NSNumber) +
-                             " U, non-looping scheduled basal insulin: " + numberFormatter
-                             .string(from: (state.statistics?.Statistics.Insulin.scheduled_basal ?? 0) as NSNumber) + " U."
-                     )
-                     .font(.caption).foregroundColor(.white)
-                      */
 
                     Text(suggestion.reasonConclusion.capitalizingFirstLetter()).font(.caption).foregroundColor(.white)
 
@@ -606,19 +550,71 @@ extension Home {
                  72 ... 144:
                 return .loopGreen
             case 0 ... 4,
-                20 ... 71:
+                 20 ... 71:
                 return .loopRed
             default:
                 return .loopYellow
             }
         }
-          
-        private func getString(_ stat: Decimal?,_ test: Bool) -> String {
+
+        private func getString(_ stat: Decimal?, _ test: Bool) -> String {
             var string: String = targetFormatter.string(from: (stat ?? 0) as NSNumber) ?? ""
+
             if state.units != .mmolL, test == true {
                 string = tirFormatter.string(from: (stat ?? 0) as NSNumber) ?? ""
             }
             return string
         }
+
+        private func updateStats() {
+            hba1c_all = getString(state.statistics?.Statistics.HbA1c.total, false)
+            switch selectedState {
+            case .day:
+                average_ = getString(state.statistics?.Statistics.Glucose.Average.day, true)
+                median_ = getString(state.statistics?.Statistics.Glucose.Median.day, true)
+                tir_low = getString(state.statistics?.Statistics.Distribution.Hypos.day, false)
+                tir_high = getString(state.statistics?.Statistics.Distribution.Hypers.day, false)
+                tir_ = getString(state.statistics?.Statistics.Distribution.TIR.day, false)
+                hba1c_ = getString(state.statistics?.Statistics.HbA1c.day, false)
+                sd_ = getString(state.statistics?.Statistics.Variance.SD.day, true)
+                cv_ = getString(state.statistics?.Statistics.Variance.CV.day, false)
+            case .week:
+                average_ = getString(state.statistics?.Statistics.Glucose.Average.week, true)
+                median_ = getString(state.statistics?.Statistics.Glucose.Median.week, true)
+                tir_low = getString(state.statistics?.Statistics.Distribution.Hypos.week, false)
+                tir_high = getString(state.statistics?.Statistics.Distribution.Hypers.week, false)
+                tir_ = getString(state.statistics?.Statistics.Distribution.TIR.week, false)
+                hba1c_ = getString(state.statistics?.Statistics.HbA1c.week, false)
+                sd_ = getString(state.statistics?.Statistics.Variance.SD.week, true)
+                cv_ = getString(state.statistics?.Statistics.Variance.CV.week, false)
+            case .month:
+                average_ = getString(state.statistics?.Statistics.Glucose.Average.month, true)
+                median_ = getString(state.statistics?.Statistics.Glucose.Median.month, true)
+                tir_low = getString(state.statistics?.Statistics.Distribution.Hypos.month, false)
+                tir_high = getString(state.statistics?.Statistics.Distribution.Hypers.month, false)
+                tir_ = getString(state.statistics?.Statistics.Distribution.TIR.month, false)
+                hba1c_ = getString(state.statistics?.Statistics.HbA1c.month, false)
+                sd_ = getString(state.statistics?.Statistics.Variance.SD.month, true)
+                cv_ = getString(state.statistics?.Statistics.Variance.CV.month, false)
+            case .ninetyDays:
+                average_ = getString(state.statistics?.Statistics.Glucose.Average.ninetyDays, true)
+                median_ = getString(state.statistics?.Statistics.Glucose.Median.ninetyDays, true)
+                tir_low = getString(state.statistics?.Statistics.Distribution.Hypos.ninetyDays, false)
+                tir_high = getString(state.statistics?.Statistics.Distribution.Hypers.ninetyDays, false)
+                tir_ = getString(state.statistics?.Statistics.Distribution.TIR.ninetyDays, false)
+                hba1c_ = getString(state.statistics?.Statistics.HbA1c.ninetyDays, false)
+                sd_ = getString(state.statistics?.Statistics.Variance.SD.ninetyDays, true)
+                cv_ = getString(state.statistics?.Statistics.Variance.CV.ninetyDays, false)
+            case .total:
+                average_ = getString(state.statistics?.Statistics.Glucose.Average.total, true)
+                median_ = getString(state.statistics?.Statistics.Glucose.Median.total, true)
+                tir_low = getString(state.statistics?.Statistics.Distribution.Hypos.total, false)
+                tir_high = getString(state.statistics?.Statistics.Distribution.Hypers.total, false)
+                tir_ = getString(state.statistics?.Statistics.Distribution.TIR.total, false)
+                hba1c_ = getString(state.statistics?.Statistics.HbA1c.total, false)
+                sd_ = getString(state.statistics?.Statistics.Variance.SD.total, true)
+                cv_ = getString(state.statistics?.Statistics.Variance.CV.total, false)
+            }
+        }
     }
 }

+ 13 - 1
FreeAPS/Sources/Router/Screen.swift

@@ -36,7 +36,19 @@ extension Screen {
         case .loading:
             ProgressView()
         case .home:
-            Home.RootView(resolver: resolver, selectedState: .day)
+            Home.RootView(
+                resolver: resolver,
+                selectedState: .day,
+                hba1c_all: "",
+                average_: "",
+                median_: "",
+                tir_low: "",
+                tir_high: "",
+                tir_: "",
+                hba1c_: "",
+                sd_: "",
+                cv_: ""
+            )
         case .settings:
             Settings.RootView(resolver: resolver)
         case let .configEditor(file):