Updated on 2026-08-14

This commit is contained in:
Tangem 2025-08-28 20:56:12 +05:00
parent ad6d1d5b1e
commit fb53c32a6a
8 changed files with 69 additions and 5 deletions

View file

@ -72,6 +72,7 @@ internal class SendConfirmComponent(
userWalletId = params.userWallet.walletId,
cryptoCurrency = params.cryptoCurrencyStatus.currency,
cryptoCurrencyStatusFlow = params.cryptoCurrencyStatusFlow,
isBalanceHidingFlow = params.isBalanceHidingFlow,
),
onResult = model::onAmountResult,
onClick = model::showEditAmount,

View file

@ -28,6 +28,7 @@ import com.tangem.domain.feedback.models.FeedbackEmailType
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.wallet.UserWallet
import com.tangem.domain.models.wallet.requireColdWallet
import com.tangem.domain.balancehiding.GetBalanceHidingSettingsUseCase
import com.tangem.domain.settings.IsSendTapHelpEnabledUseCase
import com.tangem.domain.settings.NeverShowTapHelpUseCase
import com.tangem.domain.tokens.AddCryptoCurrenciesUseCase
@ -105,6 +106,7 @@ internal class SendConfirmModel @Inject constructor(
private val feeSelectorReloadTrigger: FeeSelectorReloadTrigger,
private val feeReloadTrigger: SendFeeReloadTrigger,
private val sendAmountReduceTrigger: SendAmountReduceTrigger,
private val getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase,
sendBalanceUpdaterFactory: SendBalanceUpdater.Factory,
) : Model(), SendConfirmClickIntents, FeeSelectorModelCallback, SendNotificationsComponent.ModelCallback {
@ -121,6 +123,9 @@ internal class SendConfirmModel @Inject constructor(
private val _uiState = MutableStateFlow(params.state)
val uiState = _uiState.asStateFlow()
val isBalanceHiddenFlow: StateFlow<Boolean>
field = MutableStateFlow(false)
private val amountState
get() = uiState.value.amountUM as? AmountState.Data
private val destinationUM
@ -164,6 +169,7 @@ internal class SendConfirmModel @Inject constructor(
subscribeOnNotificationsUpdateTrigger()
subscribeOnCheckFeeResultUpdates()
initialState()
subscribeOnBalanceHidden()
}
fun updateState(state: SendUM) {
@ -519,6 +525,16 @@ internal class SendConfirmModel @Inject constructor(
}.launchIn(modelScope)
}
private fun subscribeOnBalanceHidden() {
getBalanceHidingSettingsUseCase()
.conflate()
.distinctUntilChanged()
.onEach { balanceHidingSettings ->
isBalanceHiddenFlow.update { balanceHidingSettings.isBalanceHidden }
}
.launchIn(modelScope)
}
private fun updateConfirmNotifications() {
modelScope.launch {
notificationsUpdateTrigger.triggerUpdate(

View file

@ -21,6 +21,7 @@ internal sealed class SendAmountComponentParams {
abstract val isRedesignEnabled: Boolean
abstract val cryptoCurrency: CryptoCurrency
abstract val cryptoCurrencyStatusFlow: StateFlow<CryptoCurrencyStatus>
abstract val isBalanceHidingFlow: StateFlow<Boolean>
data class AmountParams(
override val state: AmountState,
@ -31,9 +32,9 @@ internal sealed class SendAmountComponentParams {
override val isRedesignEnabled: Boolean,
override val cryptoCurrency: CryptoCurrency,
override val cryptoCurrencyStatusFlow: StateFlow<CryptoCurrencyStatus>,
override val isBalanceHidingFlow: StateFlow<Boolean>,
val callback: ModelCallback,
val currentRoute: StateFlow<CommonSendRoute>,
val isBalanceHidingFlow: StateFlow<Boolean>,
) : SendAmountComponentParams()
data class AmountBlockParams(
@ -45,6 +46,7 @@ internal sealed class SendAmountComponentParams {
override val isRedesignEnabled: Boolean,
override val cryptoCurrency: CryptoCurrency,
override val cryptoCurrencyStatusFlow: StateFlow<CryptoCurrencyStatus>,
override val isBalanceHidingFlow: StateFlow<Boolean>,
val userWallet: UserWallet,
val blockClickEnableFlow: StateFlow<Boolean>,
) : SendAmountComponentParams()

View file

@ -102,6 +102,7 @@ internal class SendAmountModel @Inject constructor(
subscribeOnAmountReduceToTriggerUpdates()
subscribeOnAmountIgnoreReduceTriggerUpdates()
subscribeOnAmountUpdateTriggerUpdates()
subscribeOnBalanceHiddenUpdates()
}
private fun initAppCurrency() {
@ -119,6 +120,20 @@ internal class SendAmountModel @Inject constructor(
}.launchIn(modelScope)
}
private fun subscribeOnBalanceHiddenUpdates() {
params.isBalanceHidingFlow.onEach { isBalanceHidden ->
_uiState.update(
AmountBoundaryUpdateTransformer(
cryptoCurrencyStatus = cryptoCurrencyStatus,
maxEnterAmount = maxAmountBoundary,
appCurrency = appCurrency,
isRedesignEnabled = sendFeatureToggles.isSendRedesignEnabled,
isBalanceHidden = params.isBalanceHidingFlow.value,
),
)
}.launchIn(modelScope)
}
private fun subscribeOnCryptoCurrencyStatusFlow() {
params.cryptoCurrencyStatusFlow
.onEach { newCryptoCurrencyStatus ->
@ -150,6 +165,7 @@ internal class SendAmountModel @Inject constructor(
maxEnterAmount = maxAmountBoundary,
appCurrency = appCurrency,
isRedesignEnabled = sendFeatureToggles.isSendRedesignEnabled,
isBalanceHidden = params.isBalanceHidingFlow.value,
),
)
} else {
@ -168,6 +184,7 @@ internal class SendAmountModel @Inject constructor(
maxEnterAmount = maxAmountBoundary,
iconStateConverter = CryptoCurrencyToIconStateConverter(),
isRedesignEnabled = sendFeatureToggles.isSendRedesignEnabled,
isBalanceHidden = params.isBalanceHidingFlow.value,
).convert(
AmountParameters(
title = resourceReference(

View file

@ -131,6 +131,7 @@ internal class SwapAmountModel @Inject constructor(
subscribeOnAmountReduceByTriggerUpdates()
subscribeOnAmountIgnoreReduceTriggerUpdates()
subscribeOnReloadQuotesTriggerUpdates()
subscribeOnBalanceHiddenUpdates()
}
fun onStart() {
@ -322,6 +323,25 @@ internal class SwapAmountModel @Inject constructor(
)
}
private fun subscribeOnBalanceHiddenUpdates() {
params.isBalanceHidingFlow.onEach {
val primaryCryptoCurrencyStatus = (uiState.value as? SwapAmountUM.Content)?.primaryCryptoCurrencyStatus
if (primaryCryptoCurrencyStatus != null) {
uiState.transformerUpdate(
SwapAmountPrimaryReadyStateTransformer(
userWallet = userWallet,
primaryCryptoCurrencyStatus = primaryCryptoCurrencyStatus,
appCurrency = appCurrency,
swapDirection = swapDirection,
clickIntents = this,
isBalanceHidden = params.isBalanceHidingFlow.value,
showBestRateAnimation = showBestRateAnimation,
),
)
}
}.launchIn(modelScope)
}
private fun confirmSendWithSwapClose() {
val amountParams = params as? SwapAmountComponentParams.AmountParams ?: return
val amountFieldData = uiState.value.primaryAmount.amountField as? AmountState.Data

View file

@ -48,6 +48,7 @@ internal class SwapAmountFieldConverter(
maxEnterAmount = maxEnterAmountConverter.convert(cryptoCurrencyStatus),
iconStateConverter = iconStateConverter,
isRedesignEnabled = true,
isBalanceHidden = isBalanceHidden,
).convert(
AmountParameters(
title = combinedReference(