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,
),
)
}