From 2de45591bd784bd5b69aff06bad3955a4d3d95b0 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 27 Feb 2026 16:14:42 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../model/AvailableSwapPairsModel.kt | 24 +++++++++++++++++++ .../tokenlist/model/OnrampTokenListModel.kt | 22 +++++++++++++++-- .../onramp/utils/ClearSearchBarTransformer.kt | 17 +++++++++++++ 3 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/utils/ClearSearchBarTransformer.kt diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/availablepairs/model/AvailableSwapPairsModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/availablepairs/model/AvailableSwapPairsModel.kt index 72fd13b5bb..5457e2c0fe 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/availablepairs/model/AvailableSwapPairsModel.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/swap/availablepairs/model/AvailableSwapPairsModel.kt @@ -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) diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/model/OnrampTokenListModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/model/OnrampTokenListModel.kt index a90f9e6e25..9d1a10ff99 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/model/OnrampTokenListModel.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/tokenlist/model/OnrampTokenListModel.kt @@ -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 diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/utils/ClearSearchBarTransformer.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/utils/ClearSearchBarTransformer.kt new file mode 100644 index 0000000000..e38f56cf73 --- /dev/null +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/utils/ClearSearchBarTransformer.kt @@ -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, + ) + } +} \ No newline at end of file