Debanshu Datta
02/05/2025, 8:46 AMConcatAdapter(header, this, footer)
private fun getPagingFlow(
selected: SState,
listOfData: List<String>?
): Flow<PagingData<TDTO>> {
return Pager(
config = PagingConfig(
pageSize = 10,
prefetchDistance = 5,
enablePlaceholders = false,
initialLoadSize = 20
),
pagingSourceFactory = {
TPagingSource(
folioNumber = when (selected) {
SState.ALL -> null
is SState.OTHER -> {
listOfData?.getOrNull(selected.selection)
}
}
)
}
).flow
}
@OptIn(ExperimentalCoroutinesApi::class)
val transactionsFlow = _selection
.flatMapLatest { selected ->
getPagingFlow(selected, listOfFolio)
}.cachedIn(viewModelScope)
To consume in the FE
viewLifecycleOwner.lifecycleScope.launch {
viewModel.transactionsFlow.collectLatest { pagingData ->
tPagingAdapter.submitData(pagingData)
}
}
//aded custom. loader adapter
private fun <T : Any, V : RecyclerView.ViewHolder> PagingDataAdapter<T, V>.withLoadStateAdapters(
header: LoadStateAdapter<*>,
footer: LoadStateAdapter<*>
): ConcatAdapter {
addLoadStateListener { loadStates ->
header.loadState = loadStates.refresh
footer.loadState = loadStates.append
}
return ConcatAdapter(header, this, footer)
}