Updated on 2026-08-14
This commit is contained in:
parent
5c93d3973a
commit
1e2ea28ff9
9 changed files with 61 additions and 21 deletions
|
|
@ -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,
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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"),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue