Screen.swift 2.0 KB

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