AddTempTargetStateModel.swift 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import SwiftUI
  2. extension AddTempTarget {
  3. final class StateModel: BaseStateModel<Provider> {
  4. @Injected() private var storage: TempTargetsStorage!
  5. @Injected() private var settingsManager: SettingsManager!
  6. @Injected() var apsManager: APSManager!
  7. @Published var low: Decimal = 0
  8. @Published var high: Decimal = 0
  9. @Published var duration: Decimal = 0
  10. @Published var date = Date()
  11. @Published var newPresetName = ""
  12. @Published var presets: [TempTarget] = []
  13. private(set) var units: GlucoseUnits = .mmolL
  14. override func subscribe() {
  15. units = settingsManager.settings.units
  16. presets = storage.presets()
  17. }
  18. func enact() {
  19. var lowTarget = low
  20. var highTarget = high
  21. highTarget = max(highTarget, lowTarget)
  22. if units == .mmolL {
  23. lowTarget = lowTarget.asMgdL
  24. highTarget = highTarget.asMgdL
  25. }
  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. let entry = TempTarget(
  40. name: TempTarget.cancel,
  41. createdAt: Date(),
  42. targetTop: 0,
  43. targetBottom: 0,
  44. duration: 0,
  45. enteredBy: TempTarget.manual,
  46. reason: TempTarget.cancel
  47. )
  48. storage.storeTempTargets([entry])
  49. showModal(for: nil)
  50. }
  51. func save() {
  52. var lowTarget = low
  53. var highTarget = high
  54. highTarget = max(highTarget, lowTarget)
  55. if units == .mmolL {
  56. lowTarget = lowTarget.asMgdL
  57. highTarget = highTarget.asMgdL
  58. }
  59. let entry = TempTarget(
  60. name: newPresetName.isEmpty ? TempTarget.custom : newPresetName,
  61. createdAt: Date(),
  62. targetTop: highTarget,
  63. targetBottom: lowTarget,
  64. duration: duration,
  65. enteredBy: TempTarget.manual,
  66. reason: newPresetName.isEmpty ? TempTarget.custom : newPresetName
  67. )
  68. presets.append(entry)
  69. storage.storePresets(presets)
  70. }
  71. func enactPreset(id: String) {
  72. if var preset = presets.first(where: { $0.id == id }) {
  73. preset.createdAt = Date()
  74. storage.storeTempTargets([preset])
  75. showModal(for: nil)
  76. }
  77. }
  78. func removePreset(id: String) {
  79. presets = presets.filter { $0.id != id }
  80. storage.storePresets(presets)
  81. }
  82. }
  83. }