mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2024-12-04 16:00:10 +00:00
Compare commits
4 Commits
eea645c865
...
6331f13e9a
Author | SHA1 | Date | |
---|---|---|---|
6331f13e9a | |||
5213a2ff8e | |||
087d7452fd | |||
703094c924 |
@ -3,7 +3,7 @@
|
||||
## 0.11.14
|
||||
|
||||
* `Pagination`:
|
||||
* `PaginationResult` got new field `objectsCount` which by default is a times between `pagesNumber` and `size`
|
||||
* `PaginationResult` got new field `objectsNumber` which by default is a times between `pagesNumber` and `size`
|
||||
|
||||
## 0.11.13
|
||||
|
||||
|
@ -1,24 +1,60 @@
|
||||
package dev.inmo.micro_utils.pagination
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.*
|
||||
import kotlin.math.ceil
|
||||
|
||||
/**
|
||||
* @param page Current page number
|
||||
* @param size Current page size. It can be greater than size of [results]
|
||||
* @param results Result objects
|
||||
* @param objectsNumber Count of all objects across all pages
|
||||
*/
|
||||
@Serializable
|
||||
data class PaginationResult<T>(
|
||||
override val page: Int,
|
||||
val pagesNumber: Int,
|
||||
val results: List<T>,
|
||||
override val size: Int,
|
||||
val objectsCount: Long = pagesNumber * size.toLong()
|
||||
) : Pagination
|
||||
val results: List<T>,
|
||||
val objectsNumber: Long
|
||||
) : Pagination {
|
||||
/**
|
||||
* Amount of pages for current pagination
|
||||
*/
|
||||
@EncodeDefault
|
||||
val pagesNumber: Int = ceil(objectsNumber / size.toFloat()).toInt()
|
||||
|
||||
fun <T> emptyPaginationResult() = PaginationResult<T>(0, 0, emptyList(), 0)
|
||||
constructor(
|
||||
page: Int,
|
||||
results: List<T>,
|
||||
pagesNumber: Int,
|
||||
size: Int
|
||||
) : this(
|
||||
page,
|
||||
size,
|
||||
results,
|
||||
(pagesNumber * size).toLong()
|
||||
)
|
||||
@Deprecated("Replace with The other order of incoming parameters or objectsCount parameter")
|
||||
constructor(
|
||||
page: Int,
|
||||
pagesNumber: Int,
|
||||
results: List<T>,
|
||||
size: Int
|
||||
) : this(
|
||||
page,
|
||||
results,
|
||||
pagesNumber,
|
||||
size
|
||||
)
|
||||
}
|
||||
|
||||
fun <T> emptyPaginationResult() = PaginationResult<T>(0, 0, emptyList(), 0L)
|
||||
|
||||
/**
|
||||
* @return New [PaginationResult] with [data] without checking of data sizes equality
|
||||
*/
|
||||
fun <I, O> PaginationResult<I>.changeResultsUnchecked(
|
||||
data: List<O>
|
||||
): PaginationResult<O> = PaginationResult(page, pagesNumber, data, size)
|
||||
): PaginationResult<O> = PaginationResult(page, size, data, objectsNumber)
|
||||
/**
|
||||
* @return New [PaginationResult] with [data] <b>with</b> checking of data sizes equality
|
||||
*/
|
||||
@ -34,12 +70,8 @@ fun <T> List<T>.createPaginationResult(
|
||||
commonObjectsNumber: Long
|
||||
) = PaginationResult(
|
||||
pagination.page,
|
||||
calculatePagesNumber(
|
||||
commonObjectsNumber,
|
||||
pagination.size
|
||||
),
|
||||
this,
|
||||
pagination.size,
|
||||
this,
|
||||
commonObjectsNumber
|
||||
)
|
||||
|
||||
@ -48,12 +80,8 @@ fun <T> List<T>.createPaginationResult(
|
||||
commonObjectsNumber: Long
|
||||
) = PaginationResult(
|
||||
calculatePage(firstIndex, size),
|
||||
calculatePagesNumber(
|
||||
commonObjectsNumber,
|
||||
size
|
||||
),
|
||||
this,
|
||||
size,
|
||||
this,
|
||||
commonObjectsNumber
|
||||
)
|
||||
|
||||
|
@ -26,6 +26,10 @@ inline fun Pagination.nextPage() =
|
||||
size
|
||||
)
|
||||
|
||||
/**
|
||||
* @param page Current page number
|
||||
* @param size Current page size
|
||||
*/
|
||||
@Serializable
|
||||
data class SimplePagination(
|
||||
override val page: Int,
|
||||
|
Loading…
Reference in New Issue
Block a user