GlucoseChartView.swift 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import Charts
  2. import Foundation
  3. import SwiftUI
  4. struct GlucoseChartView: ChartContent {
  5. let glucoseData: [GlucoseStored]
  6. let manualGlucoseData: [GlucoseStored]
  7. let units: GlucoseUnits
  8. let highGlucose: Decimal
  9. let lowGlucose: Decimal
  10. let isSmoothingEnabled: Bool
  11. var body: some ChartContent {
  12. drawGlucoseChart()
  13. }
  14. private func drawGlucoseChart() -> some ChartContent {
  15. ForEach(glucoseData) { item in
  16. let glucoseToDisplay = units == .mgdL ? Decimal(item.glucose) : Decimal(item.glucose).asMmolL
  17. let pointMarkColor: Color = glucoseToDisplay > highGlucose ? Color.orange :
  18. glucoseToDisplay < lowGlucose ? Color.red :
  19. Color.green
  20. if !isSmoothingEnabled {
  21. PointMark(
  22. x: .value("Time", item.date ?? Date(), unit: .second),
  23. y: .value("Value", glucoseToDisplay)
  24. )
  25. .foregroundStyle(pointMarkColor)
  26. .symbolSize(20)
  27. } else {
  28. PointMark(
  29. x: .value("Time", item.date ?? Date(), unit: .second),
  30. y: .value("Value", glucoseToDisplay)
  31. )
  32. .symbol {
  33. Image(systemName: "record.circle.fill")
  34. .font(.system(size: 8))
  35. .bold()
  36. .foregroundStyle(pointMarkColor)
  37. }
  38. }
  39. }
  40. }
  41. }