ScheduleItemPicker.swift 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. .compositingGroup()
  37. .accessibility(identifier: "time_picker")
  38. self.valuePicker(/* availableWidth: */ 2/3 * geometry.size.width)
  39. }
  40. Spacer()
  41. }
  42. }
  43. .frame(height: 216)
  44. }
  45. }