| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- import Charts
- import Foundation
- import SwiftUI
- struct InsulinView: ChartContent {
- let glucoseData: [GlucoseStored]
- let insulinData: [PumpEventStored]
- let units: GlucoseUnits
- var body: some ChartContent {
- drawBoluses()
- }
- private func drawBoluses() -> some ChartContent {
- ForEach(insulinData) { insulin in
- let amount = insulin.bolus?.amount ?? 0 as NSDecimalNumber
- let bolusDate = insulin.timestamp ?? Date()
- if amount != 0, let glucose = MainChartHelper.timeToNearestGlucose(
- glucoseValues: glucoseData,
- time: bolusDate.timeIntervalSince1970
- )?.glucose {
- let yPosition = (units == .mgdL ? Decimal(glucose) : Decimal(glucose).asMmolL) + MainChartHelper
- .bolusOffset(units: units)
- let size = (MainChartHelper.Config.bolusSize + CGFloat(truncating: amount) * MainChartHelper.Config.bolusScale)
- PointMark(
- x: .value("Time", bolusDate, unit: .second),
- y: .value("Value", yPosition)
- )
- .symbol {
- Image(systemName: "arrowtriangle.down.fill").font(.system(size: size)).foregroundStyle(Color.insulin)
- }
- .annotation(position: .top) {
- Text(Formatter.bolusFormatter.string(from: amount) ?? "")
- .font(.caption2)
- .foregroundStyle(Color.primary)
- }
- }
- }
- }
- }
|