Screen.swift 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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
  11. case nighscoutConfig
  12. var id: Int { String(reflecting: self).hashValue }
  13. }
  14. extension Screen {
  15. func view(resolver: Resolver) -> AnyView {
  16. switch self {
  17. case .home:
  18. return Home.Builder(resolver: resolver).buildView()
  19. case .settings:
  20. return Settings.Builder(resolver: resolver).buildView()
  21. case .onboarding:
  22. return Onboarding.Builder(resolver: resolver).buildView()
  23. case .authorizedRoot:
  24. return AuthotizedRoot.Builder(resolver: resolver).buildView()
  25. case .login:
  26. return Login.Builder(resolver: resolver).buildView()
  27. case .requestPermissions:
  28. return RequestPermissions.Builder(resolver: resolver).buildView()
  29. case .configEditor:
  30. return ConfigEditor.Builder(resolver: resolver).buildView()
  31. case .nighscoutConfig:
  32. return NightscoutConfig.Builder(resolver: resolver).buildView()
  33. }
  34. }
  35. func tab(resolver: Resolver) -> AuthotizedRoot.Tab {
  36. let tabView = view(resolver: resolver)
  37. switch self {
  38. case .home:
  39. return .init(
  40. rootScreen: self,
  41. view: tabView,
  42. image: Image(systemName: "house"),
  43. text: Text("Home")
  44. )
  45. case .settings:
  46. return .init(
  47. rootScreen: self,
  48. view: tabView,
  49. image: Image(systemName: "gear"),
  50. text: Text("Settings")
  51. )
  52. case .authorizedRoot,
  53. .configEditor,
  54. .login,
  55. .nighscoutConfig,
  56. .onboarding,
  57. .requestPermissions:
  58. fatalError("Tab for this screen \(self) did not specified")
  59. }
  60. }
  61. func modal(resolver: Resolver) -> Main.Modal {
  62. .init(screen: self, view: view(resolver: resolver))
  63. }
  64. }