UnitsLimitsSettingsStateModel.swift 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import Combine
  2. import SwiftUI
  3. extension UnitsLimitsSettings {
  4. final class StateModel: BaseStateModel<Provider> {
  5. @Injected() var settings: SettingsManager!
  6. @Injected() var storage: FileStorage!
  7. @Published var units: GlucoseUnits = .mgdL
  8. @Published var unitsIndex = 0 // index 0 is mg/dl
  9. @Published var maxBolus: Decimal = 10
  10. @Published var maxBasal: Decimal = 2
  11. @Published var maxIOB: Decimal = 0
  12. @Published var maxCOB: Decimal = 120
  13. @Published var hasChanged: Bool = false
  14. @Published var threshold_setting: Decimal = 60
  15. var preferences: Preferences {
  16. settingsManager.preferences
  17. }
  18. var pumpSettings: PumpSettings {
  19. provider.settings()
  20. }
  21. override func subscribe() {
  22. units = settingsManager.settings.units
  23. subscribeSetting(\.units, on: $unitsIndex.map { $0 == 0 ? GlucoseUnits.mgdL : .mmolL }) {
  24. unitsIndex = $0 == .mgdL ? 0 : 1
  25. }
  26. subscribePreferencesSetting(\.maxIOB, on: $maxIOB) { maxIOB = $0 }
  27. subscribePreferencesSetting(\.maxCOB, on: $maxCOB) { maxCOB = $0 }
  28. subscribePreferencesSetting(\.threshold_setting, on: $threshold_setting) { threshold_setting = $0 }
  29. maxBasal = pumpSettings.maxBasal
  30. maxBolus = pumpSettings.maxBolus
  31. }
  32. var isPumpSettingUnchanged: Bool {
  33. pumpSettings.maxBasal == maxBasal &&
  34. pumpSettings.maxBolus == maxBolus
  35. }
  36. func saveIfChanged() {
  37. if !isPumpSettingUnchanged {
  38. let settings = PumpSettings(
  39. insulinActionCurve: pumpSettings.insulinActionCurve,
  40. maxBolus: maxBolus,
  41. maxBasal: maxBasal
  42. )
  43. provider.save(settings: settings)
  44. .receive(on: DispatchQueue.main)
  45. .sink { _ in
  46. let settings = self.provider.settings()
  47. self.maxBasal = settings.maxBasal
  48. self.maxBolus = settings.maxBolus
  49. } receiveValue: {}
  50. .store(in: &lifetime)
  51. }
  52. }
  53. }
  54. }
  55. extension UnitsLimitsSettings.StateModel: SettingsObserver {
  56. func settingsDidChange(_: TrioSettings) {
  57. units = settingsManager.settings.units
  58. }
  59. }