From ec666f25a76c28c7c4fc960e432c9ff4326e17f3 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Fri, 19 Nov 2021 14:35:46 +0300 Subject: [PATCH] Allow dismissal of pushed coordinator --- .../Room/RoomCoordinatorBridgePresenter.swift | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/Riot/Modules/Room/RoomCoordinatorBridgePresenter.swift b/Riot/Modules/Room/RoomCoordinatorBridgePresenter.swift index 6a82e835f..b741d704e 100644 --- a/Riot/Modules/Room/RoomCoordinatorBridgePresenter.swift +++ b/Riot/Modules/Room/RoomCoordinatorBridgePresenter.swift @@ -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?()