From 08023dffac3f89afc9450ec558368dbaec7f6272 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 25 Oct 2024 13:47:10 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../model/OnboardingManageTokensModel.kt | 15 ++++-- .../utils/list/ManageTokensListManager.kt | 1 + .../utils/list/ManageTokensUiManager.kt | 53 +++++++++++++------ 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/OnboardingManageTokensModel.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/OnboardingManageTokensModel.kt index 4c3c730ef6..6b4e801849 100644 --- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/OnboardingManageTokensModel.kt +++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/OnboardingManageTokensModel.kt @@ -61,9 +61,11 @@ internal class OnboardingManageTokensModel @Inject constructor( .onEach { status -> updatePaginationStatus(status) } .launchIn(modelScope) - manageTokensListManager.currenciesToAdd - .onEach(::handleNewAddedCurrencies) - .launchIn(modelScope) + combine( + manageTokensListManager.currenciesToAdd, + manageTokensListManager.currenciesToRemove, + ::handleChangedCurrencies, + ).launchIn(modelScope) observeSearchQueryChanges() @@ -192,8 +194,11 @@ internal class OnboardingManageTokensModel @Inject constructor( state.update { state -> state.copy(scrollToTop = consumedEvent()) } } - private suspend fun handleNewAddedCurrencies(currenciesToAdd: ChangedCurrencies) { - if (currenciesToAdd.isEmpty()) { + private suspend fun handleChangedCurrencies( + currenciesToAdd: ChangedCurrencies, + currenciesToRemove: ChangedCurrencies, + ) { + if (currenciesToAdd.isEmpty() && currenciesToRemove.isEmpty()) { state.update { state -> state.copy( actionButtonConfig = OnboardingManageTokensUM.ActionButtonConfig.Later(onClick = ::onLaterClick), diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/list/ManageTokensListManager.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/list/ManageTokensListManager.kt index 551debff20..414fd1161a 100644 --- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/list/ManageTokensListManager.kt +++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/list/ManageTokensListManager.kt @@ -68,6 +68,7 @@ internal class ManageTokensListManager @Inject constructor( dispatchers = dispatchers, actions = this, scopeProvider = Provider { scope }, + sourceProvider = Provider { source }, clipboardManager = clipboardManager, ) diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/list/ManageTokensUiManager.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/list/ManageTokensUiManager.kt index 167a7f88a7..8ed4841f87 100644 --- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/list/ManageTokensUiManager.kt +++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/list/ManageTokensUiManager.kt @@ -10,6 +10,7 @@ import com.tangem.core.ui.message.SnackbarMessage import com.tangem.domain.managetokens.model.CurrencyUnsupportedState import com.tangem.domain.managetokens.model.ManagedCryptoCurrency import com.tangem.domain.tokens.model.Network +import com.tangem.features.managetokens.component.ManageTokensSource import com.tangem.features.managetokens.entity.item.CurrencyItemUM import com.tangem.features.managetokens.impl.R import com.tangem.features.managetokens.ui.dialog.CurrencyUnsupportedDialog @@ -29,11 +30,13 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch +@Suppress("LongParameterList") internal class ManageTokensUiManager( private val state: MutableStateFlow, private val messageSender: UiMessageSender, private val dispatchers: CoroutineDispatcherProvider, private val scopeProvider: Provider, + private val sourceProvider: Provider, private val actions: ManageTokensUiActions, private val clipboardManager: ClipboardManager, ) { @@ -41,6 +44,9 @@ internal class ManageTokensUiManager( private val scope: CoroutineScope get() = scopeProvider() + private val source: ManageTokensSource + get() = sourceProvider() + @OptIn(ExperimentalCoroutinesApi::class) val items: Flow> = state .mapLatest { state -> @@ -225,26 +231,39 @@ internal class ManageTokensUiManager( } else { actions.checkHasLinkedTokens(userWalletId, network) } + val canHideWithoutConfirming = source == ManageTokensSource.ONBOARDING - val message = ContentMessage { onDismiss -> - if (hasLinkedTokens) { - HasLinkedTokensWarning( - currency = currency, - network = network, - onDismiss = onDismiss, - ) - } else { - HideTokenWarning( - currency = currency, - onConfirm = { - onConfirm() - onDismiss() - }, - onDismiss = onDismiss, - ) - } + if (hasLinkedTokens) { + showLinkedTokensWarning(currency, network) + } else if (canHideWithoutConfirming) { + onConfirm() + } else { + showHideTokenWarning(currency, onConfirm) } + } + private fun showLinkedTokensWarning(currency: ManagedCryptoCurrency, network: Network) { + val message = ContentMessage { onDismiss -> + HasLinkedTokensWarning( + currency = currency, + network = network, + onDismiss = onDismiss, + ) + } + messageSender.send(message) + } + + private fun showHideTokenWarning(currency: ManagedCryptoCurrency, onConfirm: () -> Unit) { + val message = ContentMessage { onDismiss -> + HideTokenWarning( + currency = currency, + onConfirm = { + onConfirm() + onDismiss() + }, + onDismiss = onDismiss, + ) + } messageSender.send(message) }