Updated on 2026-08-14

This commit is contained in:
Tangem 2025-12-23 17:34:50 +05:00
commit cea4ba817a
5 changed files with 40 additions and 22 deletions

View file

@ -20,6 +20,8 @@ import com.tangem.domain.onramp.model.OnrampSource
import com.tangem.domain.redux.ReduxStateHolder
import com.tangem.domain.tokens.legacy.TradeCryptoAction
import com.tangem.domain.tokens.model.TokenActionsState
import com.tangem.domain.tokens.model.details.NavigationAction
import com.tangem.domain.yield.supply.usecase.YieldSupplyEnterStatusUseCase
import com.tangem.features.markets.impl.R
import com.tangem.features.markets.portfolio.impl.loader.PortfolioData
import com.tangem.features.markets.portfolio.impl.ui.state.TokenActionsBSContentUM
@ -41,6 +43,7 @@ internal class TokenActionsHandler @AssistedInject constructor(
private val isDemoCardUseCase: IsDemoCardUseCase,
private val messageSender: UiMessageSender,
private val shareManager: ShareManager,
private val yieldSupplyEnterStatusUseCase: YieldSupplyEnterStatusUseCase,
) {
private val disabledActionsInDemoMode = buildSet {
@ -186,22 +189,37 @@ internal class TokenActionsHandler @AssistedInject constructor(
val (userWalletId, cryptoCurrencyStatus) = cryptoCurrencyData.let { currencyData ->
currencyData.userWallet.walletId to currencyData.status
}
if (cryptoCurrencyStatus.value.yieldSupplyStatus?.isActive == true) {
router.push(
AppRoute.YieldSupplyActive(
val tokenEnterStatus = yieldSupplyEnterStatusUseCase(userWalletId, cryptoCurrencyStatus).getOrNull()
val isActiveYield = cryptoCurrencyStatus.value.yieldSupplyStatus?.isActive == true
when {
tokenEnterStatus != null -> router.push(
AppRoute.CurrencyDetails(
userWalletId = userWalletId,
cryptoCurrency = cryptoCurrencyStatus.currency,
apy = yieldSupplyApy,
),
)
} else {
router.push(
AppRoute.YieldSupplyPromo(
userWalletId = userWalletId,
cryptoCurrency = cryptoCurrencyStatus.currency,
apy = yieldSupplyApy,
currency = cryptoCurrencyStatus.currency,
navigationAction = NavigationAction.YieldSupply(
isActive = isActiveYield,
),
),
)
isActiveYield -> {
router.push(
AppRoute.YieldSupplyActive(
userWalletId = userWalletId,
cryptoCurrency = cryptoCurrencyStatus.currency,
apy = yieldSupplyApy,
),
)
}
else -> {
router.push(
AppRoute.YieldSupplyPromo(
userWalletId = userWalletId,
cryptoCurrency = cryptoCurrencyStatus.currency,
apy = yieldSupplyApy,
),
)
}
}
}

View file

@ -44,7 +44,7 @@ internal sealed class QuickActionUM(
data class YieldMode(
private val apy: String,
) : QuickActionUM(
title = resourceReference(R.string.yield_module_start_earning),
title = resourceReference(R.string.common_yield_mode),
description = resourceReference(R.string.yield_module_main_screen_promo_banner_message, wrappedList(apy)),
icon = R.drawable.ic_analytics_up_mini_24,
)

View file

@ -48,7 +48,7 @@ internal data class TokenActionsBSContentUM(
iconRes = R.drawable.ic_staking_24,
),
YieldMode(
text = resourceReference(R.string.yield_module_start_earning),
text = resourceReference(R.string.common_yield_mode),
iconRes = R.drawable.ic_analytics_up_mini_24,
),
;

View file

@ -116,7 +116,7 @@ internal class MarketsListModel @Inject constructor(
flow4 = shouldShowYieldModeMarketPromoUseCase(
appCurrency = currentAppCurrency.value,
interval = marketsListUMStateManager.selectedInterval.toBatchRequestInterval(),
),
).conflate(),
flow5 = getUserCountryUseCase.invoke(),
) { uiItems, isInInitialLoadingErrorState, isSearchNotFoundState, isYieldModePromo, userCountry ->
MarketsItemsData(
@ -134,7 +134,7 @@ internal class MarketsListModel @Inject constructor(
flow3 = shouldShowYieldModeMarketPromoUseCase(
appCurrency = currentAppCurrency.value,
interval = marketsListUMStateManager.selectedInterval.toBatchRequestInterval(),
),
).conflate(),
flow4 = getUserCountryUseCase.invoke(),
) { uiItems, isInInitialLoadingErrorState, shouldShowYieldModePromo, userCountry ->
MarketsItemsData(

View file

@ -176,14 +176,14 @@ private fun ColumnScope.Content(state: MarketsListUM, modifier: Modifier = Modif
)
}
val marketsNotification = state.marketsNotificationUM
AnimatedVisibility(
state.isInSearchMode.not() &&
state.selectedSortBy != SortByTypeUM.YieldSupply,
state.list !is ListUM.LoadingError &&
state.isInSearchMode.not() && state.selectedSortBy != SortByTypeUM.YieldSupply,
) {
val wrappedNotification = remember(this) { state.marketsNotificationUM }
val showMore = stringResourceSafe(R.string.common_show_more)
when (marketsNotification) {
when (wrappedNotification) {
is MarketsNotificationUM.YieldSupplyPromo -> {
val description = stringResourceSafe(
R.string.markets_yield_supply_banner_description,
@ -199,7 +199,7 @@ private fun ColumnScope.Content(state: MarketsListUM, modifier: Modifier = Modif
}
YieldSupplyInMarketsPromoNotification(
config = marketsNotification.config.copy(
config = wrappedNotification.config.copy(
subtitle = clickableDescription,
),
modifier = Modifier.padding(bottom = TangemTheme.dimens.spacing12),