AlarmEditor.swift 2.5 KB

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