Screen.swift 5.7 KB

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