Updated on 2026-08-14

This commit is contained in:
Tangem 2026-07-27 13:42:09 +05:00
parent e6ec52e35a
commit 6aec7efdd6
9 changed files with 14 additions and 35 deletions

View file

@ -20,12 +20,8 @@ interface TokenDetailsClickIntents {
fun onSwapClick(unavailabilityReason: ScenarioUnavailabilityReason)
fun onSwapFromClick(unavailabilityReason: ScenarioUnavailabilityReason)
fun onSwapAndSendClick(unavailabilityReason: ScenarioUnavailabilityReason)
fun onSwapToClick(unavailabilityReason: ScenarioUnavailabilityReason)
fun onBuyClick(unavailabilityReason: ScenarioUnavailabilityReason)
fun onAddFundsClick()
@ -145,12 +141,8 @@ internal class EmptyTokenDetailsClickIntents : TokenDetailsClickIntents {
override fun onSwapClick(unavailabilityReason: ScenarioUnavailabilityReason) { /* no op */ }
override fun onSwapFromClick(unavailabilityReason: ScenarioUnavailabilityReason) { /* no op */ }
override fun onSwapAndSendClick(unavailabilityReason: ScenarioUnavailabilityReason) { /* no op */ }
override fun onSwapToClick(unavailabilityReason: ScenarioUnavailabilityReason) { /* no op */ }
override fun onHideClick() { /* no op */ }
override fun onHideConfirmed() { /* no op */ }

View file

@ -16,10 +16,6 @@ import com.tangem.common.routing.deeplink.MarketingDeeplink
import com.tangem.common.routing.deeplink.resolveMarketingDeeplink
import com.tangem.common.ui.bottomsheet.receive.AddressModel
import com.tangem.common.ui.bottomsheet.receive.mapToAddressModels
import com.tangem.features.marketing.api.MarketingBannerRequest
import com.tangem.features.rating.RatingComponent
import com.tangem.feature.swap.domain.SwapFeedbackUseCase
import com.tangem.feature.swap.domain.models.domain.SwapFeedbackParams
import com.tangem.common.ui.tokens.getUnavailabilityReasonText
import com.tangem.common.ui.userwallet.converter.WalletIconUMConverter
import com.tangem.common.ui.userwallet.ext.walletInterationIcon
@ -59,8 +55,8 @@ import com.tangem.domain.dynamicaddresses.IsDynamicAddressesAvailableUseCase
import com.tangem.domain.dynamicaddresses.IsXpubSupportedUseCase
import com.tangem.domain.dynamicaddresses.repository.DynamicAddressesRepository
import com.tangem.domain.feedback.SendBackupProblemEmailUseCase
import com.tangem.domain.models.StatusSource
import com.tangem.domain.marketing.models.MarketingScreen
import com.tangem.domain.models.StatusSource
import com.tangem.domain.models.TokenReceiveNotification
import com.tangem.domain.models.account.Account
import com.tangem.domain.models.currency.CryptoCurrency
@ -96,6 +92,8 @@ import com.tangem.domain.txhistory.usecase.GetFixedTxHistoryItemsUseCase
import com.tangem.domain.wallets.usecase.*
import com.tangem.domain.yield.supply.models.YieldSupplyRewardBalance
import com.tangem.domain.yield.supply.usecase.YieldSupplyGetRewardsBalanceUseCase
import com.tangem.feature.swap.domain.SwapFeedbackUseCase
import com.tangem.feature.swap.domain.models.domain.SwapFeedbackParams
import com.tangem.feature.tokendetails.deeplink.TokenDetailsDeepLinkActionListener
import com.tangem.feature.tokendetails.domain.GetCurrencyWarningsUseCase
import com.tangem.feature.tokendetails.presentation.router.InnerTokenDetailsRouter
@ -106,6 +104,8 @@ import com.tangem.feature.tokendetails.presentation.tokendetails.state.*
import com.tangem.feature.tokendetails.presentation.tokendetails.state.factory.QuickTopUpBlockFactory
import com.tangem.feature.tokendetails.presentation.tokendetails.state.factory.TokenDetailsStateFactory
import com.tangem.feature.tokendetails.presentation.tokendetails.state.transformer.*
import com.tangem.features.marketing.api.MarketingBannerRequest
import com.tangem.features.rating.RatingComponent
import com.tangem.features.tokendetails.ExpressTransactionsEvent
import com.tangem.features.tokendetails.ExpressTransactionsEventListener
import com.tangem.features.tokendetails.TokenDetailsComponent
@ -826,7 +826,7 @@ internal class TokenDetailsModel @Inject constructor(
}
override fun onSwapClick(unavailabilityReason: ScenarioUnavailabilityReason) {
handleSwap(unavailabilityReason, AppRoute.Swap.CurrencyPosition.ANY, checkYieldSupply = true)
handleSwap(unavailabilityReason, checkYieldSupply = true)
}
/**
@ -852,10 +852,6 @@ internal class TokenDetailsModel @Inject constructor(
MarketingDeeplink.EXTERNAL -> false
}
override fun onSwapFromClick(unavailabilityReason: ScenarioUnavailabilityReason) {
handleSwap(unavailabilityReason, AppRoute.Swap.CurrencyPosition.FROM, checkYieldSupply = true)
}
override fun onSwapAndSendClick(unavailabilityReason: ScenarioUnavailabilityReason) {
if (handleUnavailabilityReason(unavailabilityReason = unavailabilityReason)) {
return
@ -870,15 +866,7 @@ internal class TokenDetailsModel @Inject constructor(
)
}
override fun onSwapToClick(unavailabilityReason: ScenarioUnavailabilityReason) {
handleSwap(unavailabilityReason, AppRoute.Swap.CurrencyPosition.TO, checkYieldSupply = false)
}
private fun handleSwap(
unavailabilityReason: ScenarioUnavailabilityReason,
currencyPosition: AppRoute.Swap.CurrencyPosition,
checkYieldSupply: Boolean,
) {
private fun handleSwap(unavailabilityReason: ScenarioUnavailabilityReason, checkYieldSupply: Boolean) {
analyticsEventsHandler.send(
TokenScreenAnalyticsEvent.ButtonWithParams.ButtonExchange(
token = cryptoCurrency.symbol,
@ -906,7 +894,6 @@ internal class TokenDetailsModel @Inject constructor(
fromCryptoCurrency = cryptoCurrency,
userWalletId = userWalletId,
screenSource = AnalyticsParam.ScreensSources.Token.value,
fromCurrencyPosition = currencyPosition,
),
)
}

View file

@ -31,7 +31,7 @@ internal class UpdateActionButtonsTransformer(
}
},
) ?: prev.swapButton.tangemIconUM,
onClick = { clickIntents.onSwapFromClick(swapAction.unavailabilityReason) },
onClick = { clickIntents.onSwapClick(swapAction.unavailabilityReason) },
)
return prevState.copy(balanceBlockUM = prev.copyButtons(swapButton = updated))

View file

@ -39,7 +39,7 @@ internal class UpdateAddFundsTransformer(
isEnabled = action.unavailabilityReason == ScenarioUnavailabilityReason.None,
onClick = {
onActionDispatched()
clickIntents.onSwapToClick(action.unavailabilityReason)
clickIntents.onSwapClick(action.unavailabilityReason)
},
)
}

View file

@ -44,7 +44,7 @@ internal class UpdateTransferTransformer(
onClick = {
analyticsEventHandler.send(TransferAnalyticsEvent.ButtonSwap())
onActionDispatched()
clickIntents.onSwapFromClick(action.unavailabilityReason)
clickIntents.onSwapClick(action.unavailabilityReason)
},
)
}

View file

@ -23,7 +23,7 @@ internal class UpdateZeroBalanceActionsTransformer(
return prevState.copy(
zeroBalanceActionsUM = ZeroBalanceActionsUM.Content(
buy = buyAction?.toRow(onClick = clickIntents::onBuyClick),
swap = swapAction?.toRow(onClick = clickIntents::onSwapToClick),
swap = swapAction?.toRow(onClick = clickIntents::onSwapClick),
receive = receiveAction?.toRow(
onClick = clickIntents::onReceiveClick,
onLongClick = { clickIntents.onCopyAddress() },

View file

@ -243,7 +243,7 @@ class UpdateAddFundsTransformerTest {
// THEN
verifyOrder {
onActionDispatched.invoke()
clickIntents.onSwapToClick(ScenarioUnavailabilityReason.None)
clickIntents.onSwapClick(ScenarioUnavailabilityReason.None)
}
}

View file

@ -232,7 +232,7 @@ class UpdateTransferTransformerTest {
verifyOrder {
analyticsEventHandler.send(ofType<TransferAnalyticsEvent.ButtonSwap>())
onActionDispatched.invoke()
clickIntents.onSwapFromClick(ScenarioUnavailabilityReason.None)
clickIntents.onSwapClick(ScenarioUnavailabilityReason.None)
}
}

View file

@ -127,7 +127,7 @@ class UpdateZeroBalanceActionsTransformerTest {
content.swap!!.onClick()
// THEN
verify(exactly = 1) { clickIntents.onSwapToClick(ScenarioUnavailabilityReason.UsedOutdatedData) }
verify(exactly = 1) { clickIntents.onSwapClick(ScenarioUnavailabilityReason.UsedOutdatedData) }
}
@Test