HomeViewModel.swift 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import SwiftDate
  2. import SwiftUI
  3. extension Home {
  4. class ViewModel<Provider>: BaseViewModel<Provider>, ObservableObject where Provider: HomeProvider {
  5. @Injected() var broadcaster: Broadcaster!
  6. @Injected() var settingsManager: SettingsManager!
  7. private(set) var filteredGlucoseHours = 3
  8. @Published var glucose: [BloodGlucose] = []
  9. @Published var suggestion: Suggestion?
  10. @Published var allowManualTemp = false
  11. override func subscribe() {
  12. glucose = provider.filteredGlucose(hours: filteredGlucoseHours)
  13. suggestion = provider.suggestion
  14. allowManualTemp = !settingsManager.settings.closedLoop
  15. broadcaster.register(GlucoseObserver.self, observer: self)
  16. broadcaster.register(SuggestionObserver.self, observer: self)
  17. broadcaster.register(SettingsObserver.self, observer: self)
  18. }
  19. func addCarbs() {
  20. showModal(for: .addCarbs)
  21. }
  22. func runLoop() {
  23. provider.fetchAndLoop()
  24. }
  25. func addTempTarget() {
  26. showModal(for: .addTempTarget)
  27. }
  28. func manualTampBasal() {
  29. showModal(for: .manualTempBasal)
  30. }
  31. func bolus() {
  32. showModal(for: .bolus)
  33. }
  34. func settings() {
  35. showModal(for: .settings)
  36. }
  37. func setFilteredGlucoseHours(hours: Int) {
  38. filteredGlucoseHours = hours
  39. }
  40. }
  41. }
  42. extension Home.ViewModel: GlucoseObserver, SuggestionObserver, SettingsObserver {
  43. func glucoseDidUpdate(_: [BloodGlucose]) {
  44. glucose = provider.filteredGlucose(hours: filteredGlucoseHours)
  45. }
  46. func suggestionDidUpdate(_ suggestion: Suggestion) {
  47. self.suggestion = suggestion
  48. }
  49. func settingsDidChange(_ settings: FreeAPSSettings) {
  50. allowManualTemp = !settings.closedLoop
  51. }
  52. }