Updated on 2026-08-14
This commit is contained in:
parent
318d3edfa1
commit
0f3bca4b5b
6 changed files with 56 additions and 0 deletions
|
|
@ -23,6 +23,7 @@ import com.tangem.datasource.crypto.DataSignatureVerifier
|
|||
import com.tangem.domain.common.extensions.fromNetworkId
|
||||
import com.tangem.domain.common.util.derivationStyleProvider
|
||||
import com.tangem.domain.tokens.model.CryptoCurrency
|
||||
import com.tangem.domain.tokens.model.Network
|
||||
import com.tangem.domain.walletmanager.WalletManagersFacade
|
||||
import com.tangem.domain.wallets.legacy.WalletsStateHolder
|
||||
import com.tangem.domain.wallets.models.UserWalletId
|
||||
|
|
@ -310,6 +311,10 @@ internal class DefaultSwapRepository @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
override suspend fun getExistentialDeposit(userWalletId: UserWalletId, network: Network): BigDecimal? {
|
||||
return walletManagersFacade.getExistentialDeposit(userWalletId, network)
|
||||
}
|
||||
|
||||
private fun parseTxDetails(txDetailsJson: String): TxDetails? {
|
||||
return try {
|
||||
txDetailsMoshiAdapter.fromJson(txDetailsJson)
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.tangem.feature.swap.domain.api
|
|||
|
||||
import arrow.core.Either
|
||||
import com.tangem.domain.tokens.model.CryptoCurrency
|
||||
import com.tangem.domain.tokens.model.Network
|
||||
import com.tangem.domain.wallets.models.UserWalletId
|
||||
import com.tangem.feature.swap.domain.models.DataError
|
||||
import com.tangem.feature.swap.domain.models.domain.*
|
||||
|
|
@ -70,4 +71,6 @@ interface SwapRepository {
|
|||
): Either<DataError, SwapDataModel>
|
||||
|
||||
fun getNativeTokenForNetwork(networkId: String): CryptoCurrency
|
||||
|
||||
suspend fun getExistentialDeposit(userWalletId: UserWalletId, network: Network): BigDecimal?
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
package com.tangem.feature.swap.domain.models.domain
|
||||
|
||||
import java.math.BigDecimal
|
||||
|
||||
sealed class Warning {
|
||||
|
||||
data class ExistentialDepositWarning(val existentialDeposit: BigDecimal) : Warning()
|
||||
}
|
||||
|
|
@ -6,6 +6,7 @@ import com.tangem.feature.swap.domain.models.SwapAmount
|
|||
import com.tangem.feature.swap.domain.models.domain.IncludeFeeInAmount
|
||||
import com.tangem.feature.swap.domain.models.domain.PreparedSwapConfigState
|
||||
import com.tangem.feature.swap.domain.models.domain.SwapDataModel
|
||||
import com.tangem.feature.swap.domain.models.domain.Warning
|
||||
import java.math.BigDecimal
|
||||
|
||||
sealed interface SwapState {
|
||||
|
|
@ -25,6 +26,7 @@ sealed interface SwapState {
|
|||
val permissionState: PermissionDataState = PermissionDataState.Empty,
|
||||
val swapDataModel: SwapDataModel? = null,
|
||||
val txFee: TxFeeState,
|
||||
val warnings: List<Warning> = emptyList(),
|
||||
) : SwapState
|
||||
|
||||
data class EmptyAmountState(
|
||||
|
|
|
|||
|
|
@ -353,6 +353,16 @@ internal class SwapInteractorImpl @Inject constructor(
|
|||
)
|
||||
}
|
||||
|
||||
private suspend fun manageWarnings(fromToken: CryptoCurrency): List<Warning> {
|
||||
val userWalletId = getSelectedWallet()?.walletId ?: return emptyList()
|
||||
val existentialDeposit = repository.getExistentialDeposit(userWalletId, fromToken.network)
|
||||
val warnings = mutableListOf<Warning>()
|
||||
if (existentialDeposit != null) {
|
||||
warnings.add(Warning.ExistentialDepositWarning(existentialDeposit))
|
||||
}
|
||||
return warnings
|
||||
}
|
||||
|
||||
override suspend fun onSwap(
|
||||
swapProvider: SwapProvider,
|
||||
swapData: SwapDataModel?,
|
||||
|
|
@ -782,6 +792,8 @@ internal class SwapInteractorImpl @Inject constructor(
|
|||
swapData = null,
|
||||
txFeeState = txFee,
|
||||
exchangeProviderType = exchangeProviderType,
|
||||
).copy(
|
||||
warnings = manageWarnings(fromToken.currency),
|
||||
)
|
||||
|
||||
when (exchangeProviderType) {
|
||||
|
|
@ -939,6 +951,7 @@ internal class SwapInteractorImpl @Inject constructor(
|
|||
)
|
||||
swapState.copy(
|
||||
permissionState = PermissionDataState.Empty,
|
||||
warnings = manageWarnings(fromToken.currency),
|
||||
preparedSwapConfigState = PreparedSwapConfigState(
|
||||
isAllowedToSpend = true,
|
||||
isBalanceEnough = isBalanceIncludeFeeEnough,
|
||||
|
|
|
|||
|
|
@ -304,6 +304,7 @@ internal class StateBuilder(
|
|||
fromToken: CryptoCurrency,
|
||||
): List<SwapWarning> {
|
||||
val warnings = mutableListOf<SwapWarning>()
|
||||
addDomainWarnings(quoteModel, warnings)
|
||||
if (!quoteModel.preparedSwapConfigState.isAllowedToSpend &&
|
||||
quoteModel.preparedSwapConfigState.isFeeEnough &&
|
||||
quoteModel.permissionState is PermissionDataState.PermissionReadyForRequest
|
||||
|
|
@ -363,6 +364,30 @@ internal class StateBuilder(
|
|||
return warnings
|
||||
}
|
||||
|
||||
private fun addDomainWarnings(quoteModel: SwapState.QuotesLoadedState, warnings: MutableList<SwapWarning>) {
|
||||
quoteModel.warnings.forEach {
|
||||
when (it) {
|
||||
is Warning.ExistentialDepositWarning -> {
|
||||
warnings.add(
|
||||
SwapWarning.GeneralWarning(
|
||||
NotificationConfig(
|
||||
title = resourceReference(R.string.warning_existential_deposit_title),
|
||||
subtitle = resourceReference(
|
||||
R.string.warning_existential_deposit_message,
|
||||
wrappedList(
|
||||
quoteModel.fromTokenInfo.cryptoCurrencyStatus.currency.name,
|
||||
it.existentialDeposit.toPlainString(),
|
||||
),
|
||||
),
|
||||
iconResId = R.drawable.img_attention_20,
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun addUnableCoverFeeWarning(
|
||||
quoteModel: SwapState.QuotesLoadedState,
|
||||
fromToken: CryptoCurrency,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue