PumpSettingsEditorStateModel.swift 2.3 KB

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