MainStateModel.swift 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import SwiftUI
  2. import Swinject
  3. extension Main {
  4. final class StateModel: BaseStateModel<Provider> {
  5. private(set) var modal: Modal?
  6. @Published var isModalPresented = false
  7. @Published var isSecondaryModalPresented = false
  8. @Published var isAlertPresented = false
  9. @Published var alertMessage = ""
  10. @Published var secondaryModalView: AnyView? = nil
  11. override func subscribe() {
  12. router.mainModalScreen
  13. .map { $0?.modal(resolver: self.resolver!) }
  14. .removeDuplicates { $0?.id == $1?.id }
  15. .receive(on: DispatchQueue.main)
  16. .sink { modal in
  17. self.modal = modal
  18. self.isModalPresented = modal != nil
  19. }
  20. .store(in: &lifetime)
  21. $isModalPresented
  22. .filter { !$0 }
  23. .sink { _ in
  24. self.router.mainModalScreen.send(nil)
  25. }
  26. .store(in: &lifetime)
  27. router.alertMessage
  28. .receive(on: DispatchQueue.main)
  29. .sink { message in
  30. self.isAlertPresented = true
  31. self.alertMessage = message
  32. }
  33. .store(in: &lifetime)
  34. router.mainSecondaryModalView
  35. .receive(on: DispatchQueue.main)
  36. .sink { view in
  37. self.secondaryModalView = view
  38. self.isSecondaryModalPresented = view != nil
  39. }
  40. .store(in: &lifetime)
  41. $isSecondaryModalPresented
  42. .removeDuplicates()
  43. .filter { !$0 }
  44. .sink { _ in
  45. self.router.mainSecondaryModalView.send(nil)
  46. }
  47. .store(in: &lifetime)
  48. }
  49. }
  50. }