Updated on 2026-08-14
This commit is contained in:
parent
1aee06ae82
commit
2de45591bd
3 changed files with 61 additions and 2 deletions
|
|
@ -63,6 +63,7 @@ import com.tangem.features.onramp.tokenlist.entity.TokenListUMController
|
|||
import com.tangem.features.onramp.tokenlist.entity.TokenListUMTransformer
|
||||
import com.tangem.features.onramp.tokenlist.entity.transformer.*
|
||||
import com.tangem.features.onramp.tokenlist.entity.utils.OnrampTokenItemStateConverterFactory
|
||||
import com.tangem.features.onramp.utils.ClearSearchBarTransformer
|
||||
import com.tangem.features.onramp.utils.UpdateSearchBarActiveStateTransformer
|
||||
import com.tangem.features.onramp.utils.UpdateSearchBarCallbacksTransformer
|
||||
import com.tangem.features.onramp.utils.UpdateSearchQueryTransformer
|
||||
|
|
@ -163,6 +164,7 @@ internal class AvailableSwapPairsModel @Inject constructor(
|
|||
}
|
||||
|
||||
initializeSearchBarCallbacks()
|
||||
subscribeOnSelectedStatusChange()
|
||||
subscribeOnAvailablePairsUpdates()
|
||||
|
||||
if (swapFeatureToggles.isMarketListFeatureEnabled) {
|
||||
|
|
@ -195,6 +197,13 @@ internal class AvailableSwapPairsModel @Inject constructor(
|
|||
.shareIn(scope = modelScope, started = SharingStarted.Eagerly, replay = 1)
|
||||
}
|
||||
|
||||
private fun subscribeOnSelectedStatusChange() {
|
||||
params.selectedStatus
|
||||
.filter { it == null }
|
||||
.onEach { clearSearchState() }
|
||||
.launchIn(modelScope)
|
||||
}
|
||||
|
||||
private fun initializeSearchBarCallbacks() {
|
||||
tokenListUMController.update(
|
||||
transformer = UpdateSearchBarCallbacksTransformer(
|
||||
|
|
@ -575,9 +584,22 @@ internal class AvailableSwapPairsModel @Inject constructor(
|
|||
isSearched = state.value.searchBarUM.query.isNotEmpty(),
|
||||
),
|
||||
)
|
||||
clearSearchState()
|
||||
params.onTokenClick(tokenItem, status)
|
||||
}
|
||||
|
||||
private fun clearSearchState() {
|
||||
tokenListUMController.update(
|
||||
transformer = ClearSearchBarTransformer(
|
||||
placeHolder = resourceReference(id = R.string.common_search),
|
||||
),
|
||||
)
|
||||
modelScope.launch {
|
||||
searchManager.update("")
|
||||
}
|
||||
searchQueryStateForMarkets.value = ""
|
||||
}
|
||||
|
||||
private fun CryptoCurrencyStatus.toLeastTokenInfo(): LeastTokenInfo {
|
||||
return LeastTokenInfo(
|
||||
contractAddress = (currency as? CryptoCurrency.Token)?.contractAddress ?: "0",
|
||||
|
|
@ -695,6 +717,8 @@ internal class AvailableSwapPairsModel @Inject constructor(
|
|||
),
|
||||
)
|
||||
|
||||
clearSearchState()
|
||||
|
||||
// Trigger re-fetch of available pairs (clears cache + re-enters collectLatest)
|
||||
refreshPairsTrigger.emit(Unit)
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.tangem.common.ui.notifications.NotificationUM
|
|||
import com.tangem.core.decompose.model.Model
|
||||
import com.tangem.core.decompose.model.ParamsContainer
|
||||
import com.tangem.core.ui.components.fields.InputManager
|
||||
import com.tangem.core.ui.components.token.state.TokenItemState
|
||||
import com.tangem.core.ui.extensions.TextReference
|
||||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles
|
||||
|
|
@ -36,6 +37,7 @@ import com.tangem.features.onramp.swap.entity.AccountCurrencyUM
|
|||
import com.tangem.features.onramp.tokenlist.OnrampTokenListComponent
|
||||
import com.tangem.features.onramp.tokenlist.entity.*
|
||||
import com.tangem.features.onramp.tokenlist.entity.transformer.*
|
||||
import com.tangem.features.onramp.utils.ClearSearchBarTransformer
|
||||
import com.tangem.features.onramp.utils.UpdateSearchBarActiveStateTransformer
|
||||
import com.tangem.features.onramp.utils.UpdateSearchBarCallbacksTransformer
|
||||
import com.tangem.features.onramp.utils.UpdateSearchQueryTransformer
|
||||
|
|
@ -120,7 +122,7 @@ internal class OnrampTokenListModel @Inject constructor(
|
|||
|
||||
UpdateTokenItemsTransformer(
|
||||
appCurrency = appCurrency,
|
||||
onItemClick = params.onTokenClick,
|
||||
onItemClick = ::onTokenClick,
|
||||
statuses = filterByQueryTokenList.let { statuses ->
|
||||
if (hasRestrictionForSell || isInsufficientBalanceForSell) {
|
||||
mapOf(false to statuses)
|
||||
|
|
@ -174,7 +176,7 @@ internal class OnrampTokenListModel @Inject constructor(
|
|||
updateTokenListUM(
|
||||
UpdateAccountTokenListTransformer(
|
||||
appCurrency = appCurrency,
|
||||
onItemClick = params.onTokenClick,
|
||||
onItemClick = ::onTokenClick,
|
||||
accountList = filterByQueryAccountList.filterByAvailability(),
|
||||
isBalanceHidden = isBalanceHidden,
|
||||
unavailableErrorText = getUnavailableTokensHeaderReference(),
|
||||
|
|
@ -275,6 +277,22 @@ internal class OnrampTokenListModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun onTokenClick(tokenItemState: TokenItemState, status: CryptoCurrencyStatus) {
|
||||
clearSearchState()
|
||||
params.onTokenClick(tokenItemState, status)
|
||||
}
|
||||
|
||||
private fun clearSearchState() {
|
||||
tokenListUMController.update(
|
||||
transformer = ClearSearchBarTransformer(
|
||||
placeHolder = resourceReference(id = R.string.common_search),
|
||||
),
|
||||
)
|
||||
modelScope.launch {
|
||||
searchManager.update("")
|
||||
}
|
||||
}
|
||||
|
||||
private fun onSearchQueryChange(newQuery: String) {
|
||||
val searchBar = state.value.searchBarUM
|
||||
if (searchBar.query == newQuery) return
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
package com.tangem.features.onramp.utils
|
||||
|
||||
import com.tangem.core.ui.components.fields.entity.SearchBarUM
|
||||
import com.tangem.core.ui.extensions.TextReference
|
||||
|
||||
internal class ClearSearchBarTransformer(
|
||||
private val placeHolder: TextReference,
|
||||
) : SearchBarUMTransformer() {
|
||||
|
||||
override fun transform(prevState: SearchBarUM): SearchBarUM {
|
||||
return prevState.copy(
|
||||
query = "",
|
||||
isActive = false,
|
||||
placeholderText = placeHolder,
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue