Router.swift 961 B

123456789101112131415161718192021222324252627282930313233343536373839
  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. }
  10. struct MessageContent {
  11. var content: String
  12. var type: MessageType = .info
  13. }
  14. protocol Router {
  15. var mainModalScreen: CurrentValueSubject<Screen?, Never> { get }
  16. var mainSecondaryModalView: CurrentValueSubject<AnyView?, Never> { get }
  17. var alertMessage: PassthroughSubject<MessageContent, Never> { get }
  18. func view(for screen: Screen) -> AnyView
  19. }
  20. final class BaseRouter: Router {
  21. let mainModalScreen = CurrentValueSubject<Screen?, Never>(nil)
  22. let mainSecondaryModalView = CurrentValueSubject<AnyView?, Never>(nil)
  23. let alertMessage = PassthroughSubject<MessageContent, Never>()
  24. private let resolver: Resolver
  25. init(resolver: Resolver) {
  26. self.resolver = resolver
  27. }
  28. func view(for screen: Screen) -> AnyView {
  29. screen.view(resolver: resolver).asAny()
  30. }
  31. }