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)
+    }
+}