TemporaryAlarmEditor.swift 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. //
  2. // TemporaryAlarmEditor.swift
  3. // LoopFollow
  4. //
  5. // Created by Jonas Björkert on 2025-05-16.
  6. // Copyright © 2025 Jon Fawcett. All rights reserved.
  7. //
  8. import SwiftUI
  9. struct TemporaryAlarmEditor: View {
  10. @Binding var alarm: Alarm
  11. // Shared BG range
  12. private let bgRange: ClosedRange<Double> = 40 ... 300
  13. var body: some View {
  14. Form {
  15. InfoBanner(
  16. text: "This alert fires once when glucose crosses either of the limits you set below, and then disables itself.",
  17. alarmType: alarm.type
  18. )
  19. AlarmGeneralSection(alarm: $alarm)
  20. AlarmBGLimitSection(
  21. header: "Low Limit",
  22. footer: "Alert if BG is equal to or below this value.",
  23. toggleText: "Enable low limit",
  24. pickerTitle: "≤ BG",
  25. range: bgRange,
  26. value: $alarm.belowBG
  27. )
  28. AlarmBGLimitSection(
  29. header: "High Limit",
  30. footer: "Alert if BG is equal to or above this value.",
  31. toggleText: "Enable high limit",
  32. pickerTitle: "≥ BG",
  33. range: bgRange,
  34. value: $alarm.aboveBG
  35. )
  36. // Validation: ensure at least one limit is on
  37. if alarm.belowBG == nil && alarm.aboveBG == nil {
  38. Text("⚠️ Please enable at least one limit.")
  39. .foregroundColor(.red)
  40. }
  41. AlarmActiveSection(alarm: $alarm)
  42. AlarmAudioSection(alarm: $alarm)
  43. AlarmSnoozeSection(alarm: $alarm, range: 5 ... 60, step: 5)
  44. }
  45. .navigationTitle(alarm.type.rawValue)
  46. }
  47. }