ScheduleItemPicker.swift 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //
  2. // ScheduleItemPicker.swift
  3. // LoopKitUI
  4. //
  5. // Created by Michael Pangburn on 4/24/20.
  6. // Copyright © 2020 LoopKit Authors. All rights reserved.
  7. //
  8. import SwiftUI
  9. import LoopKit
  10. struct ScheduleItemPicker<Value, ValuePicker: View>: View {
  11. @Binding var item: RepeatingScheduleValue<Value>
  12. var isTimeSelectable: (TimeInterval) -> Bool
  13. var valuePicker: (_ availableWidth: CGFloat) -> ValuePicker
  14. init(
  15. item: Binding<RepeatingScheduleValue<Value>>,
  16. isTimeSelectable: @escaping (TimeInterval) -> Bool,
  17. @ViewBuilder valuePicker: @escaping (_ availableWidth: CGFloat) -> ValuePicker
  18. ) {
  19. self._item = item
  20. self.isTimeSelectable = isTimeSelectable
  21. self.valuePicker = valuePicker
  22. }
  23. var body: some View {
  24. GeometryReader { geometry in
  25. HStack {
  26. Spacer()
  27. HStack(spacing: 0) {
  28. TimePicker(
  29. offsetFromMidnight: self.$item.startTime,
  30. bounds: 0...TimeInterval(hours: 23.5),
  31. stride: .hours(0.5),
  32. isTimeExcluded: { !self.isTimeSelectable($0) }
  33. )
  34. .frame(width: geometry.size.width / 3)
  35. .clipped()
  36. .accessibility(identifier: "time_picker")
  37. self.valuePicker(/* availableWidth: */ 2/3 * geometry.size.width)
  38. }
  39. Spacer()
  40. }
  41. }
  42. .frame(height: 216)
  43. }
  44. }