From 6c66d295c0c8d4f58d68f1e9620943070201ec49 Mon Sep 17 00:00:00 2001 From: mramotar <mramotar@dropbox.com> Date: Sat, 16 Mar 2024 13:24:28 -0400 Subject: [PATCH] Implement RealPager Signed-off-by: mramotar <mramotar@dropbox.com> --- .../paging/core/impl/RealPager.kt | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 paging/core/src/commonMain/kotlin/org/mobilenativefoundation/paging/core/impl/RealPager.kt diff --git a/paging/core/src/commonMain/kotlin/org/mobilenativefoundation/paging/core/impl/RealPager.kt b/paging/core/src/commonMain/kotlin/org/mobilenativefoundation/paging/core/impl/RealPager.kt new file mode 100644 index 000000000..b566bbc2f --- /dev/null +++ b/paging/core/src/commonMain/kotlin/org/mobilenativefoundation/paging/core/impl/RealPager.kt @@ -0,0 +1,30 @@ +package org.mobilenativefoundation.paging.core.impl + +import kotlinx.coroutines.flow.StateFlow +import org.mobilenativefoundation.paging.core.Pager +import org.mobilenativefoundation.paging.core.PagingAction +import org.mobilenativefoundation.paging.core.PagingConfig +import org.mobilenativefoundation.paging.core.PagingKey +import org.mobilenativefoundation.paging.core.PagingState + +class RealPager<Id : Comparable<Id>, K : Any, P : Any, D : Any, E : Any, A : Any>( + initialKey: PagingKey<K, P>, + stateManager: StateManager<Id, K, P, D, E>, + pagingConfigInjector: Injector<PagingConfig>, + private val dispatcher: Dispatcher<Id, K, P, D, E, A>, +) : Pager<Id, K, P, D, E, A> { + + private val pagingConfig = lazy { pagingConfigInjector.inject() } + + init { + if (pagingConfig.value.prefetchDistance > 0) { + dispatcher.dispatch(PagingAction.Load(initialKey)) + } + } + + override val state: StateFlow<PagingState<Id, K, P, D, E>> = stateManager.state + + override fun dispatch(action: PagingAction.User<Id, K, P, D, E, A>) { + dispatcher.dispatch(action) + } +}