PumpConfigStateModel.swift 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. Task {
  23. let basalSchedule = BasalRateSchedule(
  24. dailyItems: await provider.getBasalProfile().map {
  25. RepeatingScheduleValue(startTime: $0.minutes.minutes.timeInterval, value: Double($0.rate))
  26. }
  27. )
  28. let pumpSettings = provider.pumpSettings()
  29. await MainActor.run {
  30. initialSettings = PumpInitialSettings(
  31. maxBolusUnits: Double(pumpSettings.maxBolus),
  32. maxBasalRateUnitsPerHour: Double(pumpSettings.maxBasal),
  33. basalSchedule: basalSchedule!
  34. )
  35. }
  36. }
  37. }
  38. func addPump(_ type: PumpType) {
  39. setupPumpType = type
  40. setupPump = true
  41. }
  42. func ack() {
  43. provider.deviceManager.alertHistoryStorage.forceNotification()
  44. }
  45. }
  46. }
  47. extension PumpConfig.StateModel: CompletionDelegate {
  48. func completionNotifyingDidComplete(_: CompletionNotifying) {
  49. setupPump = false
  50. }
  51. }
  52. extension PumpConfig.StateModel: PumpManagerOnboardingDelegate {
  53. func pumpManagerOnboarding(didCreatePumpManager pumpManager: PumpManagerUI) {
  54. provider.setPumpManager(pumpManager)
  55. if let insulinType = pumpManager.status.insulinType {
  56. settingsManager.updateInsulinCurve(insulinType)
  57. }
  58. }
  59. func pumpManagerOnboarding(didOnboardPumpManager _: PumpManagerUI) {
  60. // nothing to do
  61. }
  62. func pumpManagerOnboarding(didPauseOnboarding _: PumpManagerUI) {
  63. // TODO:
  64. }
  65. }