TempTargets.swift 2.0 KB

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