WatchConfigStateModel.swift 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. @Published var displayFatAndProteinOnWatch = false
  31. @Published var confirmBolusFaster = false
  32. private(set) var preferences = Preferences()
  33. override func subscribe() {
  34. preferences = provider.preferences
  35. subscribeSetting(\.displayFatAndProteinOnWatch, on: $displayFatAndProteinOnWatch) { displayFatAndProteinOnWatch = $0 }
  36. subscribeSetting(\.confirmBolusFaster, on: $confirmBolusFaster) { confirmBolusFaster = $0 }
  37. subscribeSetting(\.displayOnWatch, on: $selectedAwConfig) { selectedAwConfig = $0 }
  38. didSet: { [weak self] value in
  39. // for compatibility with old displayHR
  40. switch value {
  41. case .HR:
  42. self?.settingsManager.settings.displayHR = true
  43. default:
  44. self?.settingsManager.settings.displayHR = false
  45. }
  46. }
  47. devices = garmin.devices
  48. }
  49. func selectGarminDevices() {
  50. garmin.selectDevices()
  51. .receive(on: DispatchQueue.main)
  52. .weakAssign(to: \.devices, on: self)
  53. .store(in: &lifetime)
  54. }
  55. func deleteGarminDevice() {
  56. garmin.updateListDevices(devices: devices)
  57. }
  58. }
  59. }