From 462e208c874c387650dd775351e60ef73a3342a7 Mon Sep 17 00:00:00 2001 From: Sasikanth Miriyampalli Date: Sat, 23 Dec 2023 06:48:17 +0530 Subject: [PATCH] Stop creating new pager flow after selected feed is changed This was causing the feeds list position to reset after a feed is selected --- .../rss/reader/feeds/FeedsPresenter.kt | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/feeds/FeedsPresenter.kt b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/feeds/FeedsPresenter.kt index f5fb2fceb..382a25957 100644 --- a/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/feeds/FeedsPresenter.kt +++ b/shared/src/commonMain/kotlin/dev/sasikanth/rss/reader/feeds/FeedsPresenter.kt @@ -47,8 +47,8 @@ import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update @@ -212,24 +212,20 @@ class FeedsPresenter( } private fun observeFeedsForCollapsedSheet() { - observableSelectedFeed.selectedFeed - .combine(settingsRepository.postsType) { selectedFeed, postsType -> - selectedFeed to postsType - } - .mapLatest { (selectedFeed, postsType) -> + val feeds = + settingsRepository.postsType.distinctUntilChanged().flatMapLatest { postsType -> val postsAfter = postsAfterInstantFromPostsType(postsType) - val feeds = - createPager(config = createPagingConfig(pageSize = 20)) { - rssRepository.allFeeds(postsAfter = postsAfter) - } - .flow - .cachedIn(coroutineScope) - - selectedFeed to feeds + createPager(config = createPagingConfig(pageSize = 20)) { + rssRepository.allFeeds(postsAfter = postsAfter) + } + .flow + .cachedIn(coroutineScope) } + + observableSelectedFeed.selectedFeed .distinctUntilChanged() - .onEach { (selectedFeed, feeds) -> + .onEach { selectedFeed -> _state.update { it.copy(feeds = feeds, selectedFeed = selectedFeed) } } .launchIn(coroutineScope)