PumpConfigViewModel.swift 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import LoopKit
  2. import LoopKitUI
  3. import SwiftDate
  4. import SwiftUI
  5. extension PumpConfig {
  6. class ViewModel<Provider>: BaseViewModel<Provider>, ObservableObject where Provider: PumpConfigProvider {
  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. override func subscribe() {
  12. provider.pumpDisplayState
  13. .receive(on: DispatchQueue.main)
  14. .assign(to: \.pumpState, on: self)
  15. .store(in: &lifetime)
  16. let basalSchedule = BasalRateSchedule(
  17. dailyItems: provider.basalProfile().map {
  18. RepeatingScheduleValue(startTime: $0.minutes.minutes.timeInterval, value: Double($0.rate))
  19. }
  20. )
  21. let pumpSettings = provider.pumpSettings()
  22. initialSettings = PumpInitialSettings(
  23. maxBolusUnits: Double(pumpSettings.maxBolus),
  24. maxBasalRateUnitsPerHour: Double(pumpSettings.maxBasal),
  25. basalSchedule: basalSchedule!
  26. )
  27. }
  28. func addPump(_ type: PumpType) {
  29. setupPump = true
  30. setupPumpType = type
  31. }
  32. }
  33. }
  34. extension PumpConfig.ViewModel: CompletionDelegate {
  35. func completionNotifyingDidComplete(_: CompletionNotifying) {
  36. setupPump = false
  37. }
  38. }
  39. extension PumpConfig.ViewModel: PumpManagerSetupViewControllerDelegate {
  40. func pumpManagerSetupViewController(_: PumpManagerSetupViewController, didSetUpPumpManager pumpManager: PumpManagerUI) {
  41. provider.setPumpManager(pumpManager)
  42. setupPump = false
  43. }
  44. }