MainHomeView.swift 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // LoopFollow
  2. // MainHomeView.swift
  3. import Charts
  4. import SwiftUI
  5. struct MainHomeView: View {
  6. let bgChart: LineChartView
  7. let bgChartFull: LineChartView
  8. @ObservedObject var infoManager: InfoManager
  9. @ObservedObject var statsModel: StatsDisplayModel
  10. @ObservedObject var showSmallGraph = Storage.shared.showSmallGraph
  11. @ObservedObject var showStats = Storage.shared.showStats
  12. @ObservedObject var hideInfoTable = Storage.shared.hideInfoTable
  13. @ObservedObject var smallGraphHeight = Storage.shared.smallGraphHeight
  14. @ObservedObject var url = Storage.shared.url
  15. @ObservedObject var graphTimeZoneEnabled = Storage.shared.graphTimeZoneEnabled
  16. @ObservedObject var graphTimeZoneIdentifier = Storage.shared.graphTimeZoneIdentifier
  17. var onRefresh: (() -> Void)?
  18. var onStatsTap: (() -> Void)?
  19. private var timeZoneOverride: String? {
  20. guard graphTimeZoneEnabled.value,
  21. let tz = TimeZone(identifier: graphTimeZoneIdentifier.value)
  22. else { return nil }
  23. return tz.identifier
  24. }
  25. private var isNightscoutEnabled: Bool {
  26. !url.value.isEmpty
  27. }
  28. var body: some View {
  29. VStack(spacing: 8) {
  30. // Top section: BG display + info table
  31. HStack(spacing: 10) {
  32. BGDisplayView(onRefresh: onRefresh)
  33. if isNightscoutEnabled && !hideInfoTable.value {
  34. InfoTableView(infoManager: infoManager, timeZoneOverride: timeZoneOverride)
  35. .frame(minWidth: 160, maxWidth: 250)
  36. .overlay(
  37. Rectangle()
  38. .fill(Color(UIColor.darkGray))
  39. .frame(width: 2),
  40. alignment: .leading
  41. )
  42. }
  43. }
  44. .fixedSize(horizontal: false, vertical: true)
  45. // Main chart (fills remaining space)
  46. LineChartWrapper(chartView: bgChart)
  47. // Small overview chart
  48. if showSmallGraph.value {
  49. LineChartWrapper(chartView: bgChartFull)
  50. .frame(height: CGFloat(smallGraphHeight.value))
  51. }
  52. // Statistics
  53. if showStats.value {
  54. StatsDisplayView(model: statsModel, onTap: onStatsTap)
  55. }
  56. }
  57. .padding(8)
  58. }
  59. }