Updated on 2026-08-14
This commit is contained in:
parent
2d37fbccaf
commit
db9ff3fc1c
3 changed files with 34 additions and 11 deletions
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue