From 09cd4342375f208ddbd46e62d5f8ba84642e87a1 Mon Sep 17 00:00:00 2001 From: Javier Cicchelli Date: Thu, 21 Mar 2024 17:38:01 +0100 Subject: [PATCH] Implemented the NavigationRouter router in the Coordination library. --- .../Sources/Routers/NavigationRouter.swift | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Libraries/Coordination/Kit/Sources/Routers/NavigationRouter.swift diff --git a/Libraries/Coordination/Kit/Sources/Routers/NavigationRouter.swift b/Libraries/Coordination/Kit/Sources/Routers/NavigationRouter.swift new file mode 100644 index 0000000..ebccc00 --- /dev/null +++ b/Libraries/Coordination/Kit/Sources/Routers/NavigationRouter.swift @@ -0,0 +1,55 @@ +// +// NavigationRouter.swift +// ReviewsCoordinationKit +// +// Created by Javier Cicchelli on 21/03/2024. +// Copyright © 2024 Röck+Cöde. All rights reserved. +// + +import UIKit + +public class NavigationRouter: NSObject { + + // MARK: Properties + var navigationController: UINavigationController + var onDismissForViewController: [UIViewController: Router.OnDismissClosure] = [:] + + // MARK: Initialisers + init(navigationController: UINavigationController) { + self.navigationController = navigationController + + super.init() + + self.navigationController.delegate = self + } + + // MARK: Functions + func performOnDismiss(for viewController: UIViewController) { + guard let onDismiss = onDismissForViewController[viewController] else { + return + } + + onDismiss() + + onDismissForViewController[viewController] = nil + } + +} + +// MARK: - UINavigationControllerDelegate +extension NavigationRouter: UINavigationControllerDelegate { + + // MARK: Functions + public func navigationController( + _ navigationController: UINavigationController, + didShow viewController: UIViewController, + animated: Bool + ) { + guard let viewControllerToDismiss = navigationController.transitionCoordinator?.viewController(forKey: .from) else { + return + } + + performOnDismiss(for: viewControllerToDismiss) + } + +}