diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 42f9f8b591..c2cdf27727 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -193,6 +193,7 @@ Вы отправляете Мои токены У вас нет добавленных токенов. Добавьте токены для обмена + Токены не найдены. Пожалуйста, попробуйте другой запрос Недоступен для обмена с %s Кроме того, в курс обмена включена комиссия сети за отправку обмененных средств на ваш адрес Статус diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 1150c0349b..94f6ed4c2e 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -192,6 +192,7 @@ You send My tokens You haven\'t added any tokens yet. Add tokens via Market to swap + No tokens found. Please try another request Cannot be swapped for %s Additionally, the network fee for sending the exchanged funds back to your address is included in the rate Status diff --git a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataStateExpress.kt b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataStateExpress.kt index 60c8e749bd..d761ad97fb 100644 --- a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataStateExpress.kt +++ b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataStateExpress.kt @@ -11,8 +11,8 @@ data class TokensDataStateExpress( companion object { val EMPTY = TokensDataStateExpress( - fromGroup = CurrenciesGroup(emptyList(), emptyList()), - toGroup = CurrenciesGroup(emptyList(), emptyList()), + fromGroup = CurrenciesGroup(emptyList(), emptyList(), false), + toGroup = CurrenciesGroup(emptyList(), emptyList(), false), allProviders = emptyList(), ) } @@ -21,4 +21,5 @@ data class TokensDataStateExpress( data class CurrenciesGroup( val available: List, val unavailable: List, + val afterSearch: Boolean, ) \ No newline at end of file diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt index 19a88c1d4a..d38fc7f54a 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt @@ -148,6 +148,7 @@ internal class SwapInteractorImpl @Inject constructor( return CurrenciesGroup( available = availableCryptoCurrencies, unavailable = unavailableCryptoCurrencies.map { CryptoCurrencySwapInfo(it, emptyList()) }, + afterSearch = false ) } diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/converters/TokensDataConverter.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/converters/TokensDataConverter.kt index 895fcb1ea5..d475bad6f2 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/converters/TokensDataConverter.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/converters/TokensDataConverter.kt @@ -49,6 +49,7 @@ class TokensDataConverter( .toImmutableList(), onSearchEntered = onSearchEntered, onTokenSelected = onTokenSelected, + afterSearch = value.afterSearch, ) } diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapSelectTokenStateHolder.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapSelectTokenStateHolder.kt index ac6762d7b7..585afb1921 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapSelectTokenStateHolder.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapSelectTokenStateHolder.kt @@ -7,6 +7,7 @@ import kotlinx.collections.immutable.ImmutableList data class SwapSelectTokenStateHolder( val availableTokens: ImmutableList, val unavailableTokens: ImmutableList, + val afterSearch: Boolean, val onSearchEntered: (String) -> Unit, val onTokenSelected: (String) -> Unit, ) diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSelectTokenScreen.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSelectTokenScreen.kt index 4057aba9af..87a82413f1 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSelectTokenScreen.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSelectTokenScreen.kt @@ -42,10 +42,16 @@ fun SwapSelectTokenScreen(state: SwapSelectTokenStateHolder, onBack: () -> Unit) .background(color = TangemTheme.colors.background.secondary), content = { padding -> val modifier = Modifier.padding(padding) - if (state.availableTokens.isEmpty() && state.unavailableTokens.isEmpty()) { - EmptyTokensList(modifier) - } else { - ListOfTokens(state = state, modifier = modifier) + when { + state.availableTokens.isEmpty() && state.unavailableTokens.isEmpty() && state.afterSearch -> { + TokensNotFound(modifier) + } + state.availableTokens.isEmpty() && state.unavailableTokens.isEmpty() && !state.afterSearch -> { + EmptyTokensList(modifier) + } + else -> { + ListOfTokens(state = state, modifier = modifier) + } } }, topBar = { @@ -91,6 +97,26 @@ private fun EmptyTokensList(modifier: Modifier = Modifier) { } } +@Composable +private fun TokensNotFound(modifier: Modifier = Modifier) { + Box( + modifier = modifier + .background(TangemTheme.colors.background.secondary) + .fillMaxSize(), + ) { + Text( + modifier = Modifier + .padding(top = TangemTheme.dimens.spacing32) + .padding(horizontal = TangemTheme.dimens.spacing30) + .align(Alignment.TopCenter), + text = stringResource(id = R.string.express_token_list_empty_search), + style = TangemTheme.typography.subtitle1, + color = TangemTheme.colors.text.tertiary, + textAlign = TextAlign.Center, + ) + } +} + @Composable private fun ListOfTokens(state: SwapSelectTokenStateHolder, modifier: Modifier = Modifier) { val screenBackgroundColor = TangemTheme.colors.background.secondary @@ -283,6 +309,7 @@ private fun TokenScreenPreview() { state = SwapSelectTokenStateHolder( availableTokens = listOf(title, token, token, token).toImmutableList(), unavailableTokens = listOf(title, token, token, token).toImmutableList(), + afterSearch = false, onSearchEntered = {}, onTokenSelected = {}, ), diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt index 84cde6431c..f021a40ab2 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt @@ -586,13 +586,16 @@ internal class SwapViewModel @Inject constructor( fromGroup = tokenDataState.fromGroup.copy( available = available, unavailable = unavailable, + afterSearch = true, ), + ) } else { tokenDataState.copy( toGroup = tokenDataState.toGroup.copy( available = available, unavailable = unavailable, + afterSearch = true, ), ) }