Updated on 2026-08-14

This commit is contained in:
Tangem 2025-12-08 22:25:17 +05:00
parent 5c93d3973a
commit 1e2ea28ff9
9 changed files with 61 additions and 21 deletions

View file

@ -84,6 +84,7 @@ internal class TangemPayDetailsComponent(
appComponentContext = context,
params = TangemPayTxHistoryDetailsComponent.Params(
transaction = navigation.transaction,
isBalanceHidden = navigation.isBalanceHidden,
userWalletId = params.userWalletId,
onDismiss = model.bottomSheetNavigation::dismiss,
),

View file

@ -1,10 +1,11 @@
package com.tangem.features.tangempay.components.txHistory
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.model.getOrCreateModel
import com.tangem.core.ui.decompose.ComposableBottomSheetComponent
import com.tangem.core.ui.extensions.*
import com.tangem.domain.models.wallet.UserWalletId
import com.tangem.domain.visa.model.TangemPayTxHistoryItem
import com.tangem.features.tangempay.model.TangemPayTxHistoryDetailsModel
@ -23,11 +24,13 @@ internal class TangemPayTxHistoryDetailsComponent(
@Composable
override fun BottomSheet() {
TangemPayTxHistoryDetailsContent(state = model.uiState)
val state by model.uiState.collectAsStateWithLifecycle()
TangemPayTxHistoryDetailsContent(state = state)
}
data class Params(
val transaction: TangemPayTxHistoryItem,
val isBalanceHidden: Boolean,
val userWalletId: UserWalletId,
val onDismiss: () -> Unit,
)

View file

@ -22,5 +22,8 @@ internal sealed class TangemPayDetailsNavigation {
) : TangemPayDetailsNavigation()
@Serializable
data class TransactionDetails(val transaction: TangemPayTxHistoryItem) : TangemPayDetailsNavigation()
data class TransactionDetails(
val transaction: TangemPayTxHistoryItem,
val isBalanceHidden: Boolean,
) : TangemPayDetailsNavigation()
}

View file

@ -8,6 +8,7 @@ import com.tangem.core.ui.extensions.TextReference
import kotlinx.collections.immutable.ImmutableList
internal data class TangemPayTxHistoryDetailsUM(
val isBalanceHidden: Boolean,
val title: TextReference,
val iconState: ImageReference,
val transactionTitle: TextReference,

View file

@ -373,7 +373,12 @@ internal class TangemPayDetailsModel @Inject constructor(
}
override fun onTransactionClick(item: TangemPayTxHistoryItem) {
bottomSheetNavigation.activate(TangemPayDetailsNavigation.TransactionDetails(item))
bottomSheetNavigation.activate(
configuration = TangemPayDetailsNavigation.TransactionDetails(
transaction = item,
isBalanceHidden = uiState.value.isBalanceHidden,
),
)
}
override fun onClickTermsAndLimits() {

View file

@ -5,6 +5,7 @@ import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.navigation.url.UrlOpener
import com.tangem.domain.balancehiding.GetBalanceHidingSettingsUseCase
import com.tangem.domain.feedback.GetWalletMetaInfoUseCase
import com.tangem.domain.feedback.SendFeedbackEmailUseCase
import com.tangem.domain.feedback.models.FeedbackEmailType
@ -14,39 +15,56 @@ import com.tangem.features.tangempay.components.txHistory.TangemPayTxHistoryDeta
import com.tangem.features.tangempay.entity.TangemPayTxHistoryDetailsUM
import com.tangem.features.tangempay.model.transformers.TangemPayTxHistoryDetailsConverter
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
import javax.inject.Inject
@Stable
@ModelScoped
@Suppress("LongParameterList")
internal class TangemPayTxHistoryDetailsModel @Inject constructor(
override val dispatchers: CoroutineDispatcherProvider,
private val getUserWalletsUseCase: GetWalletsUseCase,
private val getWalletMetaInfoUseCase: GetWalletMetaInfoUseCase,
private val sendFeedbackEmailUseCase: SendFeedbackEmailUseCase,
private val urlOpener: UrlOpener,
private val balanceHidingSettings: GetBalanceHidingSettingsUseCase,
paramsContainer: ParamsContainer,
) : Model() {
private val params = paramsContainer.require<TangemPayTxHistoryDetailsComponent.Params>()
val uiState: TangemPayTxHistoryDetailsUM = TangemPayTxHistoryDetailsConverter.convert(
TangemPayTxHistoryDetailsConverter.Input(
item = params.transaction,
onExplorerClick = ::openExplorer,
onDisputeClick = ::dispute,
onDismiss = ::dismiss,
),
)
val uiState: StateFlow<TangemPayTxHistoryDetailsUM>
field = MutableStateFlow(
value = TangemPayTxHistoryDetailsConverter.convert(
value = TangemPayTxHistoryDetailsConverter.Input(
item = params.transaction,
isBalanceHidden = params.isBalanceHidden,
onExplorerClick = ::openExplorer,
onDisputeClick = ::dispute,
onDismiss = ::dismiss,
),
),
)
init {
subscribeToBalanceHiding()
}
fun dismiss() {
params.onDismiss()
}
fun openExplorer(txHash: String?) {
private fun subscribeToBalanceHiding() {
balanceHidingSettings.isBalanceHidden()
.onEach { isBalanceHidden -> uiState.update { it.copy(isBalanceHidden = isBalanceHidden) } }
.launchIn(modelScope)
}
private fun openExplorer(txHash: String?) {
txHash?.let(urlOpener::openUrlExternalBrowser)
}
fun dispute() {
private fun dispute() {
modelScope.launch {
val userWalletId = params.userWalletId
val userWallet = getUserWalletsUseCase.invokeSync()

View file

@ -29,6 +29,7 @@ internal object TangemPayTxHistoryDetailsConverter :
override fun convert(value: Input): TangemPayTxHistoryDetailsUM {
val transaction = value.item
return TangemPayTxHistoryDetailsUM(
isBalanceHidden = value.isBalanceHidden,
title = transaction.extractDate(),
iconState = transaction.extractIcon(),
transactionTitle = transaction.extractTransactionTitle(),
@ -254,6 +255,7 @@ internal object TangemPayTxHistoryDetailsConverter :
data class Input(
val item: TangemPayTxHistoryItem,
val isBalanceHidden: Boolean,
val onExplorerClick: (String?) -> Unit,
val onDisputeClick: () -> Unit,
val onDismiss: () -> Unit,

View file

@ -77,7 +77,7 @@ internal fun TangemPayTxHistoryDetailsContent(state: TangemPayTxHistoryDetailsUM
)
Text(
modifier = Modifier.padding(top = 8.dp),
text = state.transactionAmount,
text = state.transactionAmount.orMaskWithStars(state.isBalanceHidden),
style = TangemTheme.typography.head,
color = state.transactionAmountColor.resolveReference(),
)
@ -158,6 +158,7 @@ private fun TangemPayTxHistoryDetailsContentPreview(
private class TangemPayTxHistoryDetailsUMProvider : CollectionPreviewParameterProvider<TangemPayTxHistoryDetailsUM>(
listOf(
TangemPayTxHistoryDetailsUM(
isBalanceHidden = true,
title = stringReference("12 June • 12:40"),
iconState = ImageReference.Res(R.drawable.ic_category_24),
transactionTitle = stringReference("Starbucks"),
@ -180,6 +181,7 @@ private class TangemPayTxHistoryDetailsUMProvider : CollectionPreviewParameterPr
dismiss = {},
),
TangemPayTxHistoryDetailsUM(
isBalanceHidden = true,
title = stringReference("12 June • 12:40"),
iconState = ImageReference.Res(R.drawable.ic_category_24),
transactionTitle = stringReference("Starbucks"),
@ -205,6 +207,7 @@ private class TangemPayTxHistoryDetailsUMProvider : CollectionPreviewParameterPr
dismiss = {},
),
TangemPayTxHistoryDetailsUM(
isBalanceHidden = false,
title = stringReference("12 June • 12:40"),
iconState = ImageReference.Res(R.drawable.ic_category_24),
transactionTitle = stringReference("Starbucks"),
@ -226,6 +229,7 @@ private class TangemPayTxHistoryDetailsUMProvider : CollectionPreviewParameterPr
dismiss = {},
),
TangemPayTxHistoryDetailsUM(
isBalanceHidden = false,
title = stringReference("12 June • 12:40"),
iconState = ImageReference.Res(R.drawable.ic_percent_24),
transactionTitle = stringReference("Fee"),
@ -248,6 +252,7 @@ private class TangemPayTxHistoryDetailsUMProvider : CollectionPreviewParameterPr
dismiss = {},
),
TangemPayTxHistoryDetailsUM(
isBalanceHidden = false,
title = stringReference("12 June • 12:40"),
iconState = ImageReference.Res(R.drawable.ic_arrow_down_24),
transactionTitle = stringReference("Deposit"),
@ -266,6 +271,7 @@ private class TangemPayTxHistoryDetailsUMProvider : CollectionPreviewParameterPr
dismiss = {},
),
TangemPayTxHistoryDetailsUM(
isBalanceHidden = false,
title = stringReference("12 June • 12:40"),
iconState = ImageReference.Res(R.drawable.ic_arrow_up_24),
transactionTitle = stringReference("Withdrawal"),