diff --git a/pagination/compose/src/commonMain/kotlin/InfinityPagedComponent.kt b/pagination/compose/src/commonMain/kotlin/InfinityPagedComponent.kt index 23a4137ae98..c0e1766b1ff 100644 --- a/pagination/compose/src/commonMain/kotlin/InfinityPagedComponent.kt +++ b/pagination/compose/src/commonMain/kotlin/InfinityPagedComponent.kt @@ -1,21 +1,15 @@ package dev.inmo.micro_utils.pagination.compose import androidx.compose.runtime.* -import dev.inmo.micro_utils.common.Optional -import dev.inmo.micro_utils.common.dataOrThrow -import dev.inmo.micro_utils.common.optional import dev.inmo.micro_utils.pagination.* class InfinityPagedComponentContext internal constructor( - preset: List? = null, - initialPage: Int, + page: Int, size: Int ) { - internal val iterationState: MutableState> = mutableStateOf(0 to SimplePagination(preset ?.page ?: initialPage, preset ?.size ?: size)) + internal val iterationState: MutableState> = mutableStateOf(0 to SimplePagination(page, size)) - internal var dataOptional: List? = preset - private set - internal val dataState: MutableState?> = mutableStateOf(dataOptional) + internal val dataState: MutableState?> = mutableStateOf(null) fun loadNext() { iterationState.value = iterationState.value.let { @@ -24,6 +18,7 @@ class InfinityPagedComponentContext internal constructor( } } fun reload() { + dataState.value = null iterationState.value = iterationState.value.let { (it.first + 1) to (it.second.firstPage()) } @@ -32,38 +27,22 @@ class InfinityPagedComponentContext internal constructor( @Composable internal fun InfinityPagedComponent( - preload: List?, - initialPage: Int, + page: Int, size: Int, - loader: suspend PagedComponentContext.(Pagination) -> PaginationResult, - block: @Composable PagedComponentContext.(List) -> Unit + loader: suspend InfinityPagedComponentContext.(Pagination) -> PaginationResult, + block: @Composable InfinityPagedComponentContext.(List?) -> Unit ) { - val context = remember { InfinityPagedComponentContext(preload, initialPage, size) } + val context = remember { InfinityPagedComponentContext(page, size) } LaunchedEffect(context.iterationState.value) { - context.dataState.value = loader(context, context.iterationState.value.second) + context.dataState.value = (context.dataState.value ?: emptyList()) + loader(context, context.iterationState.value.second).results } context.dataState.value ?.let { - context.block() + context.block(context.dataState.value) } } -@Composable -fun InfinityPagedComponent( - preload: PaginationResult, - loader: suspend PagedComponentContext.(Pagination) -> PaginationResult, - block: @Composable PagedComponentContext.(PaginationResult) -> Unit -) { - PagedComponent( - preload, - preload.page, - preload.size, - loader, - block - ) -} - @Composable fun InfinityPagedComponent( pageInfo: Pagination,