HomeRootView.swift 3.6 KB

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