WatchConfigStateModel.swift 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import ConnectIQ
  2. import SwiftUI
  3. enum AwConfig: String, CaseIterable, Identifiable {
  4. var id: Self { self }
  5. case HR = "Heart Rate"
  6. case BGTarget = "Glucose Target"
  7. }
  8. extension WatchConfig {
  9. final class StateModel: BaseStateModel<Provider> {
  10. @Injected() private var garmin: GarminManager!
  11. @Published var devices: [IQDevice] = []
  12. @Published var selectedAwConfig: AwConfig = .HR
  13. @Published var displayHR = false
  14. private(set) var preferences = Preferences()
  15. override func subscribe() {
  16. preferences = provider.preferences
  17. switch settingsManager.settings.displayHR {
  18. case true:
  19. selectedAwConfig = .HR
  20. case false:
  21. selectedAwConfig = .BGTarget
  22. }
  23. $selectedAwConfig.removeDuplicates()
  24. .map {
  25. switch $0 {
  26. case .HR:
  27. return true
  28. case .BGTarget:
  29. return false
  30. }
  31. }
  32. .sink { [weak self] value in
  33. self?.settingsManager.settings.displayHR = value
  34. }
  35. .store(in: &lifetime)
  36. devices = garmin.devices
  37. }
  38. func selectGarminDevices() {
  39. garmin.selectDevices()
  40. .receive(on: DispatchQueue.main)
  41. .weakAssign(to: \.devices, on: self)
  42. .store(in: &lifetime)
  43. }
  44. func deleteGarminDevice() {
  45. garmin.updateListDevices(devices: devices)
  46. }
  47. }
  48. }