| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import SwiftUI
- extension AddTempTarget {
- final class StateModel: BaseStateModel<Provider> {
- @Injected() private var storage: TempTargetsStorage!
- @Injected() var apsManager: APSManager!
- @Published var low: Decimal = 0
- @Published var high: Decimal = 0
- @Published var duration: Decimal = 0
- @Published var date = Date()
- @Published var newPresetName = ""
- @Published var presets: [TempTarget] = []
- @Published var percentage = 100.0
- @Published var maxValue: Decimal = 1.2
- @Published var halfBasal: Decimal = 160
- private(set) var units: GlucoseUnits = .mmolL
- override func subscribe() {
- units = settingsManager.settings.units
- presets = storage.presets()
- maxValue = settingsManager.preferences.autosensMax
- halfBasal = settingsManager.preferences.halfBasalExerciseTarget
- }
- func enact() {
- let diff = Double(halfBasal - 100)
- let multiplier = percentage - (diff * (percentage / 100))
- let ratio = min(Decimal(percentage / 100), maxValue)
- var target = Decimal(diff + multiplier) / ratio
- if (halfBasal + (halfBasal + target - 100)) <= 0 {
- target = (halfBasal - 100 + (halfBasal - 100) * maxValue) / maxValue
- }
- let lowTarget = target
- let highTarget = lowTarget
- let entry = TempTarget(
- name: TempTarget.custom,
- createdAt: date,
- targetTop: highTarget,
- targetBottom: lowTarget,
- duration: duration,
- enteredBy: TempTarget.manual,
- reason: TempTarget.custom
- )
- storage.storeTempTargets([entry])
- showModal(for: nil)
- }
- func cancel() {
- storage.storeTempTargets([TempTarget.cancel(at: Date())])
- showModal(for: nil)
- }
- func save() {
- let diff = Double(halfBasal - 100)
- let multiplier = percentage - (diff * (percentage / 100))
- let ratio = min(Decimal(percentage / 100), maxValue)
- var target = Decimal(diff + multiplier) / ratio
- if (halfBasal + (halfBasal + target - 100)) <= 0 {
- target = (halfBasal - 100 + (halfBasal - 100) * maxValue) / maxValue
- }
- let lowTarget = target
- let highTarget = lowTarget
- let entry = TempTarget(
- name: newPresetName.isEmpty ? TempTarget.custom : newPresetName,
- createdAt: Date(),
- targetTop: highTarget,
- targetBottom: lowTarget,
- duration: duration,
- enteredBy: TempTarget.manual,
- reason: newPresetName.isEmpty ? TempTarget.custom : newPresetName
- )
- presets.append(entry)
- storage.storePresets(presets)
- }
- func enactPreset(id: String) {
- if var preset = presets.first(where: { $0.id == id }) {
- preset.createdAt = Date()
- storage.storeTempTargets([preset])
- showModal(for: nil)
- }
- }
- func removePreset(id: String) {
- presets = presets.filter { $0.id != id }
- storage.storePresets(presets)
- }
- }
- }
|