Screen.swift 2.2 KB

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