PumpConfigStateModel.swift 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. }
  55. func pumpManagerOnboarding(didOnboardPumpManager _: PumpManagerUI) {
  56. // nothing to do
  57. }
  58. func pumpManagerOnboarding(didPauseOnboarding _: PumpManagerUI) {
  59. // TODO:
  60. }
  61. // func pumpManagerSetupViewController(_: PumpManagerSetupViewController, didSetUpPumpManager pumpManager: PumpManagerUI) {
  62. // provider.setPumpManager(pumpManager)
  63. // setupPump = false
  64. // }
  65. }