Screen.swift 2.9 KB

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