AlarmBGSection.swift 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. init(
  17. header: String? = nil,
  18. footer: String? = nil,
  19. title: String,
  20. range: ClosedRange<Double>,
  21. value: Binding<Double>
  22. ) {
  23. self.header = header
  24. self.footer = footer
  25. self.title = title
  26. self.range = range
  27. self._value = value
  28. }
  29. private var unit: HKUnit { UserDefaultsRepository.getPreferredUnit() }
  30. private var displayValue: String {
  31. "\(Localizer.formatQuantity(value)) \(unit.localizedShortUnitString)"
  32. }
  33. private var allValues: [Double] {
  34. let step = unit == .millimolesPerLiter ? 18.0 * 0.1 : 1
  35. return Array(stride(from: range.lowerBound, through: range.upperBound, by: step))
  36. }
  37. var body: some View {
  38. Section(
  39. header: header.map(Text.init),
  40. footer: footer.map(Text.init)
  41. ) {
  42. Picker(
  43. selection: $value,
  44. label: HStack {
  45. Text(title)
  46. }
  47. ) {
  48. ForEach(allValues, id: \.self) { v in
  49. Text("\(Localizer.formatQuantity(v)) \(unit.localizedShortUnitString)")
  50. .tag(v)
  51. }
  52. }
  53. }
  54. }
  55. }