AlarmBGSection.swift 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. //
  2. // AlarmBGSection.swift
  3. // LoopFollow
  4. //
  5. // Created by Jonas Björkert on 2025-05-06.
  6. // Copyright © 2025 Jon Fawcett. All rights reserved.
  7. //
  8. import SwiftUI
  9. import HealthKit
  10. struct AlarmBGSection: View {
  11. let header: String?
  12. let footer: String?
  13. let title: String
  14. let range: ClosedRange<Double>
  15. @Binding var value: Double
  16. private var unit: HKUnit { UserDefaultsRepository.getPreferredUnit() }
  17. private var displayValue: String {
  18. "\(Localizer.formatQuantity(value)) \(unit.localizedShortUnitString)"
  19. }
  20. private var allValues: [Double] {
  21. let step = unit == .millimolesPerLiter ? 18.0 * 0.1 : 1
  22. return Array(stride(from: range.lowerBound, through: range.upperBound, by: step))
  23. }
  24. var body: some View {
  25. Section(
  26. header: header.map(Text.init),
  27. footer: footer.map(Text.init)
  28. ) {
  29. Picker(
  30. selection: $value,
  31. label: HStack {
  32. Text(title)
  33. }
  34. ) {
  35. ForEach(allValues, id: \.self) { v in
  36. Text("\(Localizer.formatQuantity(v)) \(unit.localizedShortUnitString)")
  37. .tag(v)
  38. }
  39. }
  40. }
  41. }
  42. }