Screen.swift 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import SwiftUI
  2. import Swinject
  3. enum Screen: Identifiable {
  4. case home
  5. case settings
  6. case onboarding
  7. case authorizedRoot
  8. case login
  9. case requestPermissions
  10. case configEditor(file: String)
  11. case nighscoutConfig
  12. case pumpConfig
  13. case pumpSettingsEditor
  14. case basalProfileEditor
  15. case isfEditor
  16. case crEditor
  17. case targetsEditor
  18. case preferencesEditor
  19. var id: Int { String(reflecting: self).hashValue }
  20. }
  21. extension Screen {
  22. func view(resolver: Resolver) -> AnyView {
  23. switch self {
  24. case .home:
  25. return Home.Builder(resolver: resolver).buildView()
  26. case .settings:
  27. return Settings.Builder(resolver: resolver).buildView()
  28. case .onboarding:
  29. return Onboarding.Builder(resolver: resolver).buildView()
  30. case .authorizedRoot:
  31. return AuthotizedRoot.Builder(resolver: resolver).buildView()
  32. case .login:
  33. return Login.Builder(resolver: resolver).buildView()
  34. case .requestPermissions:
  35. return RequestPermissions.Builder(resolver: resolver).buildView()
  36. case let .configEditor(file):
  37. return ConfigEditor.Builder(resolver: resolver, file: file).buildView()
  38. case .nighscoutConfig:
  39. return NightscoutConfig.Builder(resolver: resolver).buildView()
  40. case .pumpConfig:
  41. return PumpConfig.Builder(resolver: resolver).buildView()
  42. case .pumpSettingsEditor:
  43. return PumpSettingsEditor.Builder(resolver: resolver).buildView()
  44. case .basalProfileEditor:
  45. return BasalProfileEditor.Builder(resolver: resolver).buildView()
  46. case .isfEditor:
  47. return ISFEditor.Builder(resolver: resolver).buildView()
  48. case .crEditor:
  49. return CREditor.Builder(resolver: resolver).buildView()
  50. case .targetsEditor:
  51. return TargetsEditor.Builder(resolver: resolver).buildView()
  52. case .preferencesEditor:
  53. return PreferencesEditor.Builder(resolver: resolver).buildView()
  54. }
  55. }
  56. func tab(resolver: Resolver) -> AuthotizedRoot.Tab {
  57. let tabView = view(resolver: resolver)
  58. switch self {
  59. case .home:
  60. return .init(
  61. rootScreen: self,
  62. view: tabView,
  63. image: Image(systemName: "house"),
  64. text: Text("Home")
  65. )
  66. case .settings:
  67. return .init(
  68. rootScreen: self,
  69. view: tabView,
  70. image: Image(systemName: "gear"),
  71. text: Text("Settings")
  72. )
  73. default:
  74. fatalError("Tab for this screen \(self) did not specified")
  75. }
  76. }
  77. func modal(resolver: Resolver) -> Main.Modal {
  78. .init(screen: self, view: view(resolver: resolver))
  79. }
  80. }