Updated on 2026-08-14

This commit is contained in:
Tangem 2025-11-17 20:35:29 +05:00
parent b8fc2d4f76
commit 283e760a4b
15 changed files with 68 additions and 6 deletions

View file

@ -1,9 +1,9 @@
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.pushNew
import com.arkivanov.decompose.router.stack.replaceCurrent
import com.arkivanov.essenty.instancekeeper.InstanceKeeper
import kotlin.reflect.KClass
@ -14,11 +14,14 @@ internal class DefaultRouter(
private val navigation: StackNavigation<Route>
get() = navigationProvider.getOrCreate()
@OptIn(ExperimentalDecomposeApi::class)
override fun push(route: Route, onComplete: (isSuccess: Boolean) -> Unit) {
navigation.pushNew(route, onComplete)
}
override fun replaceCurrent(route: Route, onComplete: (Boolean) -> Unit) {
navigation.replaceCurrent(route, { onComplete(true) })
}
override fun replaceAll(vararg routes: Route, onComplete: (isSuccess: Boolean) -> Unit) {
val newRoutes = routes.toList()

View file

@ -8,6 +8,10 @@ class DummyRouter : Router {
onComplete(true)
}
override fun replaceCurrent(route: Route, onComplete: (Boolean) -> Unit) {
onComplete(true)
}
override fun replaceAll(vararg routes: Route, onComplete: (isSuccess: Boolean) -> Unit) {
onComplete(true)
}

View file

@ -16,6 +16,14 @@ interface Router {
*/
fun push(route: Route, onComplete: (isSuccess: Boolean) -> Unit = {})
/**
* Replaces a current route with a new one.
*
* @param route The route to replace a current one.
* @param onComplete The callback to be invoked when the operation is complete.
*/
fun replaceCurrent(route: Route, onComplete: (isSuccess: Boolean) -> Unit = {})
/**
* Replaces ***all*** routes in the navigation stack with the specified [routes].
*

View file

@ -18,6 +18,10 @@ inline fun AppComponentContext.InnerPopRouter(
router.push(route, onComplete)
}
override fun replaceCurrent(route: Route, onComplete: (Boolean) -> Unit) {
router.replaceCurrent(route, onComplete)
}
override fun replaceAll(vararg routes: Route, onComplete: (Boolean) -> Unit) {
router.replaceAll(*routes, onComplete = onComplete)
}

View file

@ -3,6 +3,7 @@ package com.tangem.core.decompose.navigation.inner
import com.arkivanov.decompose.router.stack.StackNavigation
import com.arkivanov.decompose.router.stack.pop
import com.arkivanov.decompose.router.stack.pushNew
import com.arkivanov.decompose.router.stack.replaceCurrent
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.navigation.Route
import com.tangem.core.decompose.navigation.Router
@ -32,6 +33,14 @@ inline fun <reified T : Route> AppComponentContext.InnerRouter(
}
}
override fun replaceCurrent(route: Route, onComplete: (Boolean) -> Unit) {
if (route is T) {
stackNavigation.replaceCurrent(route, { onComplete(true) })
} else {
fallBackRouter.replaceCurrent(route, onComplete)
}
}
override fun replaceAll(vararg routes: Route, onComplete: (Boolean) -> Unit) {
if (routes.any { it is T }) {
val newRoutes = routes.toList().filterIsInstance<T>()