OverrideView.swift 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import Charts
  2. import CoreData
  3. import Foundation
  4. import SwiftUI
  5. struct OverrideView: ChartContent {
  6. let overrides: [OverrideStored]
  7. let overrideRunStored: [OverrideRunStored]
  8. let units: GlucoseUnits
  9. let viewContext: NSManagedObjectContext
  10. var body: some ChartContent {
  11. drawActiveOverrides()
  12. drawOverrideRunStored()
  13. }
  14. private func drawActiveOverrides() -> some ChartContent {
  15. ForEach(overrides) { override in
  16. if let duration = MainChartHelper.calculateDuration(objectID: override.objectID, context: viewContext) {
  17. let start: Date = override.date ?? .distantPast
  18. let end: Date = start.addingTimeInterval(duration)
  19. if let target = MainChartHelper.calculateTarget(objectID: override.objectID, context: viewContext) {
  20. RuleMark(
  21. xStart: .value("Start", start, unit: .second),
  22. xEnd: .value("End", end, unit: .second),
  23. y: .value("Value", units == .mgdL ? target : target.asMmolL)
  24. )
  25. .foregroundStyle(Color.purple.opacity(0.4))
  26. .lineStyle(.init(lineWidth: 8))
  27. }
  28. }
  29. }
  30. }
  31. private func drawOverrideRunStored() -> some ChartContent {
  32. ForEach(overrideRunStored) { overrideRunStored in
  33. let start: Date = overrideRunStored.startDate ?? .distantPast
  34. let end: Date = overrideRunStored.endDate ?? Date()
  35. let target = overrideRunStored.target?.decimalValue ?? 100
  36. RuleMark(
  37. xStart: .value("Start", start, unit: .second),
  38. xEnd: .value("End", end, unit: .second),
  39. y: .value("Value", units == .mgdL ? target : target.asMmolL)
  40. )
  41. .foregroundStyle(Color.purple.opacity(0.25))
  42. .lineStyle(.init(lineWidth: 8))
  43. }
  44. }
  45. }