MainViewModel.swift 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import Combine
  2. import SwiftUI
  3. import Swinject
  4. extension Main {
  5. class ViewModel<Provider>: BaseViewModel<Provider>, ObservableObject where Provider: MainProvider {
  6. @Published private(set) var isAuthotized = false
  7. private(set) var modal: Modal?
  8. @Published var isModalPresented = false
  9. @Published var isAlertPresented = false
  10. @Published var alertMessage = ""
  11. override func subscribe() {
  12. router.mainModalScreen
  13. .map { $0?.modal(resolver: self.resolver) }
  14. .removeDuplicates { $0?.id == $1?.id }
  15. .receive(on: RunLoop.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. }
  35. }
  36. }