WatchConfigStateModel.swift 1.6 KB

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