Router.swift 941 B

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