Updated on 2026-08-14

This commit is contained in:
Tangem 2025-05-27 11:30:14 +03:00
parent 2d37fbccaf
commit db9ff3fc1c
3 changed files with 34 additions and 11 deletions

View file

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

View file

@ -44,6 +44,7 @@ internal class TxHistoryListManager(
)
val uiItems: Flow<ImmutableList<TxHistoryUM.TxHistoryItemUM>> = uiManager.items
val paginationStatus: Flow<PaginationStatus<*>> = state.map { it.status }.distinctUntilChanged()
suspend fun init() = coroutineScope {
val batchFlow = repository.getTxHistoryBatchFlow(

View file

@ -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<ImmutableList<TxHistoryUM.TxHistoryItemUM>> = 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 }