Updated on 2026-08-14
This commit is contained in:
parent
e6ec52e35a
commit
6aec7efdd6
9 changed files with 14 additions and 35 deletions
|
|
@ -20,12 +20,8 @@ interface TokenDetailsClickIntents {
|
||||||
|
|
||||||
fun onSwapClick(unavailabilityReason: ScenarioUnavailabilityReason)
|
fun onSwapClick(unavailabilityReason: ScenarioUnavailabilityReason)
|
||||||
|
|
||||||
fun onSwapFromClick(unavailabilityReason: ScenarioUnavailabilityReason)
|
|
||||||
|
|
||||||
fun onSwapAndSendClick(unavailabilityReason: ScenarioUnavailabilityReason)
|
fun onSwapAndSendClick(unavailabilityReason: ScenarioUnavailabilityReason)
|
||||||
|
|
||||||
fun onSwapToClick(unavailabilityReason: ScenarioUnavailabilityReason)
|
|
||||||
|
|
||||||
fun onBuyClick(unavailabilityReason: ScenarioUnavailabilityReason)
|
fun onBuyClick(unavailabilityReason: ScenarioUnavailabilityReason)
|
||||||
|
|
||||||
fun onAddFundsClick()
|
fun onAddFundsClick()
|
||||||
|
|
@ -145,12 +141,8 @@ internal class EmptyTokenDetailsClickIntents : TokenDetailsClickIntents {
|
||||||
|
|
||||||
override fun onSwapClick(unavailabilityReason: ScenarioUnavailabilityReason) { /* no op */ }
|
override fun onSwapClick(unavailabilityReason: ScenarioUnavailabilityReason) { /* no op */ }
|
||||||
|
|
||||||
override fun onSwapFromClick(unavailabilityReason: ScenarioUnavailabilityReason) { /* no op */ }
|
|
||||||
|
|
||||||
override fun onSwapAndSendClick(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 onHideClick() { /* no op */ }
|
||||||
|
|
||||||
override fun onHideConfirmed() { /* no op */ }
|
override fun onHideConfirmed() { /* no op */ }
|
||||||
|
|
|
||||||
|
|
@ -16,10 +16,6 @@ import com.tangem.common.routing.deeplink.MarketingDeeplink
|
||||||
import com.tangem.common.routing.deeplink.resolveMarketingDeeplink
|
import com.tangem.common.routing.deeplink.resolveMarketingDeeplink
|
||||||
import com.tangem.common.ui.bottomsheet.receive.AddressModel
|
import com.tangem.common.ui.bottomsheet.receive.AddressModel
|
||||||
import com.tangem.common.ui.bottomsheet.receive.mapToAddressModels
|
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.tokens.getUnavailabilityReasonText
|
||||||
import com.tangem.common.ui.userwallet.converter.WalletIconUMConverter
|
import com.tangem.common.ui.userwallet.converter.WalletIconUMConverter
|
||||||
import com.tangem.common.ui.userwallet.ext.walletInterationIcon
|
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.IsXpubSupportedUseCase
|
||||||
import com.tangem.domain.dynamicaddresses.repository.DynamicAddressesRepository
|
import com.tangem.domain.dynamicaddresses.repository.DynamicAddressesRepository
|
||||||
import com.tangem.domain.feedback.SendBackupProblemEmailUseCase
|
import com.tangem.domain.feedback.SendBackupProblemEmailUseCase
|
||||||
import com.tangem.domain.models.StatusSource
|
|
||||||
import com.tangem.domain.marketing.models.MarketingScreen
|
import com.tangem.domain.marketing.models.MarketingScreen
|
||||||
|
import com.tangem.domain.models.StatusSource
|
||||||
import com.tangem.domain.models.TokenReceiveNotification
|
import com.tangem.domain.models.TokenReceiveNotification
|
||||||
import com.tangem.domain.models.account.Account
|
import com.tangem.domain.models.account.Account
|
||||||
import com.tangem.domain.models.currency.CryptoCurrency
|
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.wallets.usecase.*
|
||||||
import com.tangem.domain.yield.supply.models.YieldSupplyRewardBalance
|
import com.tangem.domain.yield.supply.models.YieldSupplyRewardBalance
|
||||||
import com.tangem.domain.yield.supply.usecase.YieldSupplyGetRewardsBalanceUseCase
|
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.deeplink.TokenDetailsDeepLinkActionListener
|
||||||
import com.tangem.feature.tokendetails.domain.GetCurrencyWarningsUseCase
|
import com.tangem.feature.tokendetails.domain.GetCurrencyWarningsUseCase
|
||||||
import com.tangem.feature.tokendetails.presentation.router.InnerTokenDetailsRouter
|
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.QuickTopUpBlockFactory
|
||||||
import com.tangem.feature.tokendetails.presentation.tokendetails.state.factory.TokenDetailsStateFactory
|
import com.tangem.feature.tokendetails.presentation.tokendetails.state.factory.TokenDetailsStateFactory
|
||||||
import com.tangem.feature.tokendetails.presentation.tokendetails.state.transformer.*
|
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.ExpressTransactionsEvent
|
||||||
import com.tangem.features.tokendetails.ExpressTransactionsEventListener
|
import com.tangem.features.tokendetails.ExpressTransactionsEventListener
|
||||||
import com.tangem.features.tokendetails.TokenDetailsComponent
|
import com.tangem.features.tokendetails.TokenDetailsComponent
|
||||||
|
|
@ -826,7 +826,7 @@ internal class TokenDetailsModel @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSwapClick(unavailabilityReason: ScenarioUnavailabilityReason) {
|
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
|
MarketingDeeplink.EXTERNAL -> false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSwapFromClick(unavailabilityReason: ScenarioUnavailabilityReason) {
|
|
||||||
handleSwap(unavailabilityReason, AppRoute.Swap.CurrencyPosition.FROM, checkYieldSupply = true)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onSwapAndSendClick(unavailabilityReason: ScenarioUnavailabilityReason) {
|
override fun onSwapAndSendClick(unavailabilityReason: ScenarioUnavailabilityReason) {
|
||||||
if (handleUnavailabilityReason(unavailabilityReason = unavailabilityReason)) {
|
if (handleUnavailabilityReason(unavailabilityReason = unavailabilityReason)) {
|
||||||
return
|
return
|
||||||
|
|
@ -870,15 +866,7 @@ internal class TokenDetailsModel @Inject constructor(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSwapToClick(unavailabilityReason: ScenarioUnavailabilityReason) {
|
private fun handleSwap(unavailabilityReason: ScenarioUnavailabilityReason, checkYieldSupply: Boolean) {
|
||||||
handleSwap(unavailabilityReason, AppRoute.Swap.CurrencyPosition.TO, checkYieldSupply = false)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun handleSwap(
|
|
||||||
unavailabilityReason: ScenarioUnavailabilityReason,
|
|
||||||
currencyPosition: AppRoute.Swap.CurrencyPosition,
|
|
||||||
checkYieldSupply: Boolean,
|
|
||||||
) {
|
|
||||||
analyticsEventsHandler.send(
|
analyticsEventsHandler.send(
|
||||||
TokenScreenAnalyticsEvent.ButtonWithParams.ButtonExchange(
|
TokenScreenAnalyticsEvent.ButtonWithParams.ButtonExchange(
|
||||||
token = cryptoCurrency.symbol,
|
token = cryptoCurrency.symbol,
|
||||||
|
|
@ -906,7 +894,6 @@ internal class TokenDetailsModel @Inject constructor(
|
||||||
fromCryptoCurrency = cryptoCurrency,
|
fromCryptoCurrency = cryptoCurrency,
|
||||||
userWalletId = userWalletId,
|
userWalletId = userWalletId,
|
||||||
screenSource = AnalyticsParam.ScreensSources.Token.value,
|
screenSource = AnalyticsParam.ScreensSources.Token.value,
|
||||||
fromCurrencyPosition = currencyPosition,
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ internal class UpdateActionButtonsTransformer(
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
) ?: prev.swapButton.tangemIconUM,
|
) ?: prev.swapButton.tangemIconUM,
|
||||||
onClick = { clickIntents.onSwapFromClick(swapAction.unavailabilityReason) },
|
onClick = { clickIntents.onSwapClick(swapAction.unavailabilityReason) },
|
||||||
)
|
)
|
||||||
|
|
||||||
return prevState.copy(balanceBlockUM = prev.copyButtons(swapButton = updated))
|
return prevState.copy(balanceBlockUM = prev.copyButtons(swapButton = updated))
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ internal class UpdateAddFundsTransformer(
|
||||||
isEnabled = action.unavailabilityReason == ScenarioUnavailabilityReason.None,
|
isEnabled = action.unavailabilityReason == ScenarioUnavailabilityReason.None,
|
||||||
onClick = {
|
onClick = {
|
||||||
onActionDispatched()
|
onActionDispatched()
|
||||||
clickIntents.onSwapToClick(action.unavailabilityReason)
|
clickIntents.onSwapClick(action.unavailabilityReason)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ internal class UpdateTransferTransformer(
|
||||||
onClick = {
|
onClick = {
|
||||||
analyticsEventHandler.send(TransferAnalyticsEvent.ButtonSwap())
|
analyticsEventHandler.send(TransferAnalyticsEvent.ButtonSwap())
|
||||||
onActionDispatched()
|
onActionDispatched()
|
||||||
clickIntents.onSwapFromClick(action.unavailabilityReason)
|
clickIntents.onSwapClick(action.unavailabilityReason)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ internal class UpdateZeroBalanceActionsTransformer(
|
||||||
return prevState.copy(
|
return prevState.copy(
|
||||||
zeroBalanceActionsUM = ZeroBalanceActionsUM.Content(
|
zeroBalanceActionsUM = ZeroBalanceActionsUM.Content(
|
||||||
buy = buyAction?.toRow(onClick = clickIntents::onBuyClick),
|
buy = buyAction?.toRow(onClick = clickIntents::onBuyClick),
|
||||||
swap = swapAction?.toRow(onClick = clickIntents::onSwapToClick),
|
swap = swapAction?.toRow(onClick = clickIntents::onSwapClick),
|
||||||
receive = receiveAction?.toRow(
|
receive = receiveAction?.toRow(
|
||||||
onClick = clickIntents::onReceiveClick,
|
onClick = clickIntents::onReceiveClick,
|
||||||
onLongClick = { clickIntents.onCopyAddress() },
|
onLongClick = { clickIntents.onCopyAddress() },
|
||||||
|
|
|
||||||
|
|
@ -243,7 +243,7 @@ class UpdateAddFundsTransformerTest {
|
||||||
// THEN
|
// THEN
|
||||||
verifyOrder {
|
verifyOrder {
|
||||||
onActionDispatched.invoke()
|
onActionDispatched.invoke()
|
||||||
clickIntents.onSwapToClick(ScenarioUnavailabilityReason.None)
|
clickIntents.onSwapClick(ScenarioUnavailabilityReason.None)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -232,7 +232,7 @@ class UpdateTransferTransformerTest {
|
||||||
verifyOrder {
|
verifyOrder {
|
||||||
analyticsEventHandler.send(ofType<TransferAnalyticsEvent.ButtonSwap>())
|
analyticsEventHandler.send(ofType<TransferAnalyticsEvent.ButtonSwap>())
|
||||||
onActionDispatched.invoke()
|
onActionDispatched.invoke()
|
||||||
clickIntents.onSwapFromClick(ScenarioUnavailabilityReason.None)
|
clickIntents.onSwapClick(ScenarioUnavailabilityReason.None)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -127,7 +127,7 @@ class UpdateZeroBalanceActionsTransformerTest {
|
||||||
content.swap!!.onClick()
|
content.swap!!.onClick()
|
||||||
|
|
||||||
// THEN
|
// THEN
|
||||||
verify(exactly = 1) { clickIntents.onSwapToClick(ScenarioUnavailabilityReason.UsedOutdatedData) }
|
verify(exactly = 1) { clickIntents.onSwapClick(ScenarioUnavailabilityReason.UsedOutdatedData) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue