From 86ceaf6523cdbfcf9966db2d4facfe9c3dcd8564 Mon Sep 17 00:00:00 2001 From: Sangwook123 Date: Fri, 10 May 2024 19:06:49 +0900 Subject: [PATCH] [chore] #7 paging source --- .../java/org/sopt/data/paging/UserPagingSource.kt | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/core/data/src/main/java/org/sopt/data/paging/UserPagingSource.kt b/core/data/src/main/java/org/sopt/data/paging/UserPagingSource.kt index 1c0bfcb..363b910 100644 --- a/core/data/src/main/java/org/sopt/data/paging/UserPagingSource.kt +++ b/core/data/src/main/java/org/sopt/data/paging/UserPagingSource.kt @@ -13,12 +13,15 @@ class UserPagingSource @Inject constructor( private val reqresApi: ReqresApi, ) : PagingSource() { override fun getRefreshKey(state: PagingState): Int? { - return state.anchorPosition + return state.anchorPosition?.let { + state.closestPageToPosition(it)?.prevKey?.plus(1) + ?: state.closestPageToPosition(it)?.nextKey?.minus(1) + } } override suspend fun load(params: LoadParams): LoadResult { return try { - val currentPage = params.key ?: 1 + val currentPage = params.key ?: INITIAL_KEY val users = toReqresUser( reqresApi.getUsers( currentPage @@ -27,7 +30,7 @@ class UserPagingSource @Inject constructor( LoadResult.Page( data = users, - prevKey = if (currentPage == 1) null else currentPage - 1, + prevKey = if (currentPage == INITIAL_KEY) null else currentPage - 1, nextKey = if (users.isEmpty()) null else currentPage + 1 ) } catch (exception: IOException) { @@ -36,4 +39,8 @@ class UserPagingSource @Inject constructor( return LoadResult.Error(exception) } } + + companion object { + private const val INITIAL_KEY = 1 + } } \ No newline at end of file