Skip to content

Commit

Permalink
Merge branch 'main' into Release/1.9.6
Browse files Browse the repository at this point in the history
  • Loading branch information
BarabanovVVl authored Feb 17, 2025
2 parents 13e0890 + fef9f65 commit a6c3301
Showing 1 changed file with 27 additions and 20 deletions.
47 changes: 27 additions & 20 deletions Sources/Deeplink/DeeplinkManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import UIKit
import UserNotifications
#endif

// swiftlint:disable type_body_length

/// The `DeeplinkManager` keeps track of the opening of ``Deeplink``.
///
/// The manager is the entry point when working with ``Deeplink``.
Expand Down Expand Up @@ -51,7 +53,7 @@ public final class DeeplinkManager: DeeplinkHandler {
didSet { navigateIfPossible() }
}

private var pendingDeeplink: DeeplinkStorage? {
private var pendingDeeplink: [DeeplinkScope: DeeplinkStorage] = [:] {
didSet { navigateIfPossible() }
}

Expand Down Expand Up @@ -119,39 +121,43 @@ public final class DeeplinkManager: DeeplinkHandler {
return
}

guard let deeplink = pendingDeeplink else {
guard !pendingDeeplink.isEmpty else {
return
}

guard let screens = screens[deeplink.scope] else {
return
}
for (scope, deeplink) in pendingDeeplink {
guard let screens = screens[scope] else {
continue
}

navigator.logInfo("Performing navigation for deeplink: \(deeplink.value)")
navigator.logInfo("Performing navigation for deeplink: \(deeplink.value)")

pendingDeeplink = nil
pendingDeeplink.removeValue(forKey: scope)

performInterceptors(for: deeplink) { result in
do {
try result.get()
performInterceptors(for: deeplink) { result in
do {
try result.get()

try deeplink.value.navigateIfPossible(
screens: screens,
navigator: self.navigator,
handler: self
)
} catch {
self.navigator.logError(error)
try deeplink.value.navigateIfPossible(
screens: screens,
navigator: self.navigator,
handler: self
)
} catch {
self.navigator.logError(error)
}
}
}
}

private func handleDeeplinkIfPossible(_ deeplink: DeeplinkStorage?) -> Bool {
if let deeplink {
pendingDeeplink = deeplink
guard let deeplink else {
return false
}

return deeplink != nil
pendingDeeplink[deeplink.scope] = deeplink

return true
}

private func resolveDeeplinkResult(
Expand Down Expand Up @@ -640,3 +646,4 @@ public final class DeeplinkManager: DeeplinkHandler {
}
}
#endif
// swiftlint:enable type_body_length

0 comments on commit a6c3301

Please sign in to comment.