From bec533452908fbe7102a20a25f56231be16d9d2b Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 3 Feb 2026 11:12:10 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../model/CustomTokenFormModel.kt | 3 +- .../list/CustomTokenFormUseCasesFacade.kt | 48 +++++++++---------- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/CustomTokenFormModel.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/CustomTokenFormModel.kt index ff7a6c3c36..1ce00a7b83 100644 --- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/CustomTokenFormModel.kt +++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/CustomTokenFormModel.kt @@ -55,7 +55,8 @@ internal class CustomTokenFormModel @Inject constructor( private val params: CustomTokenFormComponent.Params = paramsContainer.require() private var createdCurrency: CryptoCurrency? = null - private var useCasesFacade: CustomTokenFormUseCasesFacade = customTokenFormUseCasesFacadeFactory.create(params.mode) + private val useCasesFacade: CustomTokenFormUseCasesFacade = + customTokenFormUseCasesFacadeFactory.create(params.mode.userWalletId) private val customCurrencyValidator = CustomCurrencyValidator( userWalletId = params.mode.userWalletId, useCasesFacade = useCasesFacade, diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/list/CustomTokenFormUseCasesFacade.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/list/CustomTokenFormUseCasesFacade.kt index 4d2071cf69..51a46bd0e0 100644 --- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/list/CustomTokenFormUseCasesFacade.kt +++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/list/CustomTokenFormUseCasesFacade.kt @@ -18,9 +18,9 @@ import com.tangem.domain.models.account.AccountId import com.tangem.domain.models.account.DerivationIndex import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.models.network.Network +import com.tangem.domain.models.wallet.UserWalletId import com.tangem.domain.tokens.AddCryptoCurrenciesUseCase import com.tangem.domain.wallets.usecase.DerivePublicKeysUseCase -import com.tangem.features.managetokens.component.AddCustomTokenMode import com.tangem.lib.crypto.derivation.AccountNodeRecognizer import dagger.assisted.Assisted import dagger.assisted.AssistedFactory @@ -29,7 +29,7 @@ import timber.log.Timber @Suppress("LongParameterList") internal class CustomTokenFormUseCasesFacade @AssistedInject constructor( - @Assisted private val mode: AddCustomTokenMode, + @Assisted private val userWalletId: UserWalletId, private val addCryptoCurrenciesUseCase: AddCryptoCurrenciesUseCase, private val derivePublicKeysUseCase: DerivePublicKeysUseCase, private val checkIsCurrencyNotAddedUseCase: CheckIsCurrencyNotAddedUseCase, @@ -39,26 +39,24 @@ internal class CustomTokenFormUseCasesFacade @AssistedInject constructor( private val accountsFeatureToggles: AccountsFeatureToggles, ) { - suspend fun addCryptoCurrenciesUseCase(currency: CryptoCurrency): Either = when (mode) { - is AddCustomTokenMode.Account -> either { - val accountId = getAccountId(currency) + suspend fun addCryptoCurrenciesUseCase(currency: CryptoCurrency): Either { + return if (accountsFeatureToggles.isFeatureEnabled) { + either { + val accountId = getAccountId(currency) - manageCryptoCurrenciesUseCase(accountId = accountId, add = currency).bind() - } - is AddCustomTokenMode.Wallet -> { - addCryptoCurrenciesUseCase.invoke( - userWalletId = mode.userWalletId, - currency = currency, - ) + manageCryptoCurrenciesUseCase(accountId = accountId, add = currency).bind() + } + } else { + addCryptoCurrenciesUseCase.invoke(userWalletId = userWalletId, currency = currency) } } - suspend fun derivePublicKeysUseCase(currencies: List): Either = when (mode) { - is AddCustomTokenMode.Account -> Unit.right() - is AddCustomTokenMode.Wallet -> derivePublicKeysUseCase.invoke( - userWalletId = mode.userWalletId, - currencies = currencies, - ) + suspend fun derivePublicKeysUseCase(currencies: List): Either { + return if (accountsFeatureToggles.isFeatureEnabled) { + Unit.right() + } else { + derivePublicKeysUseCase.invoke(userWalletId = userWalletId, currencies = currencies) + } } suspend fun checkIsCurrencyNotAddedUseCase( @@ -67,7 +65,7 @@ internal class CustomTokenFormUseCasesFacade @AssistedInject constructor( contractAddress: String?, ): Either = if (accountsFeatureToggles.isFeatureEnabled) { getAccountCurrencyStatusUseCase.invokeSync( - userWalletId = mode.userWalletId, + userWalletId = userWalletId, networkId = networkId, derivationPath = derivationPath, contractAddress = contractAddress, @@ -76,7 +74,7 @@ internal class CustomTokenFormUseCasesFacade @AssistedInject constructor( .right() } else { checkIsCurrencyNotAddedUseCase.invoke( - userWalletId = mode.userWalletId, + userWalletId = userWalletId, networkId = networkId, derivationPath = derivationPath, contractAddress = contractAddress, @@ -85,15 +83,15 @@ internal class CustomTokenFormUseCasesFacade @AssistedInject constructor( private suspend fun Raise.getAccountId(currency: CryptoCurrency): AccountId { val accountList = singleAccountListSupplier.getSyncOrNull( - params = SingleAccountListProducer.Params(userWalletId = mode.userWalletId), + params = SingleAccountListProducer.Params(userWalletId = userWalletId), ) ensureNotNull(accountList) { - IllegalStateException("Account list not found: ${mode.userWalletId}") + IllegalStateException("Account list not found: $userWalletId") } if (accountList.activeAccounts == 1) { - return AccountId.forMainCryptoPortfolio(userWalletId = mode.userWalletId) + return AccountId.forMainCryptoPortfolio(userWalletId = userWalletId) } val currencyAccountIndex = currency.getAccountIndex().bind() @@ -104,7 +102,7 @@ internal class CustomTokenFormUseCasesFacade @AssistedInject constructor( cryptoPortfolioAccount?.derivationIndex?.value == currencyAccountIndex } - return account?.accountId ?: AccountId.forMainCryptoPortfolio(userWalletId = mode.userWalletId) + return account?.accountId ?: AccountId.forMainCryptoPortfolio(userWalletId = userWalletId) } private fun CryptoCurrency.getAccountIndex(): Either = either { @@ -140,6 +138,6 @@ internal class CustomTokenFormUseCasesFacade @AssistedInject constructor( @AssistedFactory interface Factory { - fun create(mode: AddCustomTokenMode): CustomTokenFormUseCasesFacade + fun create(userWalletId: UserWalletId): CustomTokenFormUseCasesFacade } } \ No newline at end of file