MealSettingsStateModel.swift 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import SwiftUI
  2. extension MealSettings {
  3. final class StateModel: BaseStateModel<Provider> {
  4. @Published var units: GlucoseUnits = .mgdL
  5. @Published var useFPUconversion: Bool = true
  6. @Published var maxCarbs: Decimal = 250
  7. @Published var maxFat: Decimal = 250
  8. @Published var maxProtein: Decimal = 250
  9. @Published var individualAdjustmentFactor: Decimal = 0
  10. @Published var timeCap: Decimal = 0
  11. @Published var minuteInterval: Decimal = 0
  12. @Published var delay: Decimal = 0
  13. override func subscribe() {
  14. units = settingsManager.settings.units
  15. subscribeSetting(\.useFPUconversion, on: $useFPUconversion) { useFPUconversion = $0 }
  16. subscribeSetting(\.maxCarbs, on: $maxCarbs) { maxCarbs = $0 }
  17. subscribeSetting(\.maxFat, on: $maxFat) { maxFat = $0 }
  18. subscribeSetting(\.maxProtein, on: $maxProtein) { maxProtein = $0 }
  19. subscribeSetting(\.timeCap, on: $timeCap.map(Int.init), initial: {
  20. let value = max(min($0, 12), 5)
  21. timeCap = Decimal(value)
  22. }, map: {
  23. $0
  24. })
  25. subscribeSetting(\.minuteInterval, on: $minuteInterval.map(Int.init), initial: {
  26. let value = max(min($0, 60), 10)
  27. minuteInterval = Decimal(value)
  28. }, map: {
  29. $0
  30. })
  31. subscribeSetting(\.delay, on: $delay.map(Int.init), initial: {
  32. let value = max(min($0, 120), 60)
  33. delay = Decimal(value)
  34. }, map: {
  35. $0
  36. })
  37. subscribeSetting(\.individualAdjustmentFactor, on: $individualAdjustmentFactor, initial: {
  38. let value = max(min($0, 1.2), 0.1)
  39. individualAdjustmentFactor = value
  40. }, map: {
  41. $0
  42. })
  43. }
  44. }
  45. }
  46. extension MealSettings.StateModel: SettingsObserver {
  47. func settingsDidChange(_: FreeAPSSettings) {
  48. units = settingsManager.settings.units
  49. }
  50. }