OverrideView.swift 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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(
  17. objectID: override.objectID,
  18. attribute: "duration",
  19. context: viewContext
  20. ) {
  21. let start: Date = override.date ?? .distantPast
  22. let end: Date = start.addingTimeInterval(duration)
  23. if let target = MainChartHelper.calculateTarget(
  24. objectID: override.objectID,
  25. attribute: "target",
  26. context: viewContext
  27. ) {
  28. RuleMark(
  29. xStart: .value("Start", start, unit: .second),
  30. xEnd: .value("End", end, unit: .second),
  31. y: .value("Value", units == .mgdL ? target : target.asMmolL)
  32. )
  33. .foregroundStyle(Color.purple.opacity(0.4))
  34. .lineStyle(.init(lineWidth: 8))
  35. }
  36. }
  37. }
  38. }
  39. private func drawOverrideRunStored() -> some ChartContent {
  40. ForEach(overrideRunStored) { overrideRunStored in
  41. let start: Date = overrideRunStored.startDate ?? .distantPast
  42. let end: Date = overrideRunStored.endDate ?? Date()
  43. let target = overrideRunStored.target?.decimalValue ?? 100
  44. RuleMark(
  45. xStart: .value("Start", start, unit: .second),
  46. xEnd: .value("End", end, unit: .second),
  47. y: .value("Value", units == .mgdL ? target : target.asMmolL)
  48. )
  49. .foregroundStyle(Color.purple.opacity(0.25))
  50. .lineStyle(.init(lineWidth: 8))
  51. }
  52. }
  53. }