AddTempTargetViewModel.swift 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import SwiftUI
  2. extension AddTempTarget {
  3. class ViewModel<Provider>: BaseViewModel<Provider>, ObservableObject where Provider: AddTempTargetProvider {
  4. @Injected() private var storage: TempTargetsStorage!
  5. @Injected() private var settingsManager: SettingsManager!
  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. )
  33. storage.storeTempTargets([entry])
  34. showModal(for: nil)
  35. }
  36. func cancel() {
  37. let entry = TempTarget(
  38. name: TempTarget.cancel,
  39. createdAt: Date(),
  40. targetTop: 0,
  41. targetBottom: 0,
  42. duration: 0,
  43. enteredBy: TempTarget.manual
  44. )
  45. storage.storeTempTargets([entry])
  46. showModal(for: nil)
  47. }
  48. func save() {
  49. var lowTarget = low
  50. var highTarget = high
  51. highTarget = max(highTarget, lowTarget)
  52. if units == .mmolL {
  53. lowTarget = lowTarget.asMgdL
  54. highTarget = highTarget.asMgdL
  55. }
  56. let entry = TempTarget(
  57. name: newPresetName.isEmpty ? TempTarget.custom : newPresetName,
  58. createdAt: Date(),
  59. targetTop: highTarget,
  60. targetBottom: lowTarget,
  61. duration: duration,
  62. enteredBy: TempTarget.manual
  63. )
  64. presets.append(entry)
  65. storage.storePresets(presets)
  66. }
  67. func enactPreset(id: String) {
  68. if var preset = presets.first(where: { $0.id == id }) {
  69. preset.createdAt = Date()
  70. storage.storeTempTargets([preset])
  71. showModal(for: nil)
  72. }
  73. }
  74. func removePreset(id: String) {
  75. presets = presets.filter { $0.id != id }
  76. storage.storePresets(presets)
  77. }
  78. }
  79. }