MainStateModel.swift 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  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 isAlertPresented = false
  8. @Published var alertMessage = ""
  9. override func subscribe() {
  10. router.mainModalScreen
  11. .map { $0?.modal(resolver: self.resolver!) }
  12. .removeDuplicates { $0?.id == $1?.id }
  13. .receive(on: DispatchQueue.main)
  14. .sink { modal in
  15. self.modal = modal
  16. self.isModalPresented = modal != nil
  17. }
  18. .store(in: &lifetime)
  19. $isModalPresented
  20. .filter { !$0 }
  21. .sink { _ in
  22. self.router.mainModalScreen.send(nil)
  23. }
  24. .store(in: &lifetime)
  25. router.alertMessage
  26. .receive(on: DispatchQueue.main)
  27. .sink { message in
  28. self.isAlertPresented = true
  29. self.alertMessage = message
  30. }
  31. .store(in: &lifetime)
  32. }
  33. }
  34. }