Skip to content

Commit fe8c078

Browse files
97chosinteractord
authored andcommitted
fix: TabLinkNavigator - Modified 'backOrNext' Method
1 parent 2e0314f commit fe8c078

3 files changed

Lines changed: 20 additions & 16 deletions

File tree

Sources/LinkNavigator/Builder/TabNavigationBuilder.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,10 @@ extension TabNavigationBuilder {
6363
}
6464

6565
public func lastPick(controller: UINavigationController?, item: LinkItem) -> RouteViewController? {
66-
guard let controller, let first = item.pathList.first else { return .none }
66+
guard let controller, let last = item.pathList.last else { return .none }
6767
return controller.viewControllers
6868
.compactMap { $0 as? RouteViewController }
69-
.last(where: { $0.matchPath == first })
69+
.last(where: { $0.matchPath == last })
7070
}
7171

7272
public func exceptFilter(
@@ -78,4 +78,10 @@ extension TabNavigationBuilder {
7878
.filter { !item.pathList.contains($0.matchPath) }
7979
}
8080

81+
public func isContainSequence(item: LinkItem) -> Bool {
82+
let currentPathJoin = routeBuilderList.map { $0.matchPath }.joined(separator: ",")
83+
let itemPathJoin = item.pathList.joined(separator: ",")
84+
85+
return currentPathJoin.contains(itemPathJoin)
86+
}
8187
}

Sources/LinkNavigator/Core/Core/TabLinkNavigator/TabLinkNavigator.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,6 @@ extension TabLinkNavigator {
158158
NotificationCenter.default
159159
.post(name: TabbarEventNotification.onSelectedTab, object: targetPath)
160160
}
161-
162-
public func reload(items _: LinkItem, isAnimated _: Bool) { }
163161
}
164162

165163
extension UINavigationController {

Sources/LinkNavigator/Core/Core/TabLinkNavigator/TabPartialNavigator.swift

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -100,24 +100,24 @@ extension TabPartialNavigator: TabLinkNavigatorProtocol {
100100
}
101101

102102
public func backOrNext(linkItem: LinkItem, isAnimated: Bool) {
103-
guard
104-
let pick = navigationBuilder.firstPick(
105-
controller: currentController,
106-
item: linkItem)
107-
else { return }
108-
103+
guard navigationBuilder.isContainSequence(item: linkItem),
104+
let pick = navigationBuilder.lastPick(
105+
controller: currentController,
106+
item: linkItem) else {
107+
currentController?.merge(new: navigationBuilder.build(item: linkItem), isAnimated: isAnimated)
108+
return
109+
}
109110
currentController?.popToViewController(pick, animated: isAnimated)
110111
}
111112

112113
public func rootBackOrNext(linkItem: LinkItem, isAnimated: Bool) {
113-
guard
114-
let pick = navigationBuilder.firstPick(
115-
controller: currentController,
116-
item: linkItem)
117-
else {
114+
guard navigationBuilder.isContainSequence(item: linkItem),
115+
let pick = navigationBuilder.lastPick(
116+
controller: rootController,
117+
item: linkItem) else {
118+
rootController.merge(new: navigationBuilder.build(item: linkItem), isAnimated: isAnimated)
118119
return
119120
}
120-
121121
rootController.popToViewController(pick, animated: isAnimated)
122122
}
123123

0 commit comments

Comments
 (0)