Screen.swift 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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 nighscoutConfigDirect
  10. case tidepoolConfig
  11. case pumpConfig
  12. case pumpConfigDirect
  13. case basalProfileEditor
  14. case isfEditor
  15. case crEditor
  16. case targetsEditor
  17. case treatmentView
  18. case manualTempBasal
  19. case history
  20. case cgm
  21. case healthkit
  22. case glucoseNotificationSettings
  23. case mealSettings
  24. case iconConfig
  25. case overrideConfig
  26. case snooze
  27. case statistics
  28. case watch
  29. case userInterfaceSettings
  30. case bolusCalculatorConfig
  31. case quickBolusConfig
  32. case dynamicISF
  33. case calibrations
  34. case shortcutsConfig
  35. case devices
  36. case therapySettings
  37. case algorithmSettings
  38. case featureSettings
  39. case notificationSettings
  40. case liveActivitySettings
  41. case liveActivityBottomRowSettings
  42. case calendarEventSettings
  43. case contactImage
  44. case serviceSettings
  45. case remoteControlConfig
  46. case autosensSettings
  47. case smbSettings
  48. case targetBehavior
  49. case algorithmAdvancedSettings
  50. case unitsAndLimits
  51. case appDiagnostics
  52. case settingsExport
  53. case treatmentsSettings
  54. var id: Int { String(reflecting: self).hashValue }
  55. }
  56. extension Screen {
  57. @ViewBuilder func view(resolver: Resolver) -> some View {
  58. switch self {
  59. case .loading:
  60. ProgressView()
  61. case .home:
  62. Home.RootView(resolver: resolver)
  63. case .settings:
  64. Settings.RootView(resolver: resolver)
  65. case let .configEditor(file):
  66. ConfigEditor.RootView(resolver: resolver, file: file)
  67. case .nighscoutConfig:
  68. NightscoutConfig.RootView(resolver: resolver, displayClose: false)
  69. case .nighscoutConfigDirect:
  70. NightscoutConfig.RootView(resolver: resolver, displayClose: true)
  71. case .tidepoolConfig:
  72. TidepoolStartView(resolver: resolver, state: Settings.StateModel())
  73. case .pumpConfig:
  74. PumpConfig.RootView(
  75. resolver: resolver,
  76. displayClose: false,
  77. bluetoothManager: resolver.resolve(BluetoothStateManager.self)!
  78. )
  79. case .pumpConfigDirect:
  80. PumpConfig.RootView(
  81. resolver: resolver,
  82. displayClose: true,
  83. bluetoothManager: resolver.resolve(BluetoothStateManager.self)!
  84. )
  85. case .basalProfileEditor:
  86. BasalProfileEditor.RootView(resolver: resolver)
  87. case .isfEditor:
  88. ISFEditor.RootView(resolver: resolver)
  89. case .crEditor:
  90. CarbRatioEditor.RootView(resolver: resolver)
  91. case .targetsEditor:
  92. TargetsEditor.RootView(resolver: resolver)
  93. case .treatmentView:
  94. Treatments.RootView(resolver: resolver)
  95. case .manualTempBasal:
  96. ManualTempBasal.RootView(resolver: resolver)
  97. case .history:
  98. History.RootView(resolver: resolver)
  99. case .cgm:
  100. CGMSettings.RootView(
  101. resolver: resolver,
  102. displayClose: false,
  103. bluetoothManager: resolver.resolve(BluetoothStateManager.self)!
  104. )
  105. case .healthkit:
  106. AppleHealthKit.RootView(resolver: resolver)
  107. case .glucoseNotificationSettings:
  108. GlucoseNotificationSettings.RootView(resolver: resolver)
  109. case .mealSettings:
  110. MealSettings.RootView(resolver: resolver)
  111. case .iconConfig:
  112. IconConfig.RootView(resolver: resolver)
  113. case .overrideConfig:
  114. Adjustments.RootView(resolver: resolver)
  115. case .snooze:
  116. Snooze.RootView(resolver: resolver)
  117. case .watch:
  118. WatchConfig.RootView(resolver: resolver)
  119. case .statistics:
  120. Stat.RootView(resolver: resolver)
  121. case .userInterfaceSettings:
  122. UserInterfaceSettings.RootView(resolver: resolver)
  123. case .bolusCalculatorConfig:
  124. BolusCalculatorConfig.RootView(resolver: resolver)
  125. case .quickBolusConfig:
  126. QuickPickBolusesConfig.RootView(resolver: resolver)
  127. case .dynamicISF:
  128. DynamicSettings.RootView(resolver: resolver)
  129. case .calibrations:
  130. Calibrations.RootView(resolver: resolver)
  131. case .shortcutsConfig:
  132. ShortcutsConfig.RootView(resolver: resolver)
  133. case .remoteControlConfig:
  134. RemoteControlConfig.RootView(resolver: resolver)
  135. case .devices:
  136. DevicesView(resolver: resolver, state: Settings.StateModel())
  137. case .therapySettings:
  138. TherapySettingsView(resolver: resolver, state: Settings.StateModel())
  139. case .algorithmSettings:
  140. AlgorithmSettings(resolver: resolver, state: Settings.StateModel())
  141. case .featureSettings:
  142. FeatureSettingsView(resolver: resolver, state: Settings.StateModel())
  143. case .notificationSettings:
  144. NotificationsView(resolver: resolver, state: Settings.StateModel())
  145. case .liveActivitySettings:
  146. LiveActivitySettings.RootView(resolver: resolver)
  147. case .liveActivityBottomRowSettings:
  148. LiveActivityWidgetConfiguration(resolver: resolver, state: LiveActivitySettings.StateModel())
  149. case .calendarEventSettings:
  150. CalendarEventSettings.RootView(resolver: resolver)
  151. case .contactImage:
  152. ContactImage.RootView(resolver: resolver)
  153. case .serviceSettings:
  154. ServicesView(resolver: resolver, state: Settings.StateModel())
  155. case .autosensSettings:
  156. AutosensSettings.RootView(resolver: resolver)
  157. case .smbSettings:
  158. SMBSettings.RootView(resolver: resolver)
  159. case .targetBehavior:
  160. TargetBehavoir.RootView(resolver: resolver)
  161. case .algorithmAdvancedSettings:
  162. AlgorithmAdvancedSettings.RootView(resolver: resolver)
  163. case .unitsAndLimits:
  164. UnitsLimitsSettings.RootView(resolver: resolver)
  165. case .appDiagnostics:
  166. AppDiagnostics.RootView(resolver: resolver)
  167. case .settingsExport:
  168. SettingsExport.RootView(resolver: resolver)
  169. case .treatmentsSettings:
  170. TreatmentsSettingsView(resolver: resolver, state: Settings.StateModel())
  171. }
  172. }
  173. func modal(resolver: Resolver) -> Main.Modal {
  174. .init(screen: self, view: view(resolver: resolver).asAny())
  175. }
  176. }