Skip to content

Instantly share code, notes, and snippets.

@zainalfh
Created November 18, 2024 15:13
Show Gist options
  • Select an option

  • Save zainalfh/aec0b354732598c7b200ff4468082318 to your computer and use it in GitHub Desktop.

Select an option

Save zainalfh/aec0b354732598c7b200ff4468082318 to your computer and use it in GitHub Desktop.
its simple generator pagination. will generate something like this : 1,2,3,4,...,1239
import kotlin.math.min
/**
* Created by Zainal on 14/11/2024 - 09:15
*/
object PaginationHelper{
private const val pageSize = 10
private fun getTotalPages(totalItems :Int): Int {
return (totalItems + pageSize - 1) / pageSize
}
fun getPageNumbers(
totalItems: Int,
currentPage: Int): List<String> {
val totalPages = getTotalPages(totalItems)
var pageNumbers = mutableListOf<String>()
val diff = (currentPage-1) / 5
Timber.d("diff=$diff")
val indexCorrection = 5 * diff
// Add first 5 pages
var startIndex = 1
var indexMax = 5
if (currentPage>5 && indexCorrection>0){
startIndex += indexCorrection
indexMax += indexCorrection
}
//Timber.d("currentPage=$currentPage | startIndex=$startIndex | indexMax=$indexMax")
if (totalPages>4 && currentPage in totalPages-4 .. totalPages) {
for (i in totalPages-4.. totalPages) {
val element = i.toString()
pageNumbers.add(element)
}
} else {
for (i in startIndex..min(indexMax, totalPages)) {
val element = i.toString()
pageNumbers.add(element)
}
}
// Add "..." if necessary
if (totalPages > 5 ) {
//Timber.d("check=${pageNumbers.joinToString ("," )}")
// if 1k digit, page number should not more than 3 page
if (currentPage.toString().length >= 4 && currentPage!=totalPages){
if (pageNumbers.size > 3) {
pageNumbers = if (pageNumbers.indexOf("$currentPage")<3){
pageNumbers.take(3).toMutableList()
} else {
pageNumbers.takeLast(3).toMutableList()
}
}
}
//Timber.i("after=${pageNumbers.joinToString(",")}")
if (currentPage in 11.. totalPages) {
pageNumbers.add(0,"1")
pageNumbers.add(1,"...")
}
// Add last page
val lastPage = totalPages.toString()
if (!pageNumbers.contains(lastPage)) {
if (currentPage != totalPages) {
pageNumbers.add("...")
}
pageNumbers.add(lastPage)
}
}
return pageNumbers
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment