WatchConfigStateModel.swift 1.6 KB

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