AlarmEditor.swift 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // LoopFollow
  2. // AlarmEditor.swift
  3. import SwiftUI
  4. struct AlarmEditor: View {
  5. @Binding var alarm: Alarm
  6. var isNew: Bool = false
  7. var onDone: () -> Void = {}
  8. var onCancel: () -> Void = {}
  9. var onDelete: () -> Void = {}
  10. @Environment(\.dismiss) private var dismiss
  11. var body: some View {
  12. NavigationStack {
  13. Form {
  14. innerEditorBody()
  15. if !isNew {
  16. DeleteAlarmSection {
  17. onDelete()
  18. dismiss()
  19. }
  20. }
  21. }.navigationBarTitleDisplayMode(.inline)
  22. .toolbar {
  23. ToolbarItem(placement: .confirmationAction) {
  24. Button("Done") {
  25. onDone()
  26. dismiss()
  27. }
  28. }
  29. if isNew {
  30. ToolbarItem(placement: .cancellationAction) {
  31. Button("Cancel") {
  32. onCancel()
  33. dismiss()
  34. }
  35. }
  36. }
  37. }
  38. .navigationTitle(alarm.type.rawValue)
  39. }
  40. .preferredColorScheme(Storage.shared.appearanceMode.value.colorScheme)
  41. }
  42. @ViewBuilder
  43. private func innerEditor() -> some View {
  44. Form {
  45. innerEditorBody()
  46. DeleteAlarmSection {
  47. onDelete()
  48. dismiss()
  49. }
  50. }
  51. }
  52. /// Break the old `switch` out into its own helper so the call above is tidy.
  53. @ViewBuilder
  54. private func innerEditorBody() -> some View {
  55. switch alarm.type {
  56. case .buildExpire: BuildExpireAlarmEditor(alarm: $alarm)
  57. case .high: HighBgAlarmEditor(alarm: $alarm)
  58. case .low: LowBgAlarmEditor(alarm: $alarm)
  59. case .missedReading: MissedReadingEditor(alarm: $alarm)
  60. case .fastDrop: FastDropAlarmEditor(alarm: $alarm)
  61. case .notLooping: NotLoopingAlarmEditor(alarm: $alarm)
  62. case .overrideStart: OverrideStartAlarmEditor(alarm: $alarm)
  63. case .overrideEnd: OverrideEndAlarmEditor(alarm: $alarm)
  64. case .tempTargetStart: TempTargetStartAlarmEditor(alarm: $alarm)
  65. case .tempTargetEnd: TempTargetEndAlarmEditor(alarm: $alarm)
  66. case .recBolus: RecBolusAlarmEditor(alarm: $alarm)
  67. case .cob: COBAlarmEditor(alarm: $alarm)
  68. case .fastRise: FastRiseAlarmEditor(alarm: $alarm)
  69. case .temporary: TemporaryAlarmEditor(alarm: $alarm)
  70. case .sensorChange: SensorAgeAlarmEditor(alarm: $alarm)
  71. case .pumpChange: PumpChangeAlarmEditor(alarm: $alarm)
  72. case .pump: PumpVolumeAlarmEditor(alarm: $alarm)
  73. case .pumpBattery: PumpBatteryAlarmEditor(alarm: $alarm)
  74. case .iob: IOBAlarmEditor(alarm: $alarm)
  75. case .battery: PhoneBatteryAlarmEditor(alarm: $alarm)
  76. case .batteryDrop: BatteryDropAlarmEditor(alarm: $alarm)
  77. case .missedBolus: MissedBolusAlarmEditor(alarm: $alarm)
  78. case .futureCarbs: FutureCarbsAlarmEditor(alarm: $alarm)
  79. }
  80. }
  81. }