Allow dismissal of pushed coordinator

This commit is contained in:
ismailgulek 2021-11-19 14:35:46 +03:00
parent 5238165e63
commit ec666f25a7
No known key found for this signature in database
GPG key ID: E96336D42D9470A9

View file

@ -72,6 +72,12 @@ final class RoomCoordinatorBridgePresenter: NSObject {
private let bridgeParameters: RoomCoordinatorBridgePresenterParameters
private var coordinator: RoomCoordinator?
private var navigationType: NavigationType = .present
private enum NavigationType {
case present
case push
}
// MARK: Public
@ -95,6 +101,7 @@ final class RoomCoordinatorBridgePresenter: NSObject {
coordinator.start()
self.coordinator = coordinator
self.navigationType = .present
}
func push(from navigationController: UINavigationController, animated: Bool) {
@ -106,13 +113,25 @@ final class RoomCoordinatorBridgePresenter: NSObject {
coordinator.start() // Will trigger view controller push
self.coordinator = coordinator
self.navigationType = .push
}
func dismiss(animated: Bool, completion: (() -> Void)?) {
guard let coordinator = self.coordinator else {
return
}
coordinator.toPresentable().dismiss(animated: animated) {
switch navigationType {
case .present:
coordinator.toPresentable().dismiss(animated: animated) {
self.coordinator = nil
completion?()
}
case .push:
guard let navigationController = coordinator.toPresentable() as? UINavigationController else {
return
}
navigationController.popViewController(animated: animated)
self.coordinator = nil
completion?()