Updated on 2026-08-14

This commit is contained in:
Tangem 2025-06-09 16:31:31 +03:00
parent a46867e2e9
commit ce86d3f87c
3 changed files with 52 additions and 11 deletions

View file

@ -21,8 +21,10 @@ internal class PreviewDetailsComponent : DetailsComponent {
router = DummyRouter(),
).buildAll(
isWalletConnectAvailable = true,
isSupportChatAvailable = true,
userWalletId = UserWalletId(""),
onSupportClick = {},
onSupportEmailClick = {},
onSupportChatClick = {},
onBuyClick = {},
)
}

View file

@ -2,6 +2,7 @@ package com.tangem.features.details.model
import android.content.res.Resources
import arrow.core.getOrElse
import com.tangem.common.routing.AppRoute
import com.tangem.core.analytics.AppInstanceIdProvider
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
@ -14,6 +15,7 @@ import com.tangem.domain.feedback.GetCardInfoUseCase
import com.tangem.domain.feedback.SendFeedbackEmailUseCase
import com.tangem.domain.feedback.models.CardInfo
import com.tangem.domain.feedback.models.FeedbackEmailType
import com.tangem.domain.feedback.repository.FeedbackFeatureToggles
import com.tangem.domain.redux.LegacyAction
import com.tangem.domain.redux.ReduxStateHolder
import com.tangem.domain.walletconnect.CheckIsWalletConnectAvailableUseCase
@ -57,6 +59,7 @@ internal class DetailsModel @Inject constructor(
private val getCardInfoUseCase: GetCardInfoUseCase,
private val sendFeedbackEmailUseCase: SendFeedbackEmailUseCase,
private val getWalletsUseCase: GetWalletsUseCase,
private val feedbackFeatureToggles: FeedbackFeatureToggles,
override val dispatchers: CoroutineDispatcherProvider,
) : Model() {
@ -82,8 +85,10 @@ internal class DetailsModel @Inject constructor(
items = MutableStateFlow(
itemsBuilder.buildAll(
isWalletConnectAvailable = isWalletConnectAvailable,
isSupportChatAvailable = feedbackFeatureToggles.isUsedeskEnabled,
userWalletId = params.userWalletId,
onSupportClick = ::sendFeedback,
onSupportEmailClick = ::sendFeedback,
onSupportChatClick = ::openUseDesk,
onBuyClick = ::onBuyClick,
),
)
@ -134,6 +139,16 @@ internal class DetailsModel @Inject constructor(
}
}
private fun openUseDesk() {
val scanResponse =
getSelectedWalletSyncUseCase().getOrNull()?.requireColdWallet()?.scanResponse // TODO [REDACTED_TASK_KEY]
?: error("Selected wallet is null")
val cardInfo = getCardInfoUseCase(scanResponse).getOrNull() ?: return
router.push(AppRoute.Usedesk(cardInfo))
}
private fun showFeedbackEmailTypeOptionBS(selectedCardInfo: CardInfo) {
state.update {
it.copy(

View file

@ -13,22 +13,30 @@ import com.tangem.features.details.impl.R
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
import kotlinx.collections.immutable.toPersistentList
import javax.inject.Inject
@ModelScoped
internal class ItemsBuilder @Inject constructor(private val router: Router) {
@Suppress("LongParameterList")
fun buildAll(
isWalletConnectAvailable: Boolean,
isSupportChatAvailable: Boolean,
userWalletId: UserWalletId,
onSupportClick: () -> Unit,
onSupportEmailClick: () -> Unit,
onSupportChatClick: () -> Unit,
onBuyClick: () -> Unit,
): ImmutableList<DetailsItemUM> = buildList {
buildWalletConnectBlock(isWalletConnectAvailable, userWalletId)?.let(::add)
buildUserWalletListBlock().let(::add)
buildShopBlock(onBuyClick).let(::add)
buildSettingsBlock().let(::add)
buildSupportBlock(onSupportClick).let(::add)
buildSupportBlock(
onSupportEmailClick = onSupportEmailClick,
onSupportChatClick = onSupportChatClick,
isSupportChatAvailable = isSupportChatAvailable,
).let(::add)
}.toImmutableList()
private fun buildWalletConnectBlock(isWalletConnectAvailable: Boolean, userWalletId: UserWalletId): DetailsItemUM? {
@ -82,17 +90,33 @@ internal class ItemsBuilder @Inject constructor(private val router: Router) {
}.toImmutableList(),
)
private fun buildSupportBlock(onClick: () -> Unit): DetailsItemUM = DetailsItemUM.Basic(
private fun buildSupportBlock(
onSupportEmailClick: () -> Unit,
onSupportChatClick: () -> Unit,
isSupportChatAvailable: Boolean,
): DetailsItemUM = DetailsItemUM.Basic(
id = "support",
items = persistentListOf(
items = buildList {
DetailsItemUM.Basic.Item(
id = "send_feedback",
id = "support_email",
block = BlockUM(
text = resourceReference(R.string.details_row_title_contact_to_support),
iconRes = R.drawable.ic_comment_24,
onClick = onClick,
onClick = onSupportEmailClick,
),
),
).let(::add)
if (isSupportChatAvailable) {
DetailsItemUM.Basic.Item(
id = "support_chat",
block = BlockUM(
text = resourceReference(R.string.details_row_title_contact_to_support_chat),
iconRes = R.drawable.ic_chat_24,
onClick = onSupportChatClick,
),
).let(::add)
}
DetailsItemUM.Basic.Item(
id = "disclaimer",
block = BlockUM(
@ -100,7 +124,7 @@ internal class ItemsBuilder @Inject constructor(private val router: Router) {
iconRes = R.drawable.ic_text_24,
onClick = { router.push(AppRoute.Disclaimer(isTosAccepted = true)) },
),
),
),
).let(::add)
}.toPersistentList(),
)
}