Skip to content

Instantly share code, notes, and snippets.

@MrNtlu
Created December 16, 2022 18:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MrNtlu/9d87c3385b40239546a452dd009eb45c to your computer and use it in GitHub Desktop.
Save MrNtlu/9d87c3385b40239546a452dd009eb45c to your computer and use it in GitHub Desktop.
@HiltViewModel
class NewsManuelPagingViewModel @Inject constructor(
private val repository: NewsManuelPagingRepository,
): ViewModel() {
val newsList = mutableStateListOf<Article>()
private var page by mutableStateOf(1)
var canPaginate by mutableStateOf(false)
var listState by mutableStateOf(ListState.IDLE)
init {
getNews()
}
fun getNews() = viewModelScope.launch {
if (page == 1 || (page != 1 && canPaginate) && listState == ListState.IDLE) {
listState = if (page == 1) ListState.LOADING else ListState.PAGINATING
repository.getNews(page).collect() {
if (it.status == "ok") {
canPaginate = it.articles.size == 20
if (page == 1) {
newsList.clear()
newsList.addAll(it.articles)
} else {
newsList.addAll(it.articles)
}
listState = ListState.IDLE
if (canPaginate)
page++
} else {
listState = if (page == 1) ListState.ERROR else ListState.PAGINATION_EXHAUST
}
}
}
}
override fun onCleared() {
page = 1
listState = ListState.IDLE
canPaginate = false
super.onCleared()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment