GlucoseValuePicker.swift 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. //
  2. // GlucoseValuePicker.swift
  3. // LoopKitUI
  4. //
  5. // Created by Michael Pangburn on 4/14/20.
  6. // Copyright © 2020 LoopKit Authors. All rights reserved.
  7. //
  8. import SwiftUI
  9. import HealthKit
  10. import LoopKit
  11. public struct GlucoseValuePicker: View {
  12. @Environment(\.guidanceColors) var guidanceColors
  13. @Binding var value: HKQuantity
  14. var unit: HKUnit
  15. var guardrail: Guardrail<HKQuantity>
  16. var bounds: ClosedRange<HKQuantity>
  17. var isUnitLabelVisible: Bool
  18. public init(
  19. value: Binding<HKQuantity>,
  20. unit: HKUnit,
  21. guardrail: Guardrail<HKQuantity>,
  22. bounds: ClosedRange<HKQuantity>,
  23. isUnitLabelVisible: Bool = true
  24. ) {
  25. self._value = value
  26. self.unit = unit
  27. self.guardrail = guardrail
  28. self.bounds = bounds
  29. self.isUnitLabelVisible = isUnitLabelVisible
  30. }
  31. public init(
  32. value: Binding<HKQuantity>,
  33. unit: HKUnit,
  34. guardrail: Guardrail<HKQuantity>,
  35. isUnitLabelVisible: Bool = true
  36. ) {
  37. self.init(value: value, unit: unit, guardrail: guardrail, bounds: guardrail.absoluteBounds, isUnitLabelVisible: isUnitLabelVisible)
  38. }
  39. public var body: some View {
  40. QuantityPicker(value: $value,
  41. unit: unit,
  42. guardrail: guardrail,
  43. selectableValues: selectableValues,
  44. isUnitLabelVisible: isUnitLabelVisible,
  45. guidanceColors: guidanceColors)
  46. }
  47. var selectableValues: [Double] {
  48. return bounds.roundedDisplayValues(for: unit)
  49. }
  50. }
  51. private struct GlucoseValuePickerTester: View {
  52. @State var value = HKQuantity(unit: .milligramsPerDeciliter, doubleValue: 80)
  53. private let guardrail = Guardrail(absoluteBounds: 54...180, recommendedBounds: 71...120, unit: .milligramsPerDeciliter, startingSuggestion: 80)
  54. var unit: HKUnit
  55. var body: some View {
  56. GlucoseValuePicker(value: $value, unit: unit, guardrail: guardrail)
  57. }
  58. }
  59. struct GlucoseValuePicker_Previews: PreviewProvider {
  60. static var previews: some View {
  61. ForEach([HKUnit.milligramsPerDeciliter, .millimolesPerLiter], id: \.self) { unit in
  62. GlucoseValuePickerTester(unit: unit)
  63. }
  64. }
  65. }