import SwiftUI extension NotificationsConfig { final class StateModel: BaseStateModel { @Published var glucoseBadge = false @Published var tooOldGlucose = false @Published var glucoseNotificationsAlways = false @Published var useAlarmSound = false @Published var addSourceInfoToGlucoseNotifications = false @Published var lowGlucose: Decimal = 0 @Published var highGlucose: Decimal = 0 @Published var carbsRequiredThreshold: Decimal = 0 var units: GlucoseUnits = .mmolL override func subscribe() { let units = settingsManager.settings.units self.units = units subscribeSetting(\.glucoseBadge, on: $glucoseBadge) { glucoseBadge = $0 } subscribeSetting(\.tooOldGlucose, on: $tooOldGlucose) { tooOldGlucose = $0 } subscribeSetting(\.glucoseNotificationsAlways, on: $glucoseNotificationsAlways) { glucoseNotificationsAlways = $0 } subscribeSetting(\.useAlarmSound, on: $useAlarmSound) { useAlarmSound = $0 } subscribeSetting(\.addSourceInfoToGlucoseNotifications, on: $addSourceInfoToGlucoseNotifications) { addSourceInfoToGlucoseNotifications = $0 } subscribeSetting(\.lowGlucose, on: $lowGlucose, initial: { let value = max(min($0, 400), 40) lowGlucose = units == .mmolL ? value.asMmolL : value }, map: { guard units == .mmolL else { return $0 } return $0.asMgdL }) subscribeSetting(\.highGlucose, on: $highGlucose, initial: { let value = max(min($0, 400), 40) highGlucose = units == .mmolL ? value.asMmolL : value }, map: { guard units == .mmolL else { return $0 } return $0.asMgdL }) subscribeSetting( \.carbsRequiredThreshold, on: $carbsRequiredThreshold ) { carbsRequiredThreshold = $0 } } } }