CalibrationsStateModel.swift 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import SwiftDate
  2. import SwiftUI
  3. extension Calibrations {
  4. final class StateModel: BaseStateModel<Provider> {
  5. @Injected() var glucoseStorage: GlucoseStorage!
  6. @Injected() var calibrationService: CalibrationService!
  7. @Injected() var settingsManager: SettingsManager!
  8. @Published var slope: Double = 1
  9. @Published var intercept: Double = 1
  10. @Published var calibration: Decimal = 0
  11. @Published var calibrationsCount = 0
  12. var units: GlucoseUnits = .mmolL
  13. override func subscribe() {
  14. slope = calibrationService.slope
  15. intercept = calibrationService.intercept
  16. units = settingsManager.settings.units
  17. calibrationsCount = calibrationService.calibrations.count
  18. }
  19. func addCalibration() {
  20. defer {
  21. hideModal()
  22. }
  23. var glucose = calibration
  24. if units == .mmolL {
  25. glucose = calibration.asMgdL
  26. }
  27. guard let lastGlucose = glucoseStorage.recent().last,
  28. lastGlucose.dateString.addingTimeInterval(60 * 4.5) > Date(),
  29. let unfiltered = lastGlucose.unfiltered
  30. else {
  31. warning(.service, "Glucose is invalid for calibration")
  32. return
  33. }
  34. let calibration = Calibration(x: Double(unfiltered), y: Double(glucose))
  35. calibrationService.addCalibration(calibration)
  36. }
  37. func removeLast() {
  38. calibrationService.removeLast()
  39. hideModal()
  40. }
  41. func removeAll() {
  42. calibrationService.removeAllCalibrations()
  43. hideModal()
  44. }
  45. }
  46. }