diff --git a/common/ui/src/main/java/com/tangem/common/ui/tokens/TokenItemStateConverter.kt b/common/ui/src/main/java/com/tangem/common/ui/tokens/TokenItemStateConverter.kt index a4e5324a74..62e5cb7ed4 100644 --- a/common/ui/src/main/java/com/tangem/common/ui/tokens/TokenItemStateConverter.kt +++ b/common/ui/src/main/java/com/tangem/common/ui/tokens/TokenItemStateConverter.kt @@ -5,6 +5,7 @@ import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIco import com.tangem.core.ui.components.marketprice.PriceChangeType import com.tangem.core.ui.components.marketprice.utils.PriceChangeConverter import com.tangem.core.ui.components.token.state.TokenItemState +import com.tangem.core.ui.extensions.stringReference import com.tangem.core.ui.format.bigdecimal.crypto import com.tangem.core.ui.format.bigdecimal.format import com.tangem.core.ui.format.bigdecimal.percent @@ -126,7 +127,7 @@ class TokenItemStateConverter( is CryptoCurrencyStatus.Unreachable, is CryptoCurrencyStatus.NoAmount, -> { - TokenItemState.TitleState.Content(text = currencyStatus.currency.name) + TokenItemState.TitleState.Content(text = stringReference(currencyStatus.currency.name)) } is CryptoCurrencyStatus.Loaded, is CryptoCurrencyStatus.Custom, @@ -134,7 +135,7 @@ class TokenItemStateConverter( is CryptoCurrencyStatus.NoAccount, -> { TokenItemState.TitleState.Content( - text = currencyStatus.currency.name, + text = stringReference(currencyStatus.currency.name), hasPending = value.hasCurrentNetworkTransactions, ) } diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 198db71cec..9c2e4d268b 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -1,5 +1,8 @@ + Wähle den Token + Du möchtest erhalten + Du möchtest tauschen Netzwerk wählen Token anlegen Token verwalten @@ -852,6 +855,9 @@ Tausche diesen Token gegen einen anderen zu %1$s Servicegebühren von Februar %2$s-%3$s. Tausche mit Changelly, %s Gebühren Jetzt tauschen + Nicht verfügbar zum Kauf + Nicht zum Verkauf verfügbar + Nicht verfügbar für Tausch von %s Vertrag: %s Du hast noch keine Transaktionen Der Transaktionsverlauf konnte nicht geladen werden.\nKlicke auf die Schaltfläche Neu laden, um die Informationen zu aktualisieren. diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index 3dc04b55bb..028dbab45b 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -1,5 +1,8 @@ + Elige el token + Desea recibir + Quiere intercambiar Elige red Agregue un token personalizado Gestionar tokens @@ -847,6 +850,9 @@ Cambie este token por otro por una tarifa de servicio de %1$s del %2$s al %3$s de febrero. Intercambio con Changelly, %s tarifa Intercambie ahora + No disponible para compra + No disponible para vender + No disponible para cambio desde %s contacto: %s Aún no tiene ninguna transacción Error al cargar el historial de transacciones.\nHaga clic en el botón de recarga para actualizar la información. diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 2f534dd458..dbd1f5f831 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -1,5 +1,8 @@ + Choisissez le jeton + Vous souhaitez recevoir + Vous souhaitez échanger Choisissez le réseau Ajouter un jeton personnalisé Gérer les jetons @@ -847,6 +850,9 @@ Échangez ce jeton contre un autre moyennant des frais de service de %1$s du %2$s au %3$s février. Échangez avec Changelly, %s frais Échangez maintenant + Non disponible à l\'achat + Indisponible à la vente + Non disponible pour l\'échange de %s contrat : %s Vous n\'avez pas encore de transactions Échec du chargement de l\'historique des transactions.\nCliquez sur le bouton de rechargement pour mettre à jour les informations. diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index d64d288ba7..4b823654c1 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -1,5 +1,8 @@ + トークンを選択 + 受け取りたい + 交換したい ネットワークを選択 カスタムトークンの追加 トークンの管理 @@ -842,6 +845,9 @@ このトークンは、2月%2$s-%3$s の間、%1$s のサービス手数料で別のトークンと交換できます。 Changellyでスワップ、手数料%s 今すぐスワップ + 買付できません + 売却できません + %sからのスワップは利用できません コントラクト: %s まだ取引はありません 取引履歴の読み込みに失敗しました。\n情報を更新するには、リロードボタンをクリックしてください。 diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 50fe9580e5..9d3df7e413 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -1,5 +1,8 @@ + Выберите токен + Вы хотите получить + Вы хотите обменять Выберите сеть Добавить токен Валюты @@ -867,6 +870,8 @@ Обменивайте этот токен на другие с %1$s комиссии за обслуживание с %2$s по %3$s февраля. Обмен с Changelly, %s комиссии Обменять + Недоступно для покупки + Недоступно для продажи контракт: %s У вас еще нет транзакций Не удалось загрузить историю транзакций.\nНажмите на кнопку перезагрузки, чтобы обновить информацию. diff --git a/core/res/src/main/res/values-uk-rUA/strings.xml b/core/res/src/main/res/values-uk-rUA/strings.xml index 18f9697aaa..222dbdbe02 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -1,5 +1,8 @@ + Оберіть токен + Ви хочете отримати + Ви хочете обміняти Оберіть мережу Додати токен Токени @@ -866,6 +869,9 @@ Обмінюйте цей токен на інші з %1$s комісією за обслуговування з %2$s по %3$s лютого. Обмін із Changelly, %s комісії Обміняти + Недоступно для покупки + Недоступно для продажу + Недоступно для обміну з %s контракт: %s У вас ще немає транзакцій Не вдалося завантажити історію транзакцій.\nНатисніть кнопку нижче, щоб оновити інформацію diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 1e4d43cba5..1047741f9a 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -1,5 +1,8 @@ + Choose the Token + You want to Receive + You want to Swap Choose network Add custom token Manage tokens @@ -860,6 +863,9 @@ Exchange this token for another at %1$s service fees from February %2$s-%3$s. Swap with Changelly, %s fees Swap now + Unavailable to purchase + Unavailable to sell + Unavailable for swap from %s contract: %s You don\'t have any transactions yet Failed to load transaction history.\nClick on reload button to update the information. diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/token/TokenItem.kt b/core/ui/src/main/java/com/tangem/core/ui/components/token/TokenItem.kt index 33f3d649fc..c504817b1b 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/token/TokenItem.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/token/TokenItem.kt @@ -25,6 +25,7 @@ import com.tangem.core.ui.components.token.internal.* import com.tangem.core.ui.components.token.state.TokenItemState import com.tangem.core.ui.extensions.TextReference import com.tangem.core.ui.extensions.rememberHapticFeedback +import com.tangem.core.ui.extensions.stringReference import com.tangem.core.ui.res.TangemColorPalette import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemThemePreview @@ -458,7 +459,7 @@ private class TokenItemStateProvider : CollectionPreviewParameterProvider { - PriceText(text = state.value, modifier = modifier, isAvailable = state.isAvailable) + PriceText(text = state.value.resolveReference(), modifier = modifier, isAvailable = state.isAvailable) } is TokenPriceState.Unknown -> { PriceText(text = DASH_SIGN, modifier = modifier) @@ -158,7 +160,7 @@ private class TokenPriceChangeStateProvider : CollectionPreviewParameterProvider priceChangePercent = "2.5%", type = PriceChangeType.NEUTRAL, ), - TokenPriceState.TextContent(value = "Subtitle", isAvailable = true), + TokenPriceState.TextContent(value = stringReference(value = "Subtitle"), isAvailable = true), TokenPriceState.Unknown, TokenPriceState.Loading, TokenPriceState.Locked, diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/token/internal/TokenTitle.kt b/core/ui/src/main/java/com/tangem/core/ui/components/token/internal/TokenTitle.kt index 9bf3412f33..7f379e09a6 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/token/internal/TokenTitle.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/token/internal/TokenTitle.kt @@ -15,6 +15,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.style.TextOverflow import com.tangem.core.ui.R import com.tangem.core.ui.components.RectangleShimmer +import com.tangem.core.ui.extensions.resolveReference import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.components.token.state.TokenItemState.TitleState as TokenTitleState @@ -46,7 +47,7 @@ private fun ContentTitle(state: TokenTitleState.Content, modifier: Modifier = Mo * So we need to use [weight] to avoid displacement. */ CurrencyNameText( - name = state.text, + name = state.text.resolveReference(), isAvailable = state.isAvailable, modifier = Modifier.weight(weight = 1f, fill = false), ) diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/token/state/TokenItemState.kt b/core/ui/src/main/java/com/tangem/core/ui/components/token/state/TokenItemState.kt index e16a77a33b..6f3b2342a9 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/token/state/TokenItemState.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/token/state/TokenItemState.kt @@ -4,6 +4,7 @@ import androidx.compose.runtime.Immutable import com.tangem.core.ui.components.audits.AuditLabelUM import com.tangem.core.ui.components.currency.icon.CurrencyIconState import com.tangem.core.ui.components.marketprice.PriceChangeType +import com.tangem.core.ui.extensions.TextReference /** TokenItem component state */ @Immutable @@ -161,7 +162,7 @@ sealed class TokenItemState { sealed class TitleState { data class Content( - val text: String, + val text: TextReference, val hasPending: Boolean = false, val isAvailable: Boolean = true, ) : TitleState() @@ -180,7 +181,7 @@ sealed class TokenItemState { val type: PriceChangeType, ) : SubtitleState() - data class TextContent(val value: String, val isAvailable: Boolean = true) : SubtitleState() + data class TextContent(val value: TextReference, val isAvailable: Boolean = true) : SubtitleState() data object Unknown : SubtitleState() diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/converters/ExchangeItemStateConverter.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/converters/ExchangeItemStateConverter.kt index f6f4d3ba8a..0ddafb4e83 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/converters/ExchangeItemStateConverter.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/converters/ExchangeItemStateConverter.kt @@ -4,6 +4,7 @@ import com.tangem.core.ui.components.audits.AuditLabelUM import com.tangem.core.ui.components.currency.icon.CurrencyIconState import com.tangem.core.ui.components.token.state.TokenItemState import com.tangem.core.ui.extensions.resourceReference +import com.tangem.core.ui.extensions.stringReference import com.tangem.core.ui.utils.BigDecimalFormatter import com.tangem.domain.markets.TokenMarketExchange import com.tangem.domain.markets.TokenMarketExchange.TrustScore @@ -26,7 +27,7 @@ internal object ExchangeItemStateConverter : Converter onTokenItemClick(status) }, ) diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/ui/preview/PreviewMyPortfolioUMProvider.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/ui/preview/PreviewMyPortfolioUMProvider.kt index b2728ffc33..79177f24a4 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/ui/preview/PreviewMyPortfolioUMProvider.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/ui/preview/PreviewMyPortfolioUMProvider.kt @@ -4,6 +4,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig import com.tangem.core.ui.components.currency.icon.CurrencyIconState import com.tangem.core.ui.components.token.state.TokenItemState +import com.tangem.core.ui.extensions.stringReference import com.tangem.domain.wallets.models.UserWalletId import com.tangem.features.markets.portfolio.impl.ui.state.MyPortfolioUM import com.tangem.features.markets.portfolio.impl.ui.state.PortfolioTokenUM @@ -49,10 +50,12 @@ internal class PreviewMyPortfolioUMProvider : PreviewParameterProvider + ) { currencies, appCurrencyAndBalanceHiding, selectedStatus, query, availablePairs -> if (availablePairs.isEmpty()) { SetLoadingTokenItemsTransformer(currencies) } else { + val (appCurrency, isBalanceHidden) = appCurrencyAndBalanceHiding + val filterTokenList = currencies .filterByQuery(query = query) .filterByAvailability(availablePairs = availablePairs) - Timber.e("${filterTokenList[true].orEmpty().size}") - UpdateTokenItemsTransformer( appCurrency = appCurrency, onItemClick = params.onTokenClick, statuses = filterTokenList, isBalanceHidden = isBalanceHidden, hasSearchBar = currencies.isNotEmpty(), + unavailableTokensHeaderReference = resourceReference( + id = R.string.tokens_list_unavailable_to_swap_header, + wrappedList(selectedStatus?.currency?.name?.capitalize() ?: ""), + ), onQueryChange = ::onSearchQueryChange, onActiveChange = ::onSearchBarActiveChange, ) @@ -115,8 +120,6 @@ internal class AvailableSwapPairsModel @Inject constructor( currencies = tokenList.map(CryptoCurrencyStatus::currency), ) - Timber.e("$initialCurrency = ${pairs.size}") - availablePairsByNetworkFlow.update { it.toMutableMap().apply { put(initialCurrency, pairs) @@ -126,6 +129,14 @@ internal class AvailableSwapPairsModel @Inject constructor( } } + private fun getAppCurrencyAndBalanceHidingFlow(): Flow> { + return combine( + flow = getSelectedAppCurrencyUseCase().map { it.getOrElse { AppCurrency.Default } }.distinctUntilChanged(), + flow2 = getBalanceHidingSettingsUseCase().map { it.isBalanceHidden }.distinctUntilChanged(), + transform = ::Pair, + ) + } + private fun onSearchQueryChange(newQuery: String) { val searchBar = tokenListUMController.getSearchBar() if (searchBar?.searchBarUM?.query == newQuery) return diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/ExchangeCardUM.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/ExchangeCardUM.kt index e427825e21..11486011da 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/ExchangeCardUM.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/ExchangeCardUM.kt @@ -3,6 +3,7 @@ package com.tangem.features.onramp.swap.entity import com.tangem.core.ui.components.currency.icon.CurrencyIconState import com.tangem.core.ui.components.token.state.TokenItemState import com.tangem.core.ui.extensions.TextReference +import com.tangem.core.ui.extensions.resourceReference import com.tangem.features.onramp.impl.R /** @@ -24,18 +25,23 @@ internal sealed interface ExchangeCardUM { /** * Empty state * - * @property titleReference title reference + * @property titleReference title reference + * @property subtitleReference empty token subtitle reference */ - data class Empty(override val titleReference: TextReference) : ExchangeCardUM { + data class Empty( + override val titleReference: TextReference, + val subtitleReference: TextReference, + ) : ExchangeCardUM { override val removeButtonUM: RemoveButtonUM? = null - // TODO: [REDACTED_JIRA] override val tokenItemState: TokenItemState = TokenItemState.Content( id = "empty", iconState = CurrencyIconState.Empty(R.drawable.ic_empty_64), - titleState = TokenItemState.TitleState.Content(text = "Choose the Token"), - subtitleState = TokenItemState.SubtitleState.TextContent(value = "You want to Swap"), + titleState = TokenItemState.TitleState.Content( + text = resourceReference(id = R.string.action_buttons_swap_choose_token), + ), + subtitleState = TokenItemState.SubtitleState.TextContent(value = subtitleReference), fiatAmountState = TokenItemState.FiatAmountState.Content(text = ""), subtitle2State = TokenItemState.Subtitle2State.TextContent(text = ""), onItemClick = null, diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/SwapSelectTokensController.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/SwapSelectTokensController.kt index 64fac02313..f6cd655930 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/SwapSelectTokensController.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/SwapSelectTokensController.kt @@ -1,8 +1,8 @@ package com.tangem.features.onramp.swap.entity import com.tangem.core.decompose.navigation.Router -import com.tangem.core.ui.extensions.resourceReference -import com.tangem.features.onramp.impl.R +import com.tangem.features.onramp.swap.entity.utils.createEmptyExchangeFrom +import com.tangem.features.onramp.swap.entity.utils.createEmptyExchangeTo import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.update @@ -25,8 +25,8 @@ internal class SwapSelectTokensController @Inject constructor( private val _state: MutableStateFlow = MutableStateFlow( value = SwapSelectTokensUM( onBackClick = router::pop, - exchangeFrom = ExchangeCardUM.Empty(titleReference = resourceReference(id = R.string.swapping_from_title)), - exchangeTo = ExchangeCardUM.Empty(titleReference = resourceReference(id = R.string.swapping_to_title)), + exchangeFrom = createEmptyExchangeFrom(), + exchangeTo = createEmptyExchangeTo(), ), ) diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/transformer/RemoveSelectedFromTokenTransformer.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/transformer/RemoveSelectedFromTokenTransformer.kt index 52d581ddf2..828f9d6ad0 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/transformer/RemoveSelectedFromTokenTransformer.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/transformer/RemoveSelectedFromTokenTransformer.kt @@ -1,8 +1,9 @@ package com.tangem.features.onramp.swap.entity.transformer -import com.tangem.features.onramp.swap.entity.ExchangeCardUM import com.tangem.features.onramp.swap.entity.SwapSelectTokensUM import com.tangem.features.onramp.swap.entity.SwapSelectTokensUMTransformer +import com.tangem.features.onramp.swap.entity.utils.createEmptyExchangeFrom +import com.tangem.features.onramp.swap.entity.utils.createEmptyExchangeTo /** * Transformer for removing selected "from" token @@ -13,8 +14,8 @@ internal object RemoveSelectedFromTokenTransformer : SwapSelectTokensUMTransform override fun transform(prevState: SwapSelectTokensUM): SwapSelectTokensUM { return prevState.copy( - exchangeFrom = ExchangeCardUM.Empty(titleReference = prevState.exchangeFrom.titleReference), - exchangeTo = ExchangeCardUM.Empty(titleReference = prevState.exchangeTo.titleReference), + exchangeFrom = createEmptyExchangeFrom(), + exchangeTo = createEmptyExchangeTo(), ) } } \ No newline at end of file diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/utils/ExchangeCardUMExt.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/utils/ExchangeCardUMExt.kt index 5e6a03ea40..6daf403437 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/utils/ExchangeCardUMExt.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/entity/utils/ExchangeCardUMExt.kt @@ -1,8 +1,26 @@ package com.tangem.features.onramp.swap.entity.utils import com.tangem.core.ui.components.token.state.TokenItemState +import com.tangem.core.ui.extensions.resourceReference +import com.tangem.features.onramp.impl.R import com.tangem.features.onramp.swap.entity.ExchangeCardUM +/** Create empty exchange "from" card */ +internal fun createEmptyExchangeFrom(): ExchangeCardUM.Empty { + return ExchangeCardUM.Empty( + titleReference = resourceReference(id = R.string.swapping_from_title), + subtitleReference = resourceReference(id = R.string.action_buttons_you_want_to_swap), + ) +} + +/** Create empty exchange "to" card */ +internal fun createEmptyExchangeTo(): ExchangeCardUM.Empty { + return ExchangeCardUM.Empty( + titleReference = resourceReference(id = R.string.swapping_to_title), + subtitleReference = resourceReference(id = R.string.action_buttons_you_want_to_receive), + ) +} + /** * Convert from [ExchangeCardUM] to [ExchangeCardUM.Filled] * diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/ui/ExchangeCard.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/ui/ExchangeCard.kt index 92a3229445..35ad87452f 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/ui/ExchangeCard.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/ui/ExchangeCard.kt @@ -26,6 +26,7 @@ import com.tangem.core.ui.components.token.state.TokenItemState import com.tangem.core.ui.extensions.TextReference import com.tangem.core.ui.extensions.resolveReference import com.tangem.core.ui.extensions.resourceReference +import com.tangem.core.ui.extensions.stringReference import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemThemePreview import com.tangem.features.onramp.impl.R @@ -112,7 +113,10 @@ private fun Preview_ExchangeCard(@PreviewParameter(ExchangeCardUMProvider::class private class ExchangeCardUMProvider : PreviewParameterProvider { override val values: Sequence = sequenceOf( - ExchangeCardUM.Empty(titleReference = resourceReference(id = R.string.swapping_from_title)), + ExchangeCardUM.Empty( + titleReference = resourceReference(id = R.string.swapping_from_title), + subtitleReference = resourceReference(id = R.string.action_buttons_you_want_to_swap), + ), createFilled(removeButtonUM = null), createFilled(removeButtonUM = ExchangeCardUM.RemoveButtonUM { }), ) @@ -124,7 +128,7 @@ private class ExchangeCardUMProvider : PreviewParameterProvider tokenItemState = TokenItemState.Content( id = "1", iconState = CurrencyIconState.Locked, - titleState = TokenItemState.TitleState.Content(text = "Bitcoin"), + titleState = TokenItemState.TitleState.Content(text = stringReference(value = "Bitcoin")), fiatAmountState = TokenItemState.FiatAmountState.Content(text = "12 368,14 \$"), subtitle2State = TokenItemState.Subtitle2State.TextContent(text = "0,35853044 BTC"), subtitleState = TokenItemState.SubtitleState.CryptoPriceContent( diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/entity/transformer/UpdateTokenItemsTransformer.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/entity/transformer/UpdateTokenItemsTransformer.kt index a4eed528a1..ee219d1fc5 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/entity/transformer/UpdateTokenItemsTransformer.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/entity/transformer/UpdateTokenItemsTransformer.kt @@ -23,6 +23,7 @@ internal class UpdateTokenItemsTransformer( private val statuses: Map>, private val isBalanceHidden: Boolean, private val hasSearchBar: Boolean, + private val unavailableTokensHeaderReference: TextReference, private val onQueryChange: (String) -> Unit, private val onActiveChange: (Boolean) -> Unit, ) : TokenListUMTransformer { @@ -62,11 +63,7 @@ internal class UpdateTokenItemsTransformer( .toImmutableList(), unavailableItems = buildList { if (unavailableItems.isNotEmpty()) { - // TODO: [REDACTED_JIRA] - createGroupTitle( - textReference = stringReference(value = "Unavailable tokens"), - ) - .let(::add) + createGroupTitle(textReference = unavailableTokensHeaderReference).let(::add) } addAll(unavailableItems) @@ -91,11 +88,21 @@ internal class UpdateTokenItemsTransformer( return TokenItemStateConverter( appCurrency = appCurrency, iconStateProvider = { CryptoCurrencyToIconStateConverter(isAvailable = false).convert(it) }, - titleStateProvider = { TokenItemState.TitleState.Content(text = it.currency.name, isAvailable = false) }, + titleStateProvider = { + TokenItemState.TitleState.Content( + text = stringReference(value = it.currency.name), + isAvailable = false, + ) + }, subtitleStateProvider = { when (it.value) { CryptoCurrencyStatus.Loading -> TokenItemState.SubtitleState.Loading - else -> TokenItemState.SubtitleState.TextContent(value = it.currency.symbol, isAvailable = false) + else -> { + TokenItemState.SubtitleState.TextContent( + value = stringReference(value = it.currency.symbol), + isAvailable = false, + ) + } } }, fiatAmountStateProvider = { diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/model/OnrampTokenListModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/model/OnrampTokenListModel.kt index 99f147b1c3..ec32132b9d 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/model/OnrampTokenListModel.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/model/OnrampTokenListModel.kt @@ -4,6 +4,7 @@ import arrow.core.getOrElse import com.tangem.core.decompose.model.Model import com.tangem.core.decompose.model.ParamsContainer import com.tangem.core.ui.extensions.resourceReference +import com.tangem.core.ui.extensions.wrappedList import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.balancehiding.GetBalanceHidingSettingsUseCase @@ -12,9 +13,9 @@ import com.tangem.domain.exchange.RampStateManager import com.tangem.domain.tokens.GetTokenListUseCase import com.tangem.domain.tokens.model.CryptoCurrencyStatus import com.tangem.domain.tokens.model.TokenList -import com.tangem.features.onramp.impl.R import com.tangem.domain.wallets.usecase.GetWalletsUseCase import com.tangem.features.onramp.entity.OnrampOperation +import com.tangem.features.onramp.impl.R import com.tangem.features.onramp.tokenlist.OnrampTokenListComponent import com.tangem.features.onramp.tokenlist.entity.TokenListUM import com.tangem.features.onramp.tokenlist.entity.TokenListUMController @@ -74,6 +75,17 @@ internal class OnrampTokenListModel @Inject constructor( statuses = filterTokenList, isBalanceHidden = isBalanceHidden, hasSearchBar = params.hasSearchBar && currencies.isNotEmpty(), + unavailableTokensHeaderReference = when (params.filterOperation) { + OnrampOperation.BUY -> resourceReference(id = R.string.tokens_list_unavailable_to_purchase_header) + OnrampOperation.SELL -> resourceReference(id = R.string.tokens_list_unavailable_to_sell_header) + OnrampOperation.SWAP -> { + // TODO: [REDACTED_JIRA] + resourceReference( + id = R.string.tokens_list_unavailable_to_swap_header, + wrappedList(""), + ) + } + }, onQueryChange = ::onSearchQueryChange, onActiveChange = ::onSearchBarActiveChange, ) diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/ui/preview/PreviewTokenListUMProvider.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/ui/preview/PreviewTokenListUMProvider.kt index 273cad4fd0..501874e719 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/ui/preview/PreviewTokenListUMProvider.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/ui/preview/PreviewTokenListUMProvider.kt @@ -7,6 +7,7 @@ import com.tangem.core.ui.components.marketprice.PriceChangeType import com.tangem.core.ui.components.token.state.TokenItemState import com.tangem.core.ui.components.tokenlist.state.TokensListItemUM import com.tangem.core.ui.extensions.resourceReference +import com.tangem.core.ui.extensions.stringReference import com.tangem.features.onramp.impl.R import com.tangem.features.onramp.tokenlist.entity.TokenListUM import kotlinx.collections.immutable.persistentListOf @@ -69,7 +70,7 @@ internal class PreviewTokenListUMProvider : PreviewParameterProvider