MainStateModel.swift 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import Combine
  2. import LoopKitUI
  3. import SwiftUI
  4. import Swinject
  5. extension Main {
  6. final class StateModel: BaseStateModel<Provider> {
  7. @Injected() private var apsManager: APSManager!
  8. @Injected() var alertPermissionsChecker: AlertPermissionsChecker!
  9. @Injected() var broadcaster: Broadcaster!
  10. @Published var modal: Modal?
  11. @Published var secondaryModal: SecondaryModalWrapper?
  12. override func subscribe() {
  13. router.mainModalScreen
  14. .map { $0?.modal(resolver: self.resolver!) }
  15. .removeDuplicates { $0?.id == $1?.id }
  16. .receive(on: DispatchQueue.main)
  17. .assign(to: &$modal)
  18. $modal
  19. .removeDuplicates { $0?.id == $1?.id }
  20. .filter { $0 == nil }
  21. .sink { _ in
  22. self.router.mainModalScreen.send(nil)
  23. }
  24. .store(in: &lifetime)
  25. router.mainSecondaryModalView
  26. .receive(on: DispatchQueue.main)
  27. .sink { view in
  28. self.secondaryModal = view.map { SecondaryModalWrapper(view: $0) }
  29. }
  30. .store(in: &lifetime)
  31. $secondaryModal
  32. .removeDuplicates { $0?.id == $1?.id }
  33. .filter { $0 == nil }
  34. .sink { _ in
  35. self.router.mainSecondaryModalView.send(nil)
  36. }
  37. .store(in: &lifetime)
  38. }
  39. }
  40. }