diff --git a/core/decompose/src/main/kotlin/com/tangem/core/decompose/navigation/DefaultRouter.kt b/core/decompose/src/main/kotlin/com/tangem/core/decompose/navigation/DefaultRouter.kt index 86c43706a6..2834f7ab66 100644 --- a/core/decompose/src/main/kotlin/com/tangem/core/decompose/navigation/DefaultRouter.kt +++ b/core/decompose/src/main/kotlin/com/tangem/core/decompose/navigation/DefaultRouter.kt @@ -3,7 +3,6 @@ package com.tangem.core.decompose.navigation import com.arkivanov.decompose.ExperimentalDecomposeApi import com.arkivanov.decompose.router.stack.StackNavigation import com.arkivanov.decompose.router.stack.pop -import com.arkivanov.decompose.router.stack.popWhile import com.arkivanov.decompose.router.stack.pushNew import com.arkivanov.essenty.instancekeeper.InstanceKeeper import kotlin.reflect.KClass @@ -34,16 +33,27 @@ internal class DefaultRouter( } override fun popTo(route: Route, onComplete: (isSuccess: Boolean) -> Unit) { - navigation.popWhile( - predicate = { it != route }, + popTo( + predicate = { it == route }, onComplete = onComplete, ) } override fun popTo(routeClass: KClass, onComplete: (isSuccess: Boolean) -> Unit) { - navigation.popWhile( - predicate = { it::class != routeClass }, + popTo( + predicate = { routeClass.isInstance(it) }, onComplete = onComplete, ) } + + private fun popTo(predicate: (Route) -> Boolean, onComplete: (isSuccess: Boolean) -> Unit) { + navigation.navigate( + transformer = { stack -> + stack + .dropLastWhile(predicate) + .ifEmpty { stack } + }, + onComplete = { newStack, oldStack -> onComplete(newStack.size < oldStack.size) }, + ) + } } \ No newline at end of file