UnitsLimitsSettingsStateModel.swift 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. var preferences: Preferences {
  15. settingsManager.preferences
  16. }
  17. var pumpSettings: PumpSettings {
  18. provider.settings()
  19. }
  20. override func subscribe() {
  21. units = settingsManager.settings.units
  22. subscribeSetting(\.units, on: $unitsIndex.map { $0 == 0 ? GlucoseUnits.mgdL : .mmolL }) {
  23. unitsIndex = $0 == .mgdL ? 0 : 1
  24. }
  25. subscribePreferencesSetting(\.maxIOB, on: $maxIOB) { maxIOB = $0 }
  26. subscribePreferencesSetting(\.maxCOB, on: $maxCOB) { maxCOB = $0 }
  27. maxBasal = pumpSettings.maxBasal
  28. maxBolus = pumpSettings.maxBolus
  29. }
  30. var isPumpSettingUnchanged: Bool {
  31. pumpSettings.maxBasal == maxBasal &&
  32. pumpSettings.maxBolus == maxBolus
  33. }
  34. func saveIfChanged() {
  35. if !isPumpSettingUnchanged {
  36. let settings = PumpSettings(
  37. insulinActionCurve: pumpSettings.insulinActionCurve,
  38. maxBolus: maxBolus,
  39. maxBasal: maxBasal
  40. )
  41. provider.save(settings: settings)
  42. .receive(on: DispatchQueue.main)
  43. .sink { _ in
  44. let settings = self.provider.settings()
  45. self.maxBasal = settings.maxBasal
  46. self.maxBolus = settings.maxBolus
  47. } receiveValue: {}
  48. .store(in: &lifetime)
  49. }
  50. }
  51. }
  52. }
  53. extension UnitsLimitsSettings.StateModel: SettingsObserver {
  54. func settingsDidChange(_: FreeAPSSettings) {
  55. units = settingsManager.settings.units
  56. }
  57. }