feat: update findHandler method to findAction
This commit is contained in:
parent
270ac1a4d5
commit
a99c29ea73
|
|
@ -25,21 +25,20 @@ import UIKit
|
|||
|
||||
open class BaseNavigationStackDeeplinkHandler: DeeplinkHandler {
|
||||
|
||||
public var rootViewControllerKeeper: UIViewController
|
||||
public var rootViewController: UIViewController
|
||||
|
||||
public init(rootViewControllerKeeper: UIViewController) {
|
||||
self.rootViewControllerKeeper = rootViewControllerKeeper
|
||||
public init(rootViewController: UIViewController) {
|
||||
self.rootViewController = rootViewController
|
||||
}
|
||||
// MARK: - DeeplinkHandler
|
||||
|
||||
open func handle(deeplink: Deeplink) -> Operation? {
|
||||
let handler = findHandler(for: deeplink)
|
||||
return handler?.handle(deeplink: deeplink)
|
||||
findAction(for: deeplink)
|
||||
}
|
||||
|
||||
// MARK: - Open methods
|
||||
|
||||
open func findHandler(for deeplink: Deeplink) -> DeeplinkHandler? {
|
||||
rootViewControllerKeeper.findHandler(for: deeplink)
|
||||
open func findAction(for deeplink: Deeplink) -> Operation? {
|
||||
rootViewController.findAction(for: deeplink)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,35 +23,36 @@
|
|||
import UIKit
|
||||
|
||||
public extension UIViewController {
|
||||
func findHandler(for deeplink: Deeplink) -> DeeplinkHandler? {
|
||||
func findAction(for deeplink: Deeplink) -> Operation? {
|
||||
if let deeplinksHandler = self as? DeeplinkHandler,
|
||||
let _ = deeplinksHandler.handle(deeplink: deeplink) {
|
||||
return deeplinksHandler
|
||||
let operation = deeplinksHandler.handle(deeplink: deeplink) {
|
||||
return operation
|
||||
}
|
||||
|
||||
if let deeplinksHandler: DeeplinkHandler = presentedViewController?.findHandler(for: deeplink) {
|
||||
return deeplinksHandler
|
||||
if let operation = presentedViewController?.findAction(for: deeplink) {
|
||||
return operation
|
||||
}
|
||||
|
||||
return findHandlerInViewHierarchy(for: deeplink)
|
||||
return findActionInViewHierarchy(for: deeplink)
|
||||
}
|
||||
|
||||
private func findHandlerInViewHierarchy(for deeplink: Deeplink) -> DeeplinkHandler? {
|
||||
private func findActionInViewHierarchy(for deeplink: Deeplink) -> Operation? {
|
||||
switch self {
|
||||
case let navController as UINavigationController:
|
||||
let deeplinksHandler = navController.viewControllers.reversed().findHandler(for: deeplink)
|
||||
return deeplinksHandler
|
||||
let operation = navController.viewControllers.reversed().findAction(for: deeplink)
|
||||
return operation
|
||||
|
||||
case let tabController as UITabBarController:
|
||||
if let deeplinksHandler = tabController.selectedViewController?.findHandler(for: deeplink) {
|
||||
return deeplinksHandler
|
||||
if let operation = tabController.selectedViewController?.findAction(for: deeplink) {
|
||||
return operation
|
||||
|
||||
} else if var tabControllers = tabController.viewControllers {
|
||||
if tabController.selectedIndex != NSNotFound {
|
||||
tabControllers.remove(at: tabController.selectedIndex)
|
||||
}
|
||||
|
||||
if let deeplinksHandler = tabControllers.findHandler(for: deeplink) {
|
||||
return deeplinksHandler
|
||||
if let operation = tabControllers.findAction(for: deeplink) {
|
||||
return operation
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -64,10 +65,11 @@ public extension UIViewController {
|
|||
}
|
||||
|
||||
private extension Sequence where Element: UIViewController {
|
||||
func findHandler(for deeplink: Deeplink) -> DeeplinkHandler? {
|
||||
|
||||
func findAction(for deeplink: Deeplink) -> Operation? {
|
||||
for controller in self {
|
||||
if let deeplinksHandler = controller.findHandler(for: deeplink) {
|
||||
return deeplinksHandler
|
||||
if let operation = controller.findAction(for: deeplink) {
|
||||
return operation
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
|
|||
Loading…
Reference in New Issue