104 lines
2.5 KiB
Swift
Raw Permalink Normal View History

//
// SheetRouter.swift
// ReviewsCoordinationKit
//
// Created by Javier Cicchelli on 21/03/2024.
// Copyright © 2024 Röck+Cöde. All rights reserved.
//
import ReviewsUIKit
import UIKit
public class SheetRouter: BaseNavigationRouter {
// MARK: Properties
public unowned let parentViewController: UIViewController
// MARK: Initialisers
public init(parentViewController: UIViewController) {
self.parentViewController = parentViewController
super.init(navigationController: .init())
}
}
// MARK: - Router
extension SheetRouter: Router {
// MARK: Functions
public func present(
_ viewController: UIViewController,
animated: Bool,
onDismiss: Router.OnDismissClosure?
) {
onDismissForViewController[viewController] = onDismiss
if navigationController.viewControllers.isEmpty {
presentModally(
viewController,
animated: animated
)
} else {
navigationController.pushViewController(
viewController,
animated: animated
)
}
}
public func dismiss(animated: Bool) {
guard let firstViewController = navigationController.viewControllers.first else {
return
}
performOnDismiss(for: firstViewController)
parentViewController.dismiss(animated: animated)
}
}
// MARK: - Helpers
private extension SheetRouter {
// MARK: Actions
@objc func onCancelPressed() {
guard let firstViewController = navigationController.viewControllers.first else {
return
}
dismiss(animated: true)
performOnDismiss(for: firstViewController)
}
// MARK: Functions
func presentModally(
_ viewController: UIViewController,
animated: Bool
) {
viewController.navigationItem.rightBarButtonItem = UIBarButtonItem(
image: .Icon.close,
style: .plain,
target: self,
action: #selector(onCancelPressed)
)
if #available(iOS 15.0, *) {
navigationController.sheetPresentationController?.detents = [.medium(), .large()]
}
navigationController.setViewControllers(
[viewController],
animated: false
)
parentViewController.present(
navigationController,
animated: animated
)
}
}