Updated on 2026-08-14
This commit is contained in:
parent
c8006eddda
commit
9c52a130c4
25 changed files with 199 additions and 131 deletions
|
|
@ -3,7 +3,7 @@ package com.tangem.feature.swap.domain
|
|||
import com.tangem.domain.tokens.model.Network
|
||||
import com.tangem.domain.tokens.repository.CurrenciesRepository
|
||||
import com.tangem.domain.wallets.models.UserWallet
|
||||
import com.tangem.domain.wallets.usecase.GetSelectedWalletUseCase
|
||||
import com.tangem.domain.wallets.usecase.GetSelectedWalletSyncUseCase
|
||||
import com.tangem.feature.swap.domain.cache.SwapDataCache
|
||||
import com.tangem.feature.swap.domain.converters.SwapCurrencyConverter
|
||||
import com.tangem.feature.swap.domain.models.SwapAmount
|
||||
|
|
@ -31,7 +31,7 @@ internal class SwapInteractorImpl @Inject constructor(
|
|||
private val allowPermissionsHandler: AllowPermissionsHandler,
|
||||
private val currenciesRepository: CurrenciesRepository,
|
||||
private val walletFeatureToggles: WalletFeatureToggles,
|
||||
private val getSelectedWalletUseCase: GetSelectedWalletUseCase,
|
||||
private val getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase,
|
||||
) : SwapInteractor {
|
||||
|
||||
private val swapCurrencyConverter = SwapCurrencyConverter()
|
||||
|
|
@ -268,7 +268,7 @@ internal class SwapInteractorImpl @Inject constructor(
|
|||
|
||||
private suspend fun onSuccessNewFlow(currency: Currency) {
|
||||
val network = network ?: return
|
||||
getSelectedWalletUseCase().fold(
|
||||
getSelectedWalletSyncUseCase().fold(
|
||||
ifRight = { userWallet ->
|
||||
getAndAddCryptoCurrency(userWallet, currency, network)
|
||||
},
|
||||
|
|
@ -344,7 +344,7 @@ internal class SwapInteractorImpl @Inject constructor(
|
|||
}
|
||||
|
||||
private suspend fun isAllowedToSpend(networkId: String, fromToken: Currency, amount: SwapAmount): Boolean {
|
||||
return getSelectedWalletUseCase().fold(
|
||||
return getSelectedWalletSyncUseCase().fold(
|
||||
ifRight = { userWallet ->
|
||||
val allowance = repository.getAllowance(
|
||||
userWallet.walletId,
|
||||
|
|
@ -737,7 +737,7 @@ internal class SwapInteractorImpl @Inject constructor(
|
|||
fromToken: Currency,
|
||||
swapAmount: SwapAmount? = null,
|
||||
): String {
|
||||
return getSelectedWalletUseCase().fold(
|
||||
return getSelectedWalletSyncUseCase().fold(
|
||||
ifRight = { userWallet ->
|
||||
repository.getApproveData(
|
||||
userWalletId = userWallet.walletId,
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package com.tangem.feature.swap.domain.di
|
|||
|
||||
import com.tangem.domain.tokens.repository.CurrenciesRepository
|
||||
import com.tangem.domain.wallets.legacy.WalletsStateHolder
|
||||
import com.tangem.domain.wallets.usecase.GetSelectedWalletUseCase
|
||||
import com.tangem.domain.wallets.usecase.GetSelectedWalletSyncUseCase
|
||||
import com.tangem.feature.swap.domain.*
|
||||
import com.tangem.feature.swap.domain.cache.SwapDataCacheImpl
|
||||
import com.tangem.features.wallet.featuretoggles.WalletFeatureToggles
|
||||
|
|
@ -27,7 +27,7 @@ class SwapDomainModule {
|
|||
transactionManager: TransactionManager,
|
||||
currenciesRepository: CurrenciesRepository,
|
||||
walletFeatureToggles: WalletFeatureToggles,
|
||||
@SwapScope getSelectedWalletUseCase: GetSelectedWalletUseCase,
|
||||
@SwapScope getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase,
|
||||
): SwapInteractor {
|
||||
return SwapInteractorImpl(
|
||||
transactionManager = transactionManager,
|
||||
|
|
@ -37,7 +37,7 @@ class SwapDomainModule {
|
|||
allowPermissionsHandler = AllowPermissionsHandlerImpl(),
|
||||
currenciesRepository = currenciesRepository,
|
||||
walletFeatureToggles = walletFeatureToggles,
|
||||
getSelectedWalletUseCase = getSelectedWalletUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -52,8 +52,8 @@ class SwapDomainModule {
|
|||
@SwapScope
|
||||
@Provides
|
||||
@Singleton
|
||||
fun providesGetSelectedWalletUseCase(walletsStateHolder: WalletsStateHolder): GetSelectedWalletUseCase {
|
||||
return GetSelectedWalletUseCase(walletsStateHolder = walletsStateHolder)
|
||||
fun providesGetSelectedWalletUseCase(walletsStateHolder: WalletsStateHolder): GetSelectedWalletSyncUseCase {
|
||||
return GetSelectedWalletSyncUseCase(walletsStateHolder = walletsStateHolder)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ internal class WalletViewModel @Inject constructor(
|
|||
// region Parameters
|
||||
private val getWalletsUseCase: GetWalletsUseCase,
|
||||
private val saveWalletUseCase: SaveWalletUseCase,
|
||||
getSelectedWalletUseCase: GetSelectedWalletUseCase,
|
||||
getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase,
|
||||
private val selectWalletUseCase: SelectWalletUseCase,
|
||||
private val updateWalletUseCase: UpdateWalletUseCase,
|
||||
private val deleteWalletUseCase: DeleteWalletUseCase,
|
||||
|
|
@ -181,7 +181,7 @@ internal class WalletViewModel @Inject constructor(
|
|||
|
||||
private val walletsUpdateActionResolver = WalletsUpdateActionResolver(
|
||||
currentStateProvider = Provider { uiState },
|
||||
getSelectedWalletUseCase = getSelectedWalletUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
)
|
||||
|
||||
override fun onCreate(owner: LifecycleOwner) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package com.tangem.feature.wallet.presentation.wallet.viewmodels
|
|||
import com.tangem.common.Provider
|
||||
import com.tangem.domain.wallets.models.UserWallet
|
||||
import com.tangem.domain.wallets.models.UserWalletId
|
||||
import com.tangem.domain.wallets.usecase.GetSelectedWalletUseCase
|
||||
import com.tangem.domain.wallets.usecase.GetSelectedWalletSyncUseCase
|
||||
import com.tangem.feature.wallet.presentation.wallet.domain.getCardsCount
|
||||
import com.tangem.feature.wallet.presentation.wallet.state.WalletLockedState
|
||||
import com.tangem.feature.wallet.presentation.wallet.state.WalletState
|
||||
|
|
@ -12,12 +12,12 @@ import com.tangem.feature.wallet.presentation.wallet.state.components.WalletCard
|
|||
/**
|
||||
* Resolver that determines which update action will be performed
|
||||
*
|
||||
* @property currentStateProvider current state provider
|
||||
* @property getSelectedWalletUseCase use case that returns selected wallet
|
||||
* @property currentStateProvider current state provider
|
||||
* @property getSelectedWalletSyncUseCase use case that returns selected wallet
|
||||
*/
|
||||
internal class WalletsUpdateActionResolver(
|
||||
private val currentStateProvider: Provider<WalletState>,
|
||||
private val getSelectedWalletUseCase: GetSelectedWalletUseCase,
|
||||
private val getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase,
|
||||
) {
|
||||
|
||||
fun resolve(wallets: List<UserWallet>): Action {
|
||||
|
|
@ -38,7 +38,7 @@ internal class WalletsUpdateActionResolver(
|
|||
private fun List<UserWallet>.getSelectedWallet(): UserWallet {
|
||||
val hasUnlockedWallet = any { !it.isLocked }
|
||||
return if (hasUnlockedWallet) {
|
||||
val selectedWalletId = getSelectedWalletUseCase().fold(ifLeft = ::error, ifRight = UserWallet::walletId)
|
||||
val selectedWalletId = getSelectedWalletSyncUseCase().fold(ifLeft = ::error, ifRight = UserWallet::walletId)
|
||||
|
||||
firstOrNull { it.walletId == selectedWalletId }
|
||||
?: error("Wallets don't contain a wallet with id: $selectedWalletId")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue