From 329540acbf08144af450e1cefa21edffa32fb4be Mon Sep 17 00:00:00 2001 From: hansh0101 Date: Mon, 20 Jun 2022 22:53:51 +0900 Subject: [PATCH 01/11] =?UTF-8?q?[feature]=20#302=20-=20NestedScrollView?= =?UTF-8?q?=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/res/layout/fragment_not_empty_scrap.xml | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/app/src/main/res/layout/fragment_not_empty_scrap.xml b/app/src/main/res/layout/fragment_not_empty_scrap.xml index 56a33f0e..10325b06 100644 --- a/app/src/main/res/layout/fragment_not_empty_scrap.xml +++ b/app/src/main/res/layout/fragment_not_empty_scrap.xml @@ -33,18 +33,6 @@ - - - - - - - - \ No newline at end of file From 21d83513b2c88e0b965b454e68ea21ea35a063b5 Mon Sep 17 00:00:00 2001 From: hansh0101 Date: Mon, 20 Jun 2022 22:54:05 +0900 Subject: [PATCH 02/11] =?UTF-8?q?[feature]=20#302=20-=20RecyclerView=20?= =?UTF-8?q?=EC=A0=9C=EC=95=BD=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/layout/fragment_not_empty_scrap.xml | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/app/src/main/res/layout/fragment_not_empty_scrap.xml b/app/src/main/res/layout/fragment_not_empty_scrap.xml index 10325b06..635e063e 100644 --- a/app/src/main/res/layout/fragment_not_empty_scrap.xml +++ b/app/src/main/res/layout/fragment_not_empty_scrap.xml @@ -33,17 +33,18 @@ - + From f425b8594e20fd4e9d6438e99c7817434fc3fad5 Mon Sep 17 00:00:00 2001 From: hansh0101 Date: Mon, 20 Jun 2022 22:54:25 +0900 Subject: [PATCH 03/11] =?UTF-8?q?[feature]=20#302=20-=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=95=20=EC=A1=B0=EA=B1=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../co/kr/bemyplan/ui/list/ListActivity.kt | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/co/kr/bemyplan/ui/list/ListActivity.kt b/app/src/main/java/co/kr/bemyplan/ui/list/ListActivity.kt index 788165dd..de0f97ea 100644 --- a/app/src/main/java/co/kr/bemyplan/ui/list/ListActivity.kt +++ b/app/src/main/java/co/kr/bemyplan/ui/list/ListActivity.kt @@ -7,6 +7,7 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.databinding.DataBindingUtil +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import co.kr.bemyplan.R import co.kr.bemyplan.data.firebase.FirebaseAnalyticsProvider @@ -119,22 +120,25 @@ class ListActivity : AppCompatActivity() { rvLinearContent.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) - if (!rvLinearContent.canScrollVertically(1)) { - when (from) { - "new" -> { - viewModel.fetchMoreLatestList() - } - "suggest" -> { - viewModel.fetchMoreSuggestList() - } - "location" -> { - viewModel.fetchMoreLocationList( - region, - sortViewModel.sort.value.toString() - ) - } - "user" -> { - viewModel.fetchMoreUserPlanList(sortViewModel.sort.value.toString()) + if(dy > 0) { + if (!rvLinearContent.canScrollVertically(1) && + (recyclerView.layoutManager as LinearLayoutManager).findLastVisibleItemPosition() == listAdapter.itemCount - 1) { + when (from) { + "new" -> { + viewModel.fetchMoreLatestList() + } + "suggest" -> { + viewModel.fetchMoreSuggestList() + } + "location" -> { + viewModel.fetchMoreLocationList( + region, + sortViewModel.sort.value.toString() + ) + } + "user" -> { + viewModel.fetchMoreUserPlanList(sortViewModel.sort.value.toString()) + } } } } From c07fb25cb1202819c8442c33685f4d80027d0aa1 Mon Sep 17 00:00:00 2001 From: hansh0101 Date: Mon, 20 Jun 2022 22:55:02 +0900 Subject: [PATCH 04/11] =?UTF-8?q?[feature]=20#302=20-=20Firebase=20Analyti?= =?UTF-8?q?cs=20Event=20Log=20=EB=9E=8C=EB=8B=A4=EB=A1=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/main/location/LocationAdapter.kt | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/co/kr/bemyplan/ui/main/location/LocationAdapter.kt b/app/src/main/java/co/kr/bemyplan/ui/main/location/LocationAdapter.kt index 603ec5a8..57069e65 100644 --- a/app/src/main/java/co/kr/bemyplan/ui/main/location/LocationAdapter.kt +++ b/app/src/main/java/co/kr/bemyplan/ui/main/location/LocationAdapter.kt @@ -15,7 +15,11 @@ import co.kr.bemyplan.util.ToastMessage.shortToast import co.kr.bemyplan.util.clipTo import javax.inject.Inject -class LocationAdapter(val itemClick: (LocationData) -> Unit, val myContext: Context) : +class LocationAdapter( + private val itemClick: (LocationData) -> Unit, + private val myContext: Context, + private val logEvent: (Boolean, String) -> Unit +) : ListAdapter(LocationComparator()) { @Inject lateinit var firebaseAnalyticsProvider: FirebaseAnalyticsProvider @@ -23,14 +27,19 @@ class LocationAdapter(val itemClick: (LocationData) -> Unit, val myContext: Cont override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LocationViewHolder { val layoutInflater = LayoutInflater.from(parent.context) val binding = ItemLocationBinding.inflate(layoutInflater, parent, false) - return LocationViewHolder(binding) + return LocationViewHolder(binding, itemClick, myContext, logEvent) } override fun onBindViewHolder(holder: LocationViewHolder, position: Int) { holder.onBind(getItem(position)) } - inner class LocationViewHolder(private val binding: ItemLocationBinding) : + class LocationViewHolder( + private val binding: ItemLocationBinding, + private val itemClick: (LocationData) -> Unit, + private val myContext: Context, + private val logEvent: (Boolean, String) -> Unit + ) : RecyclerView.ViewHolder(binding.root) { fun onBind(data: LocationData) { binding.locationItem = data @@ -43,6 +52,7 @@ class LocationAdapter(val itemClick: (LocationData) -> Unit, val myContext: Cont putString("spot", data.name) }) itemClick(data) + logEvent(true, data.name) } else { firebaseAnalyticsProvider.firebaseAnalytics.logEvent( "clickClosedTravelSpot", @@ -50,6 +60,7 @@ class LocationAdapter(val itemClick: (LocationData) -> Unit, val myContext: Cont putString("spot", data.name) }) myContext.shortToast("추후에 오픈될 예정입니다") + logEvent(false, data.name) } } } From 14742558677e5b9a3d1fd79cc7e1ff0538268ee8 Mon Sep 17 00:00:00 2001 From: hansh0101 Date: Mon, 20 Jun 2022 22:55:21 +0900 Subject: [PATCH 05/11] =?UTF-8?q?[feature]=20#302=20-=20Adapter=20?= =?UTF-8?q?=EB=82=B4=20Firebase=20Analytics=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/bemyplan/ui/main/location/LocationAdapter.kt | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/app/src/main/java/co/kr/bemyplan/ui/main/location/LocationAdapter.kt b/app/src/main/java/co/kr/bemyplan/ui/main/location/LocationAdapter.kt index 57069e65..4ffb6a53 100644 --- a/app/src/main/java/co/kr/bemyplan/ui/main/location/LocationAdapter.kt +++ b/app/src/main/java/co/kr/bemyplan/ui/main/location/LocationAdapter.kt @@ -21,9 +21,6 @@ class LocationAdapter( private val logEvent: (Boolean, String) -> Unit ) : ListAdapter(LocationComparator()) { - @Inject - lateinit var firebaseAnalyticsProvider: FirebaseAnalyticsProvider - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LocationViewHolder { val layoutInflater = LayoutInflater.from(parent.context) val binding = ItemLocationBinding.inflate(layoutInflater, parent, false) @@ -46,19 +43,9 @@ class LocationAdapter( clipTo(binding.ivLocation, data.thumbnailUrl) binding.root.setOnClickListener { if (binding.ivLock.visibility == View.GONE) { - firebaseAnalyticsProvider.firebaseAnalytics.logEvent( - "clickOpenedTravelSpot", - Bundle().apply { - putString("spot", data.name) - }) itemClick(data) logEvent(true, data.name) } else { - firebaseAnalyticsProvider.firebaseAnalytics.logEvent( - "clickClosedTravelSpot", - Bundle().apply { - putString("spot", data.name) - }) myContext.shortToast("추후에 오픈될 예정입니다") logEvent(false, data.name) } From deedea60010cf3b83ded457e46b3bc396e292960 Mon Sep 17 00:00:00 2001 From: hansh0101 Date: Mon, 20 Jun 2022 22:55:43 +0900 Subject: [PATCH 06/11] =?UTF-8?q?[feature]=20#302=20-=20Firebase=20Analyti?= =?UTF-8?q?cs=20=EA=B4=80=EB=A0=A8=20=EC=BD=94=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/main/location/LocationFragment.kt | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/co/kr/bemyplan/ui/main/location/LocationFragment.kt b/app/src/main/java/co/kr/bemyplan/ui/main/location/LocationFragment.kt index 210545e9..28fcabe7 100644 --- a/app/src/main/java/co/kr/bemyplan/ui/main/location/LocationFragment.kt +++ b/app/src/main/java/co/kr/bemyplan/ui/main/location/LocationFragment.kt @@ -8,18 +8,22 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import co.kr.bemyplan.R +import co.kr.bemyplan.data.firebase.FirebaseAnalyticsProvider import co.kr.bemyplan.databinding.FragmentLocationBinding import co.kr.bemyplan.ui.list.ListActivity import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject @AndroidEntryPoint class LocationFragment : Fragment() { - private var _binding: FragmentLocationBinding? = null private val binding get() = _binding ?: error("Binding이 초기화 되지 않았습니다.") private lateinit var locationAdapter: LocationAdapter private val locationViewModel: LocationViewModel by viewModels() + @Inject + lateinit var firebaseAnalyticsProvider: FirebaseAnalyticsProvider + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -34,13 +38,27 @@ class LocationFragment : Fragment() { } private fun initAdapter() { - locationAdapter = LocationAdapter(itemClick = { + locationAdapter = LocationAdapter({ val intent = Intent(requireContext(), ListActivity::class.java) intent.putExtra("from", "location") intent.putExtra("region", it.region) intent.putExtra("locationName", it.name) startActivity(intent) - }, myContext = requireContext()) + }, myContext = requireContext(), {opened, name -> + if(opened) { + firebaseAnalyticsProvider.firebaseAnalytics.logEvent( + "clickOpenedTravelSpot", + Bundle().apply { + putString("spot", name) + }) + } else { + firebaseAnalyticsProvider.firebaseAnalytics.logEvent( + "clickClosedTravelSpot", + Bundle().apply { + putString("spot", name) + }) + } + }) binding.rvLocation.adapter = locationAdapter binding.rvLocation.addItemDecoration( VerticalItemDecorator( From 0595de28f2bfbe26d142987c0d3261046a5ba865 Mon Sep 17 00:00:00 2001 From: hansh0101 Date: Mon, 20 Jun 2022 22:55:57 +0900 Subject: [PATCH 07/11] =?UTF-8?q?[feature]=20#302=20-=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=95=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/main/scrap/NotEmptyScrapFragment.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/src/main/java/co/kr/bemyplan/ui/main/scrap/NotEmptyScrapFragment.kt b/app/src/main/java/co/kr/bemyplan/ui/main/scrap/NotEmptyScrapFragment.kt index 1a9ed022..c7e14299 100644 --- a/app/src/main/java/co/kr/bemyplan/ui/main/scrap/NotEmptyScrapFragment.kt +++ b/app/src/main/java/co/kr/bemyplan/ui/main/scrap/NotEmptyScrapFragment.kt @@ -10,6 +10,8 @@ import androidx.appcompat.app.AppCompatActivity import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView import co.kr.bemyplan.R import co.kr.bemyplan.data.firebase.FirebaseAnalyticsProvider import co.kr.bemyplan.databinding.FragmentNotEmptyScrapBinding @@ -102,6 +104,18 @@ class NotEmptyScrapFragment : Fragment() { false -> viewModel.postScrap(planId) } }) + binding.rvContent.addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { + super.onScrolled(recyclerView, dx, dy) + if (dy > 0) { + if (!binding.rvContent.canScrollVertically(1) && + (recyclerView.layoutManager as GridLayoutManager).findLastVisibleItemPosition() == scrapAdapter.itemCount - 1 + ) { + viewModel.getMoreScrapList(requireNotNull(sortViewModel.sort.value)) + } + } + } + }) binding.rvContent.adapter = scrapAdapter } From f8c0211a97e36d69d25e9f173d9c7395be883bbd Mon Sep 17 00:00:00 2001 From: hansh0101 Date: Mon, 20 Jun 2022 22:56:03 +0900 Subject: [PATCH 08/11] =?UTF-8?q?[feature]=20#302=20-=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=95=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/repository/ScrapListRepository.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/co/kr/bemyplan/domain/repository/ScrapListRepository.kt b/app/src/main/java/co/kr/bemyplan/domain/repository/ScrapListRepository.kt index 33988bd1..af31d16f 100644 --- a/app/src/main/java/co/kr/bemyplan/domain/repository/ScrapListRepository.kt +++ b/app/src/main/java/co/kr/bemyplan/domain/repository/ScrapListRepository.kt @@ -4,9 +4,13 @@ import co.kr.bemyplan.data.entity.main.scrap.ResponseEmptyScrapList import co.kr.bemyplan.domain.model.list.PlanList interface ScrapListRepository { - suspend fun getScrapList( - sort: String - ): PlanList + suspend fun fetchDefaultScrapList(): PlanList - suspend fun getEmptyScrapList(): ResponseEmptyScrapList + suspend fun fetchQueryScrapList(sort: String): PlanList + + suspend fun fetchEmptyScrapList(): ResponseEmptyScrapList + + suspend fun fetchDefaultMoreScrapList(size: Int, lastScrapId: Int): PlanList + + suspend fun fetchQueryMoreScrapList(size: Int, lastScrapId: Int, sort: String): PlanList } \ No newline at end of file From d1c630ac73c287d7e4461cb7573302a143daaad2 Mon Sep 17 00:00:00 2001 From: hansh0101 Date: Mon, 20 Jun 2022 22:56:06 +0900 Subject: [PATCH 09/11] =?UTF-8?q?[feature]=20#302=20-=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=95=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/scrap/ScrapListRepositoryImpl.kt | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/co/kr/bemyplan/data/repository/main/scrap/ScrapListRepositoryImpl.kt b/app/src/main/java/co/kr/bemyplan/data/repository/main/scrap/ScrapListRepositoryImpl.kt index 40bba53d..fd12aec9 100644 --- a/app/src/main/java/co/kr/bemyplan/data/repository/main/scrap/ScrapListRepositoryImpl.kt +++ b/app/src/main/java/co/kr/bemyplan/data/repository/main/scrap/ScrapListRepositoryImpl.kt @@ -13,20 +13,39 @@ class ScrapListRepositoryImpl @Inject constructor( private val service: ScrapListService, private val coroutineDispatcher: CoroutineDispatcher ) : ScrapListRepository { - override suspend fun getScrapList( + override suspend fun fetchDefaultScrapList(): PlanList = + withContext(coroutineDispatcher) { + service.fetchDefaultScrapList(10).data + } + + override suspend fun fetchQueryScrapList( sort: String ): PlanList { return withContext(coroutineDispatcher) { - service.getScrapList( + service.fetchQueryScrapList( 10, sort ).data } } - override suspend fun getEmptyScrapList(): ResponseEmptyScrapList { - return withContext(Dispatchers.IO) { + override suspend fun fetchEmptyScrapList(): ResponseEmptyScrapList { + return withContext(coroutineDispatcher) { service.getEmptyScrapList() } } + + override suspend fun fetchDefaultMoreScrapList(size: Int, lastScrapId: Int): PlanList = + withContext(coroutineDispatcher) { + service.fetchDefaultMoreScrapList(size, lastScrapId).data + } + + override suspend fun fetchQueryMoreScrapList( + size: Int, + lastScrapId: Int, + sort: String + ): PlanList = + withContext(coroutineDispatcher) { + service.fetchQueryMoreScrapList(size, lastScrapId, sort).data + } } \ No newline at end of file From 40f21b7e22e803dc8f4b7d9ef3ce472b15cdcf8d Mon Sep 17 00:00:00 2001 From: hansh0101 Date: Mon, 20 Jun 2022 22:56:12 +0900 Subject: [PATCH 10/11] =?UTF-8?q?[feature]=20#302=20-=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=95=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/bemyplan/data/api/ScrapListService.kt | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/co/kr/bemyplan/data/api/ScrapListService.kt b/app/src/main/java/co/kr/bemyplan/data/api/ScrapListService.kt index 7cfa97eb..7cfd0b24 100644 --- a/app/src/main/java/co/kr/bemyplan/data/api/ScrapListService.kt +++ b/app/src/main/java/co/kr/bemyplan/data/api/ScrapListService.kt @@ -3,16 +3,33 @@ package co.kr.bemyplan.data.api import co.kr.bemyplan.data.entity.main.scrap.ResponseEmptyScrapList import co.kr.bemyplan.data.entity.main.scrap.ResponseScrapList import retrofit2.http.GET -import retrofit2.http.Path import retrofit2.http.Query interface ScrapListService { @GET("v1/plan/bookmark") - suspend fun getScrapList( + suspend fun fetchDefaultScrapList( + @Query("size") size: Int + ): ResponseScrapList + + @GET("v1/plan/bookmark") + suspend fun fetchQueryScrapList( @Query("size") page: Int, @Query("sort", encoded = true) sort: String ): ResponseScrapList @GET("v1/post/random") suspend fun getEmptyScrapList(): ResponseEmptyScrapList + + @GET("v1/plan/bookmark") + suspend fun fetchDefaultMoreScrapList( + @Query("size") size: Int, + @Query("lastScrapId") lastScrapId: Int + ): ResponseScrapList + + @GET("v1/plan/bookmark") + suspend fun fetchQueryMoreScrapList( + @Query("size") size: Int, + @Query("lastScrapId") lastScrapId: Int, + @Query("sort", encoded = true) sort: String + ): ResponseScrapList } \ No newline at end of file From 7792094bd2c403e39f9366cdfb7aecc24eba70eb Mon Sep 17 00:00:00 2001 From: hansh0101 Date: Mon, 20 Jun 2022 22:56:16 +0900 Subject: [PATCH 11/11] =?UTF-8?q?[feature]=20#302=20-=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=95=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/main/scrap/viewmodel/ScrapViewModel.kt | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/co/kr/bemyplan/ui/main/scrap/viewmodel/ScrapViewModel.kt b/app/src/main/java/co/kr/bemyplan/ui/main/scrap/viewmodel/ScrapViewModel.kt index 2ecddfa5..02683590 100644 --- a/app/src/main/java/co/kr/bemyplan/ui/main/scrap/viewmodel/ScrapViewModel.kt +++ b/app/src/main/java/co/kr/bemyplan/ui/main/scrap/viewmodel/ScrapViewModel.kt @@ -37,7 +37,11 @@ class ScrapViewModel @Inject constructor( fun getScrapList(sort: String) { viewModelScope.launch { kotlin.runCatching { - scrapListRepository.getScrapList(sort) + if (sort == "id,desc") { + scrapListRepository.fetchDefaultScrapList() + } else { + scrapListRepository.fetchQueryScrapList(sort) + } }.onSuccess { response -> _scrapList.value = response.contents lastPlanId = response.nextCursor @@ -50,7 +54,7 @@ class ScrapViewModel @Inject constructor( fun getEmptyScrapList() { viewModelScope.launch { kotlin.runCatching { - scrapListRepository.getEmptyScrapList() + scrapListRepository.fetchEmptyScrapList() }.onSuccess { if (_emptyScrapList.value != it.data) { _emptyScrapList.value = it.data @@ -61,6 +65,23 @@ class ScrapViewModel @Inject constructor( } } + fun getMoreScrapList(sort: String) { + viewModelScope.launch { + runCatching { + if (sort == "id,desc") { + scrapListRepository.fetchDefaultMoreScrapList(size, lastPlanId) + } else { + scrapListRepository.fetchQueryMoreScrapList(size, lastPlanId, sort) + } + }.onSuccess { + _scrapList.value = scrapList.value?.toMutableList()?.apply { addAll(it.contents) } + lastPlanId = it.nextCursor + }.onFailure { + Timber.e(it) + } + } + } + fun postScrap(planId: Int) { viewModelScope.launch { kotlin.runCatching {