HomeRootView.swift 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import SwiftUI
  2. extension Home {
  3. struct RootView: BaseView {
  4. @EnvironmentObject var viewModel: ViewModel<Provider>
  5. @State var showHours = 1
  6. var mainChart: some View {
  7. GeometryReader { geo in
  8. ScrollView(.horizontal, showsIndicators: false) {
  9. CombinedChartView(
  10. maxWidth: geo.size.width,
  11. showHours: showHours,
  12. glucoseData: $viewModel.glucose,
  13. predictionsData: .constant([])
  14. )
  15. }
  16. }
  17. .padding(.vertical)
  18. .background(Color(.systemGray6))
  19. .cornerRadius(12)
  20. }
  21. var previewChart: some View {
  22. GeometryReader { geo in
  23. CombinedChartView(
  24. maxWidth: geo.size.width,
  25. showHours: 24,
  26. glucoseData: $viewModel.glucose,
  27. predictionsData: .constant([])
  28. )
  29. }
  30. .frame(maxWidth: .infinity)
  31. .padding(.vertical)
  32. .background(Color(.systemGray6))
  33. .cornerRadius(10)
  34. }
  35. var body: some View {
  36. viewModel.setFilteredGlucoseHours(hours: 24)
  37. return GeometryReader { geo in
  38. VStack {
  39. Group {
  40. Text("Header")
  41. }
  42. ScrollView(.vertical, showsIndicators: false) {
  43. HoursPickerView(selectedHour: $showHours).padding(.horizontal)
  44. mainChart
  45. .frame(height: geo.size.height * 0.6)
  46. .padding(.horizontal)
  47. previewChart
  48. .frame(height: 50)
  49. .padding(.horizontal)
  50. // GlucoseChartView(glucose: $viewModel.glucose, suggestion: $viewModel.suggestion).frame(height: 150)
  51. if let reason = viewModel.suggestion?.reason {
  52. Text(reason).font(.caption).padding()
  53. }
  54. Button(action: viewModel.runLoop) {
  55. Text("Run loop now").buttonBackground().padding()
  56. }.foregroundColor(.white)
  57. }
  58. ZStack {
  59. Rectangle().fill(Color.gray.opacity(0.2)).frame(height: 50 + geo.safeAreaInsets.bottom)
  60. HStack {
  61. Button { viewModel.showModal(for: .addCarbs) }
  62. label: {
  63. Image(systemName: "circlebadge.2.fill")
  64. }.foregroundColor(.green)
  65. Spacer()
  66. Button { viewModel.showModal(for: .addTempTarget) }
  67. label: {
  68. Image(systemName: "target")
  69. }.foregroundColor(.green)
  70. Spacer()
  71. Button { viewModel.showModal(for: .bolus) }
  72. label: {
  73. Image(systemName: "drop.fill")
  74. }.foregroundColor(.orange)
  75. Spacer()
  76. if viewModel.allowManualTemp {
  77. Button { viewModel.showModal(for: .manualTempBasal) }
  78. label: {
  79. Image(systemName: "circle.bottomhalf.fill")
  80. }.foregroundColor(.blue)
  81. Spacer()
  82. }
  83. Button { viewModel.showModal(for: .settings) }
  84. label: {
  85. Image(systemName: "gearshape")
  86. }.foregroundColor(.gray)
  87. }
  88. .padding(.horizontal, 24)
  89. .padding(.bottom, geo.safeAreaInsets.bottom)
  90. }
  91. }
  92. .edgesIgnoringSafeArea(.bottom)
  93. }
  94. .navigationTitle("Home")
  95. .navigationBarHidden(true)
  96. }
  97. }
  98. }