PumpConfigStateModel.swift 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import LoopKit
  2. import LoopKitUI
  3. import SwiftDate
  4. import SwiftUI
  5. extension PumpConfig {
  6. final class StateModel: BaseStateModel<Provider> {
  7. @Published var setupPump = false
  8. private(set) var setupPumpType: PumpType = .minimed
  9. @Published var pumpState: PumpDisplayState?
  10. private(set) var initialSettings: PumpInitialSettings = .default
  11. @Published var alertNotAck: Bool = false
  12. override func subscribe() {
  13. provider.pumpDisplayState
  14. .receive(on: DispatchQueue.main)
  15. .assign(to: \.pumpState, on: self)
  16. .store(in: &lifetime)
  17. alertNotAck = provider.initialAlertNotAck()
  18. provider.alertNotAck
  19. .receive(on: DispatchQueue.main)
  20. .assign(to: \.alertNotAck, on: self)
  21. .store(in: &lifetime)
  22. let basalSchedule = BasalRateSchedule(
  23. dailyItems: provider.basalProfile().map {
  24. RepeatingScheduleValue(startTime: $0.minutes.minutes.timeInterval, value: Double($0.rate))
  25. }
  26. )
  27. let pumpSettings = provider.pumpSettings()
  28. initialSettings = PumpInitialSettings(
  29. maxBolusUnits: Double(pumpSettings.maxBolus),
  30. maxBasalRateUnitsPerHour: Double(pumpSettings.maxBasal),
  31. basalSchedule: basalSchedule!
  32. )
  33. }
  34. func addPump(_ type: PumpType) {
  35. setupPump = true
  36. setupPumpType = type
  37. }
  38. func ack() {
  39. provider.deviceManager.alertHistoryStorage.forceNotification()
  40. }
  41. }
  42. }
  43. extension PumpConfig.StateModel: CompletionDelegate {
  44. func completionNotifyingDidComplete(_: CompletionNotifying) {
  45. setupPump = false
  46. }
  47. }
  48. extension PumpConfig.StateModel: PumpManagerOnboardingDelegate {
  49. func pumpManagerOnboarding(didCreatePumpManager pumpManager: PumpManagerUI) {
  50. provider.setPumpManager(pumpManager)
  51. if let insulinType = pumpManager.status.insulinType {
  52. settingsManager.updateInsulinCurve(insulinType)
  53. }
  54. setupPump = false
  55. }
  56. func pumpManagerOnboarding(didOnboardPumpManager _: PumpManagerUI) {
  57. // nothing to do
  58. }
  59. func pumpManagerOnboarding(didPauseOnboarding _: PumpManagerUI) {
  60. // TODO:
  61. }
  62. // func pumpManagerSetupViewController(_: PumpManagerSetupViewController, didSetUpPumpManager pumpManager: PumpManagerUI) {
  63. // provider.setPumpManager(pumpManager)
  64. // setupPump = false
  65. // }
  66. }