InsulinModelChartView.swift 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. //
  2. // InsulinModelChartView.swift
  3. // LoopKitUI
  4. //
  5. // Created by Michael Pangburn on 7/15/20.
  6. // Copyright © 2020 LoopKit Authors. All rights reserved.
  7. //
  8. import SwiftUI
  9. import HealthKit
  10. import LoopKit
  11. struct InsulinModelChartView: UIViewRepresentable {
  12. let chartManager: ChartsManager
  13. var glucoseUnit: HKUnit
  14. var selectedInsulinModelValues: [GlucoseValue]
  15. var unselectedInsulinModelValues: [[GlucoseValue]]
  16. var glucoseDisplayRange: ClosedRange<HKQuantity>
  17. func makeUIView(context: Context) -> ChartContainerView {
  18. let view = ChartContainerView()
  19. view.chartGenerator = { [chartManager] frame in
  20. chartManager.chart(atIndex: 0, frame: frame)?.view
  21. }
  22. return view
  23. }
  24. func updateUIView(_ chartContainerView: ChartContainerView, context: Context) {
  25. chartManager.invalidateChart(atIndex: 0)
  26. insulinModelChart.glucoseUnit = glucoseUnit
  27. insulinModelChart.setSelectedInsulinModelValues(selectedInsulinModelValues)
  28. insulinModelChart.setUnselectedInsulinModelValues(unselectedInsulinModelValues)
  29. insulinModelChart.glucoseDisplayRange = glucoseDisplayRange
  30. chartManager.prerender()
  31. chartContainerView.reloadChart()
  32. }
  33. private var insulinModelChart: InsulinModelChart {
  34. guard chartManager.charts.count == 1, let insulinModelChart = chartManager.charts.first as? InsulinModelChart else {
  35. fatalError("Expected exactly one insulin model chart in ChartsManager")
  36. }
  37. return insulinModelChart
  38. }
  39. }