Screen.swift 2.1 KB

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