PumpSettingsEditorStateModel.swift 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import Combine
  2. import SwiftUI
  3. extension PumpSettingsEditor {
  4. final class StateModel: BaseStateModel<Provider> {
  5. @Published var units: GlucoseUnits = .mgdL
  6. @Published var maxBasal: Decimal = 0.0 {
  7. didSet {
  8. checkForChanges()
  9. }
  10. }
  11. @Published var maxBolus: Decimal = 0.0 {
  12. didSet {
  13. checkForChanges()
  14. }
  15. }
  16. @Published var dia: Decimal = 0.0 {
  17. didSet {
  18. checkForChanges()
  19. }
  20. }
  21. @Published var syncInProgress = false
  22. @Published var hasChanged: Bool = false
  23. private var initialMaxBasal: Decimal = 0.0
  24. private var initialMaxBolus: Decimal = 0.0
  25. private var initialDia: Decimal = 0.0
  26. override func subscribe() {
  27. units = settingsManager.settings.units
  28. let settings = provider.settings()
  29. maxBasal = settings.maxBasal
  30. maxBolus = settings.maxBolus
  31. dia = settings.insulinActionCurve
  32. initialMaxBasal = settings.maxBasal
  33. initialMaxBolus = settings.maxBolus
  34. initialDia = settings.insulinActionCurve
  35. checkForChanges()
  36. }
  37. var unchanged: Bool {
  38. initialMaxBasal == maxBasal &&
  39. initialMaxBolus == maxBolus &&
  40. initialDia == dia
  41. }
  42. private func checkForChanges() {
  43. hasChanged = !unchanged
  44. }
  45. func save() {
  46. syncInProgress = true
  47. let settings = PumpSettings(
  48. insulinActionCurve: dia,
  49. maxBolus: maxBolus,
  50. maxBasal: maxBasal
  51. )
  52. provider.save(settings: settings)
  53. .receive(on: DispatchQueue.main)
  54. .sink { _ in
  55. let settings = self.provider.settings()
  56. self.syncInProgress = false
  57. self.maxBasal = settings.maxBasal
  58. self.maxBolus = settings.maxBolus
  59. self.dia = settings.insulinActionCurve
  60. self.initialMaxBasal = settings.maxBasal
  61. self.initialMaxBolus = settings.maxBolus
  62. self.initialDia = settings.insulinActionCurve
  63. self.checkForChanges()
  64. } receiveValue: {}
  65. .store(in: &lifetime)
  66. }
  67. }
  68. }
  69. extension PumpSettingsEditor.StateModel: SettingsObserver {
  70. func settingsDidChange(_: FreeAPSSettings) {
  71. units = settingsManager.settings.units
  72. }
  73. }