From 01c263e4e18df17e7d4f90f2d5c6d269df24c4f8 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 14 Jun 2024 11:22:01 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../decompose/navigation/DefaultRouter.kt | 20 +++++++------- .../core/decompose/navigation/DummyRouter.kt | 8 +++--- .../core/decompose/navigation/Router.kt | 17 ++++++------ .../tangem/features/details/DetailsRouter.kt | 2 +- .../preview/PreviewDetailsComponent.kt | 5 ++-- .../component/preview/PreviewRouter.kt | 27 ------------------- 6 files changed, 28 insertions(+), 51 deletions(-) delete mode 100644 features/details/impl/src/main/kotlin/com/tangem/features/details/component/preview/PreviewRouter.kt 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 78e7d91727..86c43706a6 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 @@ -20,13 +20,22 @@ internal class DefaultRouter( navigation.pushNew(route, onComplete) } + override fun replaceAll(vararg routes: Route, onComplete: (isSuccess: Boolean) -> Unit) { + val newRoutes = routes.toList() + + navigation.navigate( + transformer = { newRoutes }, + onComplete = { newStack, _ -> onComplete(newStack.size == newRoutes.size) }, + ) + } + override fun pop(onComplete: (isSuccess: Boolean) -> Unit) { navigation.pop(onComplete) } - override fun popTo(routeClass: KClass, onComplete: (isSuccess: Boolean) -> Unit) { + override fun popTo(route: Route, onComplete: (isSuccess: Boolean) -> Unit) { navigation.popWhile( - predicate = { it::class != routeClass }, + predicate = { it != route }, onComplete = onComplete, ) } @@ -37,11 +46,4 @@ internal class DefaultRouter( onComplete = onComplete, ) } - - override fun clear(onComplete: (isSuccess: Boolean) -> Unit) { - navigation.popWhile( - predicate = { true }, - onComplete = onComplete, - ) - } } \ No newline at end of file diff --git a/core/decompose/src/main/kotlin/com/tangem/core/decompose/navigation/DummyRouter.kt b/core/decompose/src/main/kotlin/com/tangem/core/decompose/navigation/DummyRouter.kt index a6352229b0..77e7a8f59d 100644 --- a/core/decompose/src/main/kotlin/com/tangem/core/decompose/navigation/DummyRouter.kt +++ b/core/decompose/src/main/kotlin/com/tangem/core/decompose/navigation/DummyRouter.kt @@ -8,6 +8,10 @@ class DummyRouter : Router { onComplete(true) } + override fun replaceAll(vararg routes: Route, onComplete: (isSuccess: Boolean) -> Unit) { + onComplete(true) + } + override fun pop(onComplete: (isSuccess: Boolean) -> Unit) { onComplete(true) } @@ -19,8 +23,4 @@ class DummyRouter : Router { override fun popTo(routeClass: KClass, onComplete: (isSuccess: Boolean) -> Unit) { onComplete(true) } - - override fun clear(onComplete: (isSuccess: Boolean) -> Unit) { - onComplete(true) - } } \ No newline at end of file diff --git a/core/decompose/src/main/kotlin/com/tangem/core/decompose/navigation/Router.kt b/core/decompose/src/main/kotlin/com/tangem/core/decompose/navigation/Router.kt index f2ad82f9ea..da7f859b8f 100644 --- a/core/decompose/src/main/kotlin/com/tangem/core/decompose/navigation/Router.kt +++ b/core/decompose/src/main/kotlin/com/tangem/core/decompose/navigation/Router.kt @@ -4,7 +4,7 @@ import kotlin.reflect.KClass /** * Interface for a router in the application. - * It provides methods for navigating through the application. + * It provides methods for navigating through the application by stack. */ interface Router { @@ -16,6 +16,14 @@ interface Router { */ fun push(route: Route, onComplete: (isSuccess: Boolean) -> Unit = {}) + /** + * Replaces ***all*** routes in the navigation stack with the specified [routes]. + * + * @param routes The routes to replace the current stack with. + * @param onComplete The callback to be invoked when the operation is complete. + */ + fun replaceAll(vararg routes: Route, onComplete: (isSuccess: Boolean) -> Unit = {}) + /** * Pops the top route from the navigation stack. * @@ -38,11 +46,4 @@ interface Router { * @param onComplete The callback to be invoked when the operation is complete. */ fun popTo(routeClass: KClass, onComplete: (isSuccess: Boolean) -> Unit = {}) - - /** - * Pops all routes from the navigation stack. - * - * @param onComplete The callback to be invoked when the operation is complete. - */ - fun clear(onComplete: (isSuccess: Boolean) -> Unit = {}) } \ No newline at end of file diff --git a/features/details/impl/src/main/kotlin/com/tangem/features/details/DetailsRouter.kt b/features/details/impl/src/main/kotlin/com/tangem/features/details/DetailsRouter.kt index a7cb49988e..93e60c90ef 100644 --- a/features/details/impl/src/main/kotlin/com/tangem/features/details/DetailsRouter.kt +++ b/features/details/impl/src/main/kotlin/com/tangem/features/details/DetailsRouter.kt @@ -55,7 +55,7 @@ internal class DetailsRouter @Inject constructor( TODO("This class will be removed in future") } - override fun clear(onComplete: (isSuccess: Boolean) -> Unit) { + override fun replaceAll(vararg routes: Route, onComplete: (isSuccess: Boolean) -> Unit) { TODO("This class will be removed in future") } } \ No newline at end of file diff --git a/features/details/impl/src/main/kotlin/com/tangem/features/details/component/preview/PreviewDetailsComponent.kt b/features/details/impl/src/main/kotlin/com/tangem/features/details/component/preview/PreviewDetailsComponent.kt index 3981734a85..d91ffd5ce1 100644 --- a/features/details/impl/src/main/kotlin/com/tangem/features/details/component/preview/PreviewDetailsComponent.kt +++ b/features/details/impl/src/main/kotlin/com/tangem/features/details/component/preview/PreviewDetailsComponent.kt @@ -3,6 +3,7 @@ package com.tangem.features.details.component.preview import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import com.tangem.core.decompose.navigation.DummyRouter import com.tangem.features.details.component.DetailsComponent import com.tangem.features.details.entity.DetailsFooterUM import com.tangem.features.details.entity.DetailsUM @@ -17,12 +18,12 @@ internal class PreviewDetailsComponent : DetailsComponent { private val previewBlocks = runBlocking { ItemsBuilder( - router = PreviewRouter(), + router = DummyRouter(), ).buldAll(isWalletConnectAvailable = true) } private val previewFooter = DetailsFooterUM( - socials = SocialsBuilder(PreviewRouter()).buildAll(), + socials = SocialsBuilder(DummyRouter()).buildAll(), appVersion = "1.0.0-preview", ) diff --git a/features/details/impl/src/main/kotlin/com/tangem/features/details/component/preview/PreviewRouter.kt b/features/details/impl/src/main/kotlin/com/tangem/features/details/component/preview/PreviewRouter.kt deleted file mode 100644 index adfd6a5f4e..0000000000 --- a/features/details/impl/src/main/kotlin/com/tangem/features/details/component/preview/PreviewRouter.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.tangem.features.details.component.preview - -import com.tangem.core.decompose.navigation.Route -import com.tangem.core.decompose.navigation.Router -import kotlin.reflect.KClass - -internal class PreviewRouter : Router { - override fun push(route: Route, onComplete: (isSuccess: Boolean) -> Unit) { - /* no-op */ - } - - override fun pop(onComplete: (isSuccess: Boolean) -> Unit) { - /* no-op */ - } - - override fun popTo(routeClass: KClass, onComplete: (isSuccess: Boolean) -> Unit) { - /* no-op */ - } - - override fun popTo(route: Route, onComplete: (isSuccess: Boolean) -> Unit) { - /* no-op */ - } - - override fun clear(onComplete: (isSuccess: Boolean) -> Unit) { - /* no-op */ - } -} \ No newline at end of file