AddTempTargetStateModel.swift 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. private(set) var units: GlucoseUnits = .mmolL
  13. override func subscribe() {
  14. units = settingsManager.settings.units
  15. presets = storage.presets()
  16. }
  17. func enact() {
  18. var lowTarget = low
  19. var highTarget = high
  20. highTarget = max(highTarget, lowTarget)
  21. if units == .mmolL {
  22. lowTarget = lowTarget.asMgdL
  23. highTarget = highTarget.asMgdL
  24. }
  25. let entry = TempTarget(
  26. name: TempTarget.custom,
  27. createdAt: date,
  28. targetTop: highTarget,
  29. targetBottom: lowTarget,
  30. duration: duration,
  31. enteredBy: TempTarget.manual,
  32. reason: TempTarget.custom
  33. )
  34. storage.storeTempTargets([entry])
  35. showModal(for: nil)
  36. }
  37. func cancel() {
  38. storage.storeTempTargets([TempTarget.cancel(at: Date())])
  39. showModal(for: nil)
  40. }
  41. func save() {
  42. var lowTarget = low
  43. var highTarget = high
  44. highTarget = max(highTarget, lowTarget)
  45. if units == .mmolL {
  46. lowTarget = lowTarget.asMgdL
  47. highTarget = highTarget.asMgdL
  48. }
  49. let entry = TempTarget(
  50. name: newPresetName.isEmpty ? TempTarget.custom : newPresetName,
  51. createdAt: Date(),
  52. targetTop: highTarget,
  53. targetBottom: lowTarget,
  54. duration: duration,
  55. enteredBy: TempTarget.manual,
  56. reason: newPresetName.isEmpty ? TempTarget.custom : newPresetName
  57. )
  58. presets.append(entry)
  59. storage.storePresets(presets)
  60. }
  61. func enactPreset(id: String) {
  62. if var preset = presets.first(where: { $0.id == id }) {
  63. preset.createdAt = Date()
  64. storage.storeTempTargets([preset])
  65. showModal(for: nil)
  66. }
  67. }
  68. func removePreset(id: String) {
  69. presets = presets.filter { $0.id != id }
  70. storage.storePresets(presets)
  71. }
  72. }
  73. }