Screen.swift 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import SwiftUI
  2. import Swinject
  3. enum Screen: Identifiable, Hashable {
  4. case loading
  5. case home
  6. case settings
  7. case configEditor(file: String)
  8. case nighscoutConfig
  9. case pumpConfig
  10. case pumpSettingsEditor
  11. case basalProfileEditor
  12. case isfEditor
  13. case crEditor
  14. case targetsEditor
  15. case preferencesEditor
  16. case addTempTarget
  17. case bolus(waitForSuggestion: Bool, fetch: Bool)
  18. case manualTempBasal
  19. case autotuneConfig
  20. case dataTable
  21. case cgm
  22. case healthkit
  23. case libreConfig
  24. case calibrations
  25. case notificationsConfig
  26. case fpuConfig
  27. case iconConfig
  28. case overrideProfilesConfig
  29. case snooze
  30. case statistics
  31. case watch
  32. case statisticsConfig
  33. case bolusCalculatorConfig
  34. case dynamicISF
  35. var id: Int { String(reflecting: self).hashValue }
  36. }
  37. extension Screen {
  38. @ViewBuilder func view(resolver: Resolver) -> some View {
  39. switch self {
  40. case .loading:
  41. ProgressView()
  42. case .home:
  43. Home.RootView(resolver: resolver)
  44. case .settings:
  45. Settings.RootView(resolver: resolver)
  46. case let .configEditor(file):
  47. ConfigEditor.RootView(resolver: resolver, file: file)
  48. case .nighscoutConfig:
  49. NightscoutConfig.RootView(resolver: resolver)
  50. case .pumpConfig:
  51. PumpConfig.RootView(resolver: resolver)
  52. case .pumpSettingsEditor:
  53. PumpSettingsEditor.RootView(resolver: resolver)
  54. case .basalProfileEditor:
  55. BasalProfileEditor.RootView(resolver: resolver)
  56. case .isfEditor:
  57. ISFEditor.RootView(resolver: resolver)
  58. case .crEditor:
  59. CREditor.RootView(resolver: resolver)
  60. case .targetsEditor:
  61. TargetsEditor.RootView(resolver: resolver)
  62. case .preferencesEditor:
  63. PreferencesEditor.RootView(resolver: resolver)
  64. case .addTempTarget:
  65. AddTempTarget.RootView(resolver: resolver)
  66. case let .bolus(waitForSuggestion, fetch):
  67. Bolus.RootView(
  68. resolver: resolver,
  69. waitForSuggestion: waitForSuggestion,
  70. fetch: fetch
  71. )
  72. case .manualTempBasal:
  73. ManualTempBasal.RootView(resolver: resolver)
  74. case .autotuneConfig:
  75. AutotuneConfig.RootView(resolver: resolver)
  76. case .dataTable:
  77. DataTable.RootView(resolver: resolver)
  78. case .cgm:
  79. CGM.RootView(resolver: resolver)
  80. case .healthkit:
  81. AppleHealthKit.RootView(resolver: resolver)
  82. case .libreConfig:
  83. LibreConfig.RootView(resolver: resolver)
  84. case .calibrations:
  85. Calibrations.RootView(resolver: resolver)
  86. case .notificationsConfig:
  87. NotificationsConfig.RootView(resolver: resolver)
  88. case .fpuConfig:
  89. FPUConfig.RootView(resolver: resolver)
  90. case .iconConfig:
  91. IconConfig.RootView(resolver: resolver)
  92. case .overrideProfilesConfig:
  93. OverrideProfilesConfig.RootView(resolver: resolver)
  94. case .snooze:
  95. Snooze.RootView(resolver: resolver)
  96. case .watch:
  97. WatchConfig.RootView(resolver: resolver)
  98. case .statistics:
  99. Stat.RootView(resolver: resolver)
  100. case .statisticsConfig:
  101. StatConfig.RootView(resolver: resolver)
  102. case .bolusCalculatorConfig:
  103. BolusCalculatorConfig.RootView(resolver: resolver)
  104. case .dynamicISF:
  105. Dynamic.RootView(resolver: resolver)
  106. }
  107. }
  108. func modal(resolver: Resolver) -> Main.Modal {
  109. .init(screen: self, view: view(resolver: resolver).asAny())
  110. }
  111. }