AlarmEditor.swift 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. /* TODO: add other condition types here */
  53. default:
  54. Text("No editor for \(alarm.type.rawValue)")
  55. .padding()
  56. }
  57. }
  58. }