SnoozerView.swift 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //
  2. // SnoozerView.swift
  3. // LoopFollow
  4. //
  5. // Created by Jonas Björkert on 2025-04-26.
  6. // Copyright © 2025 Jon Fawcett. All rights reserved.
  7. //
  8. import SwiftUI
  9. struct SnoozerView: View {
  10. @ObservedObject var bgValue: ObservableValue<String>
  11. @ObservedObject var deltaValue: ObservableValue<String>
  12. @ObservedObject var direction: ObservableValue<String>
  13. @ObservedObject var age: ObservableValue<String>
  14. @ObservedObject var time: ObservableValue<String>
  15. @ObservedObject var alarmText: ObservableValue<String?>
  16. @Binding var snoozeMinutes: Int
  17. var onSnooze: () -> Void
  18. var body: some View {
  19. VStack(spacing: 12) {
  20. Text(bgValue.value)
  21. .font(.system(size: 72, weight: .bold))
  22. .foregroundColor(.yellow)
  23. if let alarm = alarmText.value, !alarm.isEmpty {
  24. Text(alarm)
  25. .font(.title2)
  26. .foregroundColor(.red)
  27. }
  28. Text(direction.value)
  29. .font(.title)
  30. Text(deltaValue.value)
  31. .font(.title2)
  32. .foregroundColor(.white.opacity(0.8))
  33. Text(age.value + " ago")
  34. .font(.subheadline)
  35. .foregroundColor(.white.opacity(0.6))
  36. Text(time.value)
  37. .font(.title3)
  38. HStack {
  39. Text("Snooze for \(snoozeMinutes) min")
  40. Stepper("", value: $snoozeMinutes, in: 1...60)
  41. .labelsHidden()
  42. }
  43. .padding(.top)
  44. Button("Snooze", action: onSnooze)
  45. .padding()
  46. .background(Color.blue)
  47. .foregroundColor(.white)
  48. .cornerRadius(8)
  49. }
  50. .padding()
  51. .background(Color.black)
  52. .edgesIgnoringSafeArea(.all)
  53. }
  54. }