WatchConfigStateModel.swift 1.9 KB

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