Created
November 18, 2024 15:13
-
-
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
This file contains hidden or 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
| 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