AlarmEditor.swift 2.2 KB

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