Router.swift 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import Combine
  2. import SwiftUI
  3. import Swinject
  4. enum MessageType {
  5. case info
  6. case warning
  7. case errorPump
  8. case pumpConfig
  9. case alertPermissionWarning
  10. case other
  11. }
  12. struct MessageContent {
  13. var content: String
  14. var type: MessageType = .info
  15. var title: String = ""
  16. var useAPN: Bool = true
  17. }
  18. protocol Router {
  19. var mainModalScreen: CurrentValueSubject<Screen?, Never> { get }
  20. var mainSecondaryModalView: CurrentValueSubject<AnyView?, Never> { get }
  21. var alertMessage: PassthroughSubject<MessageContent, Never> { get }
  22. func view(for screen: Screen) -> AnyView
  23. }
  24. final class BaseRouter: Router {
  25. let mainModalScreen = CurrentValueSubject<Screen?, Never>(nil)
  26. let mainSecondaryModalView = CurrentValueSubject<AnyView?, Never>(nil)
  27. let alertMessage = PassthroughSubject<MessageContent, Never>()
  28. private let resolver: Resolver
  29. init(resolver: Resolver) {
  30. self.resolver = resolver
  31. }
  32. func view(for screen: Screen) -> AnyView {
  33. screen.view(resolver: resolver).asAny()
  34. }
  35. }