HomeViewModel.swift 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import SwiftDate
  2. import SwiftUI
  3. extension Home {
  4. class ViewModel<Provider>: BaseViewModel<Provider>, ObservableObject where Provider: HomeProvider {
  5. @Injected() var apsManager: APSManager!
  6. @Injected() var history: PumpHistoryStorage!
  7. @Injected() var temps: TempTargetsStorage!
  8. @Injected() var glucoseStorage: GlucoseStorage!
  9. @Injected() var broadcaster: Broadcaster!
  10. @Published var glucose: [BloodGlucose] = []
  11. override func subscribe() {
  12. glucose = filteredGlucose(glucoseStorage.recent())
  13. broadcaster.register(GlucoseObserver.self, observer: self)
  14. }
  15. func addCarbs() {
  16. showModal(for: .addCarbs)
  17. }
  18. func runLoop() {
  19. apsManager.fetchAndLoop()
  20. }
  21. func addTempTarget() {
  22. showModal(for: .addTempTarget)
  23. }
  24. func bolus() {
  25. showModal(for: .bolus)
  26. }
  27. private func filteredGlucose(_ glucose: [BloodGlucose]) -> [BloodGlucose] {
  28. glucose.filter {
  29. $0.dateString.addingTimeInterval(3.hours.timeInterval) > Date()
  30. }
  31. }
  32. }
  33. }
  34. extension Home.ViewModel: GlucoseObserver {
  35. func glucoseDidUpdate(_ glucose: [BloodGlucose]) {
  36. self.glucose = filteredGlucose(glucose)
  37. }
  38. }