Screen.swift 2.3 KB

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