Updated on 2026-08-14

This commit is contained in:
Tangem 2025-12-16 16:10:57 +04:00
parent 7e02e72a40
commit c2e67ba6bc
41 changed files with 863 additions and 119 deletions

View file

@ -20,6 +20,7 @@ import com.tangem.domain.feedback.models.FeedbackEmailType
import com.tangem.domain.feedback.models.WalletMetaInfo
import com.tangem.domain.feedback.repository.FeedbackFeatureToggles
import com.tangem.domain.models.wallet.UserWallet
import com.tangem.domain.pay.TangemPayEligibilityManager
import com.tangem.domain.redux.LegacyAction
import com.tangem.domain.redux.ReduxStateHolder
import com.tangem.domain.walletconnect.CheckIsWalletConnectAvailableUseCase
@ -34,6 +35,7 @@ import com.tangem.features.details.entity.SelectEmailFeedbackTypeBS
import com.tangem.features.details.utils.ItemsBuilder
import com.tangem.features.details.utils.SocialsBuilder
import com.tangem.features.hotwallet.HotWalletFeatureToggles
import com.tangem.features.tangempay.TangemPayFeatureToggles
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import com.tangem.utils.version.AppVersionProvider
import kotlinx.collections.immutable.ImmutableList
@ -51,7 +53,7 @@ import javax.inject.Inject
@Suppress("LongParameterList")
internal class DetailsModel @Inject constructor(
socialsBuilder: SocialsBuilder,
itemsBuilder: ItemsBuilder,
private val itemsBuilder: ItemsBuilder,
private val appVersionProvider: AppVersionProvider,
private val checkIsWalletConnectAvailableUseCase: CheckIsWalletConnectAvailableUseCase,
private val router: Router,
@ -68,6 +70,8 @@ internal class DetailsModel @Inject constructor(
private val generateBuyTangemCardLinkUseCase: GenerateBuyTangemCardLinkUseCase,
private val hotWalletFeatureToggles: HotWalletFeatureToggles,
private val analyticsEventHandler: AnalyticsEventHandler,
private val tangemPayEligibilityManager: TangemPayEligibilityManager,
private val tangemPayFeatureToggles: TangemPayFeatureToggles,
) : Model() {
private val params: DetailsComponent.Params = paramsContainer.require()
@ -100,6 +104,8 @@ internal class DetailsModel @Inject constructor(
),
)
addTangemPayItemIfEligible()
state = MutableStateFlow(
value = DetailsUM(
items = items.value,
@ -239,6 +245,16 @@ internal class DetailsModel @Inject constructor(
}
}
private fun addTangemPayItemIfEligible() {
if (!tangemPayFeatureToggles.isTangemPayEnabled) return
modelScope.launch {
val isEligible = tangemPayEligibilityManager.getEligibleWallets().isNotEmpty()
if (isEligible) {
items.update { itemsBuilder.addVisaItem(it) }
}
}
}
private fun getAppVersion(): String = "${appVersionProvider.versionName} (${appVersionProvider.versionCode})"
private suspend fun buildBuyLink(): String {

View file

@ -37,6 +37,17 @@ internal class ItemsBuilder @Inject constructor(private val router: Router) {
).let(::add)
}.toImmutableList()
fun addVisaItem(items: ImmutableList<DetailsItemUM>): ImmutableList<DetailsItemUM> {
return items.toMutableList().map { block ->
if (block.id == "shop" && block is DetailsItemUM.Basic) {
val newItems = block.items.toMutableList().apply { add(getVisaItem()) }
block.copy(items = newItems.toImmutableList())
} else {
block
}
}.toImmutableList()
}
private fun buildWalletConnectBlock(isWalletConnectAvailable: Boolean, userWalletId: UserWalletId): DetailsItemUM? {
return if (isWalletConnectAvailable) {
DetailsItemUM.WalletConnect(
@ -114,4 +125,15 @@ internal class ItemsBuilder @Inject constructor(private val router: Router) {
).let(::add)
}.toPersistentList(),
)
private fun getVisaItem(): DetailsItemUM.Basic.Item = DetailsItemUM.Basic.Item(
id = "get_tangem_visa",
block = BlockUM(
text = resourceReference(R.string.details_get_visa),
iconRes = R.drawable.ic_tangem_pay_24,
onClick = {
router.push(AppRoute.TangemPayOnboarding(AppRoute.TangemPayOnboarding.Mode.FromBannerInSettings))
},
),
)
}