Merge pull request #7022 from vector-im/feature/nfe/app_layout_hide_filters_for_space

hide favourites and dms filters for a selected space, if they are empty
This commit is contained in:
Benoit Marty 2022-09-06 14:56:53 +02:00 committed by GitHub
commit b3eac52e3f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -40,6 +40,7 @@ import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
@ -202,24 +203,38 @@ class HomeRoomListViewModel @AssistedInject constructor(
private fun getFiltersDataFlow(): SharedFlow<Optional<List<HomeRoomFilter>>> { private fun getFiltersDataFlow(): SharedFlow<Optional<List<HomeRoomFilter>>> {
val flow = MutableSharedFlow<Optional<List<HomeRoomFilter>>>(replay = 1) val flow = MutableSharedFlow<Optional<List<HomeRoomFilter>>>(replay = 1)
val favouritesFlow = session.flow() val spaceFLow = spaceStateHandler.getSelectedSpaceFlow()
.liveRoomSummaries(
RoomSummaryQueryParams.Builder().also { builder ->
builder.roomTagQueryFilter = RoomTagQueryFilter(true, null, null)
}.build()
)
.map { it.isNotEmpty() }
.distinctUntilChanged() .distinctUntilChanged()
.onStart {
emit(spaceStateHandler.getCurrentSpace().toOption())
}
val dmsFLow = session.flow() val favouritesFlow =
.liveRoomSummaries( spaceFLow.flatMapLatest { selectedSpace ->
RoomSummaryQueryParams.Builder().also { builder -> session.flow()
builder.memberships = listOf(Membership.JOIN) .liveRoomSummaries(
builder.roomCategoryFilter = RoomCategoryFilter.ONLY_DM RoomSummaryQueryParams.Builder().also { builder ->
}.build() builder.spaceFilter = selectedSpace.orNull()?.roomId.toActiveSpaceOrNoFilter()
) builder.roomTagQueryFilter = RoomTagQueryFilter(true, null, null)
.map { it.isNotEmpty() } }.build()
.distinctUntilChanged() )
}
.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 -> combine(favouritesFlow, dmsFLow, preferencesStore.areFiltersEnabledFlow) { hasFavourite, hasDm, areFiltersEnabled ->
Triple(hasFavourite, hasDm, areFiltersEnabled) Triple(hasFavourite, hasDm, areFiltersEnabled)