Created
December 16, 2022 18:25
-
-
Save MrNtlu/9d87c3385b40239546a452dd009eb45c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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