Updated on 2026-08-14
This commit is contained in:
parent
0b78c692ee
commit
16ebea436f
10 changed files with 101 additions and 79 deletions
|
|
@ -99,7 +99,6 @@ internal class DefaultSearchComponent(
|
|||
params = SearchTokenSelectorComponent.Params(
|
||||
entries = config.entries,
|
||||
appCurrency = config.appCurrency,
|
||||
isBalanceHidden = config.isBalanceHidden,
|
||||
onTokenSelected = config.onTokenSelected,
|
||||
onDismiss = config.onDismiss,
|
||||
),
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ internal sealed interface SearchBottomSheetRoute {
|
|||
data class TokenSelector(
|
||||
val entries: List<UserAssetEntry>,
|
||||
val appCurrency: AppCurrency,
|
||||
val isBalanceHidden: Boolean,
|
||||
val onTokenSelected: (UserAssetEntry) -> Unit,
|
||||
val onDismiss: () -> Unit,
|
||||
) : SearchBottomSheetRoute
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ internal class SearchTokenSelectorComponent @AssistedInject constructor(
|
|||
data class Params(
|
||||
val entries: List<UserAssetEntry>,
|
||||
val appCurrency: AppCurrency,
|
||||
val isBalanceHidden: Boolean,
|
||||
val onTokenSelected: (UserAssetEntry) -> Unit,
|
||||
val onDismiss: () -> Unit,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -229,7 +229,6 @@ internal class SearchModel @Inject constructor(
|
|||
SearchBottomSheetRoute.TokenSelector(
|
||||
entries = grouped.entries,
|
||||
appCurrency = currentAppCurrency.value,
|
||||
isBalanceHidden = isBalanceHidden.value,
|
||||
onTokenSelected = ::onTokenSelectedFromGroup,
|
||||
onDismiss = { bottomSheetNavigation.dismiss() },
|
||||
),
|
||||
|
|
|
|||
|
|
@ -6,25 +6,31 @@ import com.tangem.common.ui.userwallet.converter.WalletIconUMConverter
|
|||
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.ui.ds.image.DeviceIconUM
|
||||
import com.tangem.domain.balancehiding.GetBalanceHidingSettingsUseCase
|
||||
import com.tangem.domain.common.wallets.UserWalletsListRepository
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
import com.tangem.domain.wallets.usecase.GetWalletIconUseCase
|
||||
import com.tangem.features.feed.components.search.SearchTokenSelectorComponent
|
||||
import com.tangem.features.feed.model.search.state.TokenSelectorStateController
|
||||
import com.tangem.features.feed.model.search.state.transformers.BuildTokenSelectorSectionsTransformer
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.flow.filterNotNull
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
@Suppress("LongParameterList")
|
||||
@Stable
|
||||
@ModelScoped
|
||||
internal class SearchTokenSelectorModel @Inject constructor(
|
||||
override val dispatchers: CoroutineDispatcherProvider,
|
||||
paramsContainer: ParamsContainer,
|
||||
getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase,
|
||||
userWalletsListRepository: UserWalletsListRepository,
|
||||
private val stateController: TokenSelectorStateController,
|
||||
private val userWalletsListRepository: UserWalletsListRepository,
|
||||
private val getWalletIconUseCase: GetWalletIconUseCase,
|
||||
private val walletIconUMConverter: WalletIconUMConverter,
|
||||
) : Model() {
|
||||
|
|
@ -35,25 +41,37 @@ internal class SearchTokenSelectorModel @Inject constructor(
|
|||
get() = stateController.uiState
|
||||
|
||||
init {
|
||||
modelScope.launch(dispatchers.default) {
|
||||
val requiredWalletIds = params.entries.map { it.userWalletId }.toSet()
|
||||
val walletIcons = userWalletsListRepository.userWallets
|
||||
.filterNotNull()
|
||||
.first()
|
||||
.filter { it.walletId in requiredWalletIds }
|
||||
.associate { wallet ->
|
||||
wallet.walletId to walletIconUMConverter.convert(getWalletIconUseCase(wallet))
|
||||
}
|
||||
val requiredWalletIds = params.entries.map { it.userWalletId }.toSet()
|
||||
val walletIconsFlow = userWalletsListRepository.userWallets
|
||||
.filterNotNull()
|
||||
.map { wallets ->
|
||||
wallets
|
||||
.filter { it.walletId in requiredWalletIds }
|
||||
.associate { wallet ->
|
||||
wallet.walletId to walletIconUMConverter.convert(getWalletIconUseCase(wallet))
|
||||
}
|
||||
}
|
||||
|
||||
stateController.update(
|
||||
BuildTokenSelectorSectionsTransformer(
|
||||
entries = params.entries,
|
||||
appCurrency = params.appCurrency,
|
||||
isBalanceHidden = params.isBalanceHidden,
|
||||
walletIcons = walletIcons,
|
||||
onTokenSelected = params.onTokenSelected,
|
||||
),
|
||||
)
|
||||
modelScope.launch(dispatchers.default) {
|
||||
combine(
|
||||
walletIconsFlow,
|
||||
getBalanceHidingSettingsUseCase.isBalanceHidden(),
|
||||
::Pair,
|
||||
).collect { (walletIcons, isBalanceHidden) ->
|
||||
rebuildSections(isBalanceHidden, walletIcons)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun rebuildSections(isBalanceHidden: Boolean, walletIcons: Map<UserWalletId, DeviceIconUM>) {
|
||||
stateController.update(
|
||||
BuildTokenSelectorSectionsTransformer(
|
||||
entries = params.entries,
|
||||
appCurrency = params.appCurrency,
|
||||
isBalanceHidden = isBalanceHidden,
|
||||
walletIcons = walletIcons,
|
||||
onTokenSelected = params.onTokenSelected,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue