MealSettingsStateModel.swift 1.8 KB

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