From ee300cf11dd717570fa31dade5c733bea65da983 Mon Sep 17 00:00:00 2001 From: NIkita Fedrunov Date: Tue, 6 Sep 2022 07:54:16 +0200 Subject: [PATCH] hide favourites and dms filters for a selected space, if they are empty --- .../room/list/home/HomeRoomListViewModel.kt | 47 ++++++++++++------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/home/HomeRoomListViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/list/home/HomeRoomListViewModel.kt index 021b979b2b..b52c4e0190 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/home/HomeRoomListViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/home/HomeRoomListViewModel.kt @@ -40,6 +40,7 @@ import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach @@ -202,24 +203,38 @@ class HomeRoomListViewModel @AssistedInject constructor( private fun getFiltersDataFlow(): SharedFlow>> { val flow = MutableSharedFlow>>(replay = 1) - val favouritesFlow = session.flow() - .liveRoomSummaries( - RoomSummaryQueryParams.Builder().also { builder -> - builder.roomTagQueryFilter = RoomTagQueryFilter(true, null, null) - }.build() - ) - .map { it.isNotEmpty() } + val spaceFLow = spaceStateHandler.getSelectedSpaceFlow() .distinctUntilChanged() + .onStart { + emit(spaceStateHandler.getCurrentSpace().toOption()) + } - val dmsFLow = session.flow() - .liveRoomSummaries( - RoomSummaryQueryParams.Builder().also { builder -> - builder.memberships = listOf(Membership.JOIN) - builder.roomCategoryFilter = RoomCategoryFilter.ONLY_DM - }.build() - ) - .map { it.isNotEmpty() } - .distinctUntilChanged() + val favouritesFlow = + spaceFLow.flatMapLatest { selectedSpace -> + session.flow() + .liveRoomSummaries( + RoomSummaryQueryParams.Builder().also { builder -> + builder.spaceFilter = selectedSpace.orNull()?.roomId.toActiveSpaceOrNoFilter() + builder.roomTagQueryFilter = RoomTagQueryFilter(true, null, null) + }.build() + ) + } + .map { it.isNotEmpty() } + .distinctUntilChanged() + + val dmsFLow = + spaceFLow.flatMapLatest { selectedSpace -> + session.flow() + .liveRoomSummaries( + RoomSummaryQueryParams.Builder().also { builder -> + builder.spaceFilter = selectedSpace.orNull()?.roomId.toActiveSpaceOrNoFilter() + builder.memberships = listOf(Membership.JOIN) + builder.roomCategoryFilter = RoomCategoryFilter.ONLY_DM + }.build() + ) + } + .map { it.isNotEmpty() } + .distinctUntilChanged() combine(favouritesFlow, dmsFLow, preferencesStore.areFiltersEnabledFlow) { hasFavourite, hasDm, areFiltersEnabled -> Triple(hasFavourite, hasDm, areFiltersEnabled)