AlarmEditor.swift 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // LoopFollow
  2. // AlarmEditor.swift
  3. // Created by Jonas Björkert on 2025-04-26.
  4. import SwiftUI
  5. struct AlarmEditor: View {
  6. @Binding var alarm: Alarm
  7. var isNew: Bool = false
  8. var onDone: () -> Void = {}
  9. var onCancel: () -> Void = {}
  10. @Environment(\.dismiss) private var dismiss
  11. var body: some View {
  12. NavigationStack {
  13. innerEditor()
  14. .navigationBarTitleDisplayMode(.inline)
  15. .toolbar {
  16. if isNew {
  17. ToolbarItem(placement: .confirmationAction) {
  18. Button("Done") {
  19. onDone()
  20. dismiss()
  21. }
  22. }
  23. ToolbarItem(placement: .cancellationAction) {
  24. Button("Cancel") {
  25. onCancel()
  26. dismiss()
  27. }
  28. }
  29. }
  30. }
  31. }
  32. }
  33. @ViewBuilder
  34. private func innerEditor() -> some View {
  35. switch alarm.type {
  36. case .buildExpire:
  37. BuildExpireAlarmEditor(alarm: $alarm)
  38. case .high:
  39. HighBgAlarmEditor(alarm: $alarm)
  40. case .low:
  41. LowBgAlarmEditor(alarm: $alarm)
  42. case .missedReading:
  43. MissedReadingEditor(alarm: $alarm)
  44. case .fastDrop:
  45. FastDropAlarmEditor(alarm: $alarm)
  46. case .notLooping:
  47. NotLoopingAlarmEditor(alarm: $alarm)
  48. case .overrideStart:
  49. OverrideStartAlarmEditor(alarm: $alarm)
  50. case .overrideEnd:
  51. OverrideEndAlarmEditor(alarm: $alarm)
  52. case .tempTargetStart:
  53. TempTargetStartAlarmEditor(alarm: $alarm)
  54. case .tempTargetEnd:
  55. TempTargetEndAlarmEditor(alarm: $alarm)
  56. case .recBolus:
  57. RecBolusAlarmEditor(alarm: $alarm)
  58. case .cob:
  59. COBAlarmEditor(alarm: $alarm)
  60. case .fastRise:
  61. FastRiseAlarmEditor(alarm: $alarm)
  62. case .temporary:
  63. TemporaryAlarmEditor(alarm: $alarm)
  64. case .sensorChange:
  65. SensorAgeAlarmEditor(alarm: $alarm)
  66. case .pumpChange:
  67. PumpChangeAlarmEditor(alarm: $alarm)
  68. case .pump:
  69. PumpVolumeAlarmEditor(alarm: $alarm)
  70. case .iob:
  71. IOBAlarmEditor(alarm: $alarm)
  72. case .battery:
  73. BatteryAlarmEditor(alarm: $alarm)
  74. /* TODO: add other condition types here */
  75. default:
  76. Text("No editor for \(alarm.type.rawValue)")
  77. .padding()
  78. }
  79. }
  80. }