Updated on 2026-08-14

This commit is contained in:
Tangem 2024-10-25 13:47:10 +05:00
parent 50286e2558
commit 08023dffac
3 changed files with 47 additions and 22 deletions

View file

@ -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),

View file

@ -68,6 +68,7 @@ internal class ManageTokensListManager @Inject constructor(
dispatchers = dispatchers,
actions = this,
scopeProvider = Provider { scope },
sourceProvider = Provider { source },
clipboardManager = clipboardManager,
)

View file

@ -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<ManageTokensListState>,
private val messageSender: UiMessageSender,
private val dispatchers: CoroutineDispatcherProvider,
private val scopeProvider: Provider<CoroutineScope>,
private val sourceProvider: Provider<ManageTokensSource>,
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<ImmutableList<CurrencyItemUM>> = 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)
}