HomeRootView.swift 4.4 KB

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