diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/states/TokensListStateHolder.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/states/TokensListStateHolder.kt index 101cdc8f52..bf48a93269 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/states/TokensListStateHolder.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/states/TokensListStateHolder.kt @@ -96,5 +96,6 @@ internal sealed interface TokensListStateHolder { override val tokens: Flow>, override val onTokensLoadStateChanged: (LoadState) -> Unit, val onSaveButtonClick: () -> Unit, + val isSavingInProgress: Boolean, ) : TokensListStateHolder } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt index 3dff613b36..70335b9609 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt @@ -29,7 +29,10 @@ import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.TextUnitType import androidx.compose.ui.unit.dp import androidx.paging.PagingData -import androidx.paging.compose.* +import androidx.paging.compose.LazyPagingItems +import androidx.paging.compose.collectAsLazyPagingItems +import androidx.paging.compose.itemContentType +import androidx.paging.compose.itemKey import com.tangem.core.ui.components.PrimaryButton import com.tangem.core.ui.res.TangemTheme import com.tangem.tap.features.tokens.impl.presentation.states.TokenItemState @@ -63,10 +66,11 @@ internal fun TokensListScreen(stateHolder: TokensListStateHolder, modifier: Modi val verticalPadding = TangemTheme.dimens.spacing32 SaveChangesButton( - onClick = stateHolder.onSaveButtonClick, modifier = Modifier.onSizeChanged { with(density) { floatingButtonHeight = it.height.toDp() + verticalPadding } }, + showProgress = stateHolder.isSavingInProgress, + onClick = stateHolder.onSaveButtonClick, ) } }, @@ -176,13 +180,14 @@ private fun DifferentAddressesWarning() { } @Composable -private fun SaveChangesButton(onClick: () -> Unit, modifier: Modifier = Modifier) { +private fun SaveChangesButton(showProgress: Boolean, onClick: () -> Unit, modifier: Modifier = Modifier) { PrimaryButton( modifier = modifier .imePadding() .padding(horizontal = TangemTheme.dimens.spacing16) .fillMaxWidth(), text = stringResource(id = R.string.common_save_changes), + showProgress = showProgress, onClick = onClick, ) } @@ -237,6 +242,7 @@ private class TokensListScreenProvider : CollectionPreviewParameterProvider) { diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt index 0853b72b8f..2464c82a17 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt @@ -11,6 +11,8 @@ import androidx.lifecycle.viewModelScope import androidx.paging.* import com.tangem.blockchain.common.Blockchain import com.tangem.core.analytics.api.AnalyticsEventHandler +import com.tangem.core.navigation.AppScreen +import com.tangem.core.navigation.NavigationAction import com.tangem.core.ui.extensions.getActiveIconRes import com.tangem.core.ui.extensions.getGreyedOutIconRes import com.tangem.domain.card.DerivePublicKeysUseCase @@ -24,6 +26,7 @@ import com.tangem.domain.tokens.AddCryptoCurrenciesUseCase import com.tangem.domain.tokens.GetCryptoCurrenciesUseCase import com.tangem.domain.tokens.TokenWithBlockchain import com.tangem.domain.wallets.usecase.GetSelectedWalletSyncUseCase +import com.tangem.tap.common.extensions.dispatchWithMain import com.tangem.tap.common.extensions.fullNameWithoutTestnet import com.tangem.tap.common.extensions.getNetworkName import com.tangem.tap.features.tokens.impl.domain.TokensListInteractor @@ -122,6 +125,7 @@ internal class TokensListViewModel @Inject constructor( isDifferentAddressesBlockVisible = isDifferentAddressesBlockVisible(), tokens = getInitialTokensList(), onTokensLoadStateChanged = actionsHandler::onTokensLoadStateChanged, + isSavingInProgress = false, onSaveButtonClick = actionsHandler::onSaveButtonClick, ) } else { @@ -308,13 +312,20 @@ internal class TokensListViewModel @Inject constructor( } fun onSaveButtonClick() { + val state = uiState as? TokensListStateHolder.ManageContent ?: return + analyticsSender.sendWhenSaveButtonClicked() viewModelScope.launch(dispatchers.main) { + uiState = state.copy(isSavingInProgress = true) + tokensListMigration.onSaveButtonClick( changedTokensList = changedTokensList, changedBlockchainList = changedBlockchainList, ) + + uiState = state.copy(isSavingInProgress = false) + store.dispatchWithMain(NavigationAction.PopBackTo(screen = AppScreen.Wallet)) } }