AddTempTargetStateModel.swift 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import SwiftUI
  2. extension AddTempTarget {
  3. final class StateModel: BaseStateModel<Provider> {
  4. @Injected() private var storage: TempTargetsStorage!
  5. @Injected() var apsManager: APSManager!
  6. @Published var low: Decimal = 0
  7. @Published var high: Decimal = 0
  8. @Published var duration: Decimal = 0
  9. @Published var date = Date()
  10. @Published var newPresetName = ""
  11. @Published var presets: [TempTarget] = []
  12. @Published var percentage = 100.0
  13. @Published var maxValue: Decimal = 1.2
  14. @Published var halfBasal: Decimal = 160
  15. private(set) var units: GlucoseUnits = .mmolL
  16. override func subscribe() {
  17. units = settingsManager.settings.units
  18. presets = storage.presets()
  19. maxValue = settingsManager.preferences.autosensMax
  20. halfBasal = settingsManager.preferences.halfBasalExerciseTarget
  21. }
  22. func enact() {
  23. let diff = Double(halfBasal - 100)
  24. let lowTarget = Decimal(diff + 40 * (percentage / 100)) / (Decimal(percentage) / 100)
  25. let highTarget = lowTarget
  26. let entry = TempTarget(
  27. name: TempTarget.custom,
  28. createdAt: date,
  29. targetTop: highTarget,
  30. targetBottom: lowTarget,
  31. duration: duration,
  32. enteredBy: TempTarget.manual,
  33. reason: TempTarget.custom
  34. )
  35. storage.storeTempTargets([entry])
  36. showModal(for: nil)
  37. }
  38. func cancel() {
  39. storage.storeTempTargets([TempTarget.cancel(at: Date())])
  40. showModal(for: nil)
  41. }
  42. func save() {
  43. let lowTarget = Decimal(60 + 40 * (percentage / 100)) / (Decimal(percentage) / 100)
  44. let highTarget = lowTarget
  45. let entry = TempTarget(
  46. name: newPresetName.isEmpty ? TempTarget.custom : newPresetName,
  47. createdAt: Date(),
  48. targetTop: highTarget,
  49. targetBottom: lowTarget,
  50. duration: duration,
  51. enteredBy: TempTarget.manual,
  52. reason: newPresetName.isEmpty ? TempTarget.custom : newPresetName
  53. )
  54. presets.append(entry)
  55. storage.storePresets(presets)
  56. }
  57. func enactPreset(id: String) {
  58. if var preset = presets.first(where: { $0.id == id }) {
  59. preset.createdAt = Date()
  60. storage.storeTempTargets([preset])
  61. showModal(for: nil)
  62. }
  63. }
  64. func removePreset(id: String) {
  65. presets = presets.filter { $0.id != id }
  66. storage.storePresets(presets)
  67. }
  68. }
  69. }