Router.swift 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import Combine
  2. import SwiftUI
  3. import Swinject
  4. enum MessageType: String {
  5. case info
  6. case warning
  7. case error
  8. case other
  9. }
  10. enum MessageSubtype: String {
  11. case pump
  12. case cgm
  13. case carb
  14. case glucose
  15. case algorithm
  16. case misc
  17. }
  18. struct MessageContent {
  19. var content: String
  20. var type: MessageType = .info
  21. var subtype: MessageSubtype = .misc
  22. var title: String = ""
  23. var useAPN: Bool = true
  24. var trigger: UNNotificationTrigger? = nil
  25. var action: NotificationAction = .none
  26. }
  27. protocol Router {
  28. var mainModalScreen: CurrentValueSubject<Screen?, Never> { get }
  29. var mainSecondaryModalView: CurrentValueSubject<AnyView?, Never> { get }
  30. var alertMessage: PassthroughSubject<MessageContent, Never> { get }
  31. func view(for screen: Screen) -> AnyView
  32. }
  33. final class BaseRouter: Router {
  34. let mainModalScreen = CurrentValueSubject<Screen?, Never>(nil)
  35. let mainSecondaryModalView = CurrentValueSubject<AnyView?, Never>(nil)
  36. let alertMessage = PassthroughSubject<MessageContent, Never>()
  37. private let resolver: Resolver
  38. init(resolver: Resolver) {
  39. self.resolver = resolver
  40. }
  41. func view(for screen: Screen) -> AnyView {
  42. screen.view(resolver: resolver).asAny()
  43. }
  44. }