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
|
## 0.11.14
|
||||||
|
|
||||||
* `Pagination`:
|
* `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
|
## 0.11.13
|
||||||
|
|
||||||
|
@ -1,24 +1,60 @@
|
|||||||
package dev.inmo.micro_utils.pagination
|
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
|
@Serializable
|
||||||
data class PaginationResult<T>(
|
data class PaginationResult<T>(
|
||||||
override val page: Int,
|
override val page: Int,
|
||||||
val pagesNumber: Int,
|
|
||||||
val results: List<T>,
|
|
||||||
override val size: Int,
|
override val size: Int,
|
||||||
val objectsCount: Long = pagesNumber * size.toLong()
|
val results: List<T>,
|
||||||
) : Pagination
|
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
|
* @return New [PaginationResult] with [data] without checking of data sizes equality
|
||||||
*/
|
*/
|
||||||
fun <I, O> PaginationResult<I>.changeResultsUnchecked(
|
fun <I, O> PaginationResult<I>.changeResultsUnchecked(
|
||||||
data: List<O>
|
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
|
* @return New [PaginationResult] with [data] <b>with</b> checking of data sizes equality
|
||||||
*/
|
*/
|
||||||
@ -34,12 +70,8 @@ fun <T> List<T>.createPaginationResult(
|
|||||||
commonObjectsNumber: Long
|
commonObjectsNumber: Long
|
||||||
) = PaginationResult(
|
) = PaginationResult(
|
||||||
pagination.page,
|
pagination.page,
|
||||||
calculatePagesNumber(
|
|
||||||
commonObjectsNumber,
|
|
||||||
pagination.size
|
|
||||||
),
|
|
||||||
this,
|
|
||||||
pagination.size,
|
pagination.size,
|
||||||
|
this,
|
||||||
commonObjectsNumber
|
commonObjectsNumber
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -48,12 +80,8 @@ fun <T> List<T>.createPaginationResult(
|
|||||||
commonObjectsNumber: Long
|
commonObjectsNumber: Long
|
||||||
) = PaginationResult(
|
) = PaginationResult(
|
||||||
calculatePage(firstIndex, size),
|
calculatePage(firstIndex, size),
|
||||||
calculatePagesNumber(
|
|
||||||
commonObjectsNumber,
|
|
||||||
size
|
|
||||||
),
|
|
||||||
this,
|
|
||||||
size,
|
size,
|
||||||
|
this,
|
||||||
commonObjectsNumber
|
commonObjectsNumber
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -26,6 +26,10 @@ inline fun Pagination.nextPage() =
|
|||||||
size
|
size
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param page Current page number
|
||||||
|
* @param size Current page size
|
||||||
|
*/
|
||||||
@Serializable
|
@Serializable
|
||||||
data class SimplePagination(
|
data class SimplePagination(
|
||||||
override val page: Int,
|
override val page: Int,
|
||||||
|
Loading…
Reference in New Issue
Block a user