From 2f8c98372806e0742a225201e58551eb8d0a5e56 Mon Sep 17 00:00:00 2001 From: Eugene Date: Sat, 8 Aug 2026 19:23:01 +0300 Subject: [PATCH] don't replace with initRoute if oldToken is null --- .../shared/presentation/VBoxRootComponent.kt | 7 ++++-- .../overview/season/SeasonOverviewScreen.kt | 23 ++++++++++++++----- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/VBoxRootComponent.kt b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/VBoxRootComponent.kt index 2e51566..04e8eaf 100644 --- a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/VBoxRootComponent.kt +++ b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/VBoxRootComponent.kt @@ -8,6 +8,7 @@ import com.arkivanov.decompose.router.webhistory.WebNavigation import com.arkivanov.decompose.router.webhistory.WebNavigationOwner import com.arkivanov.essenty.lifecycle.coroutines.repeatOnLifecycle import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.launch @@ -41,13 +42,15 @@ class VBoxRootComponent( init { scope.launch { repeatOnLifecycle { + var oldToken = tokenStorage.token.firstOrNull() tokenStorage.token.collect { if (it != null) { val invalid = runCatching { healthCheck.check() }.getOrNull() == null - if (invalid) { navReplace(initRoute) } - } else { + if (invalid) navReplace(initRoute) + } else if (oldToken != null) { navReplace(initRoute) } + oldToken = it } } } diff --git a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/overview/season/SeasonOverviewScreen.kt b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/overview/season/SeasonOverviewScreen.kt index b19d163..9cfc6b6 100644 --- a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/overview/season/SeasonOverviewScreen.kt +++ b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/overview/season/SeasonOverviewScreen.kt @@ -3,9 +3,11 @@ package ru.shadowsparky.vbox.shared.presentation.overview.season import androiddev.apps.vbox.client.shared.generated.resources.Res import androiddev.apps.vbox.client.shared.generated.resources.retry import androiddev.apps.vbox.client.shared.generated.resources.seasons_overview +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -17,6 +19,7 @@ import androidx.compose.runtime.withFrameNanos import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.unit.dp import org.jetbrains.compose.resources.stringResource import ru.shadowsparky.ui.LocalBlurState import ru.shadowsparky.ui.applyBlurSource @@ -24,7 +27,6 @@ import ru.shadowsparky.ui.components.BackButton import ru.shadowsparky.ui.components.ErrorContent import ru.shadowsparky.ui.components.ExpressiveLazyColumn import ru.shadowsparky.ui.components.Loading -import ru.shadowsparky.ui.components.TextPreference import ru.shadowsparky.ui.components.TopAppBar import ru.shadowsparky.ui.rememberBlurState import ru.shadowsparky.vbox.shared.domain.model.Season @@ -79,15 +81,14 @@ fun SeasonsInfo( content = { section { itemsIndexed(seasons) { index, season -> - TextPreference( - season.title, - onClick = { onClick(season.id) }, + SeasonInfo( modifier = if (index == 0) { Modifier.focusRequester(requester) } else { Modifier - } - ) + }, + season.title + ) { onClick(season.id) } } } } @@ -100,3 +101,13 @@ fun SeasonsInfo( } } } + +@Composable +fun SeasonInfo(modifier: Modifier, titleText: String, onClick: () -> Unit) { + Text( + titleText, + modifier = modifier.fillMaxWidth() + .clickable { onClick() } + .padding(16.dp) + ) +}