BasalProfileEditorViewModel.swift 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import SwiftUI
  2. extension BasalProfileEditor {
  3. class ViewModel<Provider>: BaseViewModel<Provider>, ObservableObject where Provider: BasalProfileEditorProvider {
  4. @Injected() var devicemanager: DeviceDataManager!
  5. @Published var syncInProgress = false
  6. @Published var items: [Item] = []
  7. private var maxBasal = 2
  8. var timeValues: [TimeInterval] {
  9. stride(from: 0.0, to: 1.days.timeInterval, by: 30.minutes.timeInterval).map { $0 }
  10. }
  11. private(set) var rateValues: [Double] = stride(from: 0.05, to: 10.01, by: 0.05).map { $0 }
  12. var canAdd: Bool {
  13. guard let lastItem = items.last else { return true }
  14. return lastItem.timeIndex < timeValues.count - 1
  15. }
  16. override func subscribe() {
  17. if let pump = devicemanager.pumpManager {
  18. rateValues = pump.supportedBasalRates
  19. }
  20. }
  21. func add() {
  22. var selected = 0
  23. var rate = 0
  24. if let last = items.last {
  25. selected = last.timeIndex + 1
  26. rate = last.rateIndex
  27. }
  28. let newItem = Item(rateIndex: rate, selectedIndex: selected)
  29. items.append(newItem)
  30. }
  31. func save() {}
  32. func validate() {
  33. DispatchQueue.main.async {
  34. let uniq = Array(Set(self.items))
  35. let sorted = uniq.sorted { $0.timeIndex < $1.timeIndex }
  36. sorted.first?.timeIndex = 0
  37. self.items = sorted
  38. }
  39. }
  40. }
  41. }