Screen.swift 1.8 KB

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