diff --git a/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/model/TxHistoryModel.kt b/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/model/TxHistoryModel.kt index fc7568fafc..56d8cee0b8 100644 --- a/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/model/TxHistoryModel.kt +++ b/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/model/TxHistoryModel.kt @@ -23,6 +23,7 @@ import com.tangem.features.txhistory.entity.TxHistoryUM import com.tangem.features.txhistory.entity.TxHistoryUpdateListener import com.tangem.features.txhistory.utils.TxHistoryListManager import com.tangem.features.txhistory.utils.TxHistoryUiActions +import com.tangem.pagination.PaginationStatus import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf @@ -76,6 +77,9 @@ internal class TxHistoryModel @Inject constructor( txHistoryListManager.uiItems .onEach { updateState(it) } .launchIn(modelScope) + txHistoryListManager.paginationStatus + .onEach { paginationStatus -> handlePaginationStatus(paginationStatus) } + .launchIn(modelScope) } private fun subscribeToUpdateListener() { @@ -136,14 +140,24 @@ internal class TxHistoryModel @Inject constructor( } } + private fun handlePaginationStatus(status: PaginationStatus<*>) { + _uiState.update { state -> + when (status) { + is PaginationStatus.InitialLoadingError -> getErrorState(state.isBalanceHidden) + PaginationStatus.EndOfPagination, + PaginationStatus.InitialLoading, + PaginationStatus.NextBatchLoading, + PaginationStatus.None, + is PaginationStatus.Paginating<*>, + -> state + } + } + } + private fun handleErrorState(error: TxHistoryStateError) { _uiState.update { state -> when (error) { - is TxHistoryStateError.DataError -> TxHistoryUM.Error( - isBalanceHidden = state.isBalanceHidden, - onReloadClick = ::reload, - onExploreClick = ::openExplorer, - ) + is TxHistoryStateError.DataError -> getErrorState(isBalanceHidden = state.isBalanceHidden) TxHistoryStateError.EmptyTxHistories -> TxHistoryUM.Empty( isBalanceHidden = state.isBalanceHidden, onExploreClick = ::openExplorer, @@ -157,6 +171,14 @@ internal class TxHistoryModel @Inject constructor( } } + private fun getErrorState(isBalanceHidden: Boolean): TxHistoryUM.Error { + return TxHistoryUM.Error( + isBalanceHidden = isBalanceHidden, + onReloadClick = ::reload, + onExploreClick = ::openExplorer, + ) + } + private fun getLoadingState(isBalanceHidden: Boolean): TxHistoryUM.Loading { return TxHistoryUM.Loading(isBalanceHidden = isBalanceHidden, onExploreClick = ::openExplorer) } diff --git a/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/utils/TxHistoryListManager.kt b/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/utils/TxHistoryListManager.kt index 3998d36595..ce0556b4d9 100644 --- a/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/utils/TxHistoryListManager.kt +++ b/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/utils/TxHistoryListManager.kt @@ -44,6 +44,7 @@ internal class TxHistoryListManager( ) val uiItems: Flow> = uiManager.items + val paginationStatus: Flow> = state.map { it.status }.distinctUntilChanged() suspend fun init() = coroutineScope { val batchFlow = repository.getTxHistoryBatchFlow( diff --git a/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/utils/TxHistoryUiManager.kt b/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/utils/TxHistoryUiManager.kt index c04a88819e..a283b3a4bb 100644 --- a/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/utils/TxHistoryUiManager.kt +++ b/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/utils/TxHistoryUiManager.kt @@ -10,11 +10,7 @@ import com.tangem.pagination.PaginationStatus import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.filter -import kotlinx.coroutines.flow.mapLatest +import kotlinx.coroutines.flow.* import java.util.UUID internal class TxHistoryUiManager( @@ -26,7 +22,11 @@ internal class TxHistoryUiManager( @OptIn(ExperimentalCoroutinesApi::class) val items: Flow> = state // filter initial states, since we dont emit loading items as UI items - .filter { it.status !is PaginationStatus.None && it.status !is PaginationStatus.InitialLoading } + .filter { + it.status !is PaginationStatus.None && + it.status !is PaginationStatus.InitialLoading && + it.status !is PaginationStatus.InitialLoadingError + } .mapLatest { state -> state.uiBatches.asSequence() .flatMap { it.data }