Updated on 2026-08-14
This commit is contained in:
parent
50286e2558
commit
08023dffac
3 changed files with 47 additions and 22 deletions
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ internal class ManageTokensListManager @Inject constructor(
|
|||
dispatchers = dispatchers,
|
||||
actions = this,
|
||||
scopeProvider = Provider { scope },
|
||||
sourceProvider = Provider { source },
|
||||
clipboardManager = clipboardManager,
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue