change(members): search is now dependent of the selected section

This commit is contained in:
ganfra
2025-11-20 18:27:23 +01:00
parent dcaac703fc
commit f3f40de14a
2 changed files with 14 additions and 6 deletions

View File

@@ -13,23 +13,31 @@ import io.element.android.libraries.core.bool.orFalse
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.matrix.api.room.BaseRoom
import io.element.android.libraries.matrix.api.room.RoomMember
import io.element.android.libraries.matrix.api.room.RoomMembershipState
import io.element.android.libraries.matrix.api.room.roomMembers
import kotlinx.coroutines.withContext
import kotlin.collections.filter
@Inject
class RoomMemberListDataSource(
private val room: BaseRoom,
private val coroutineDispatchers: CoroutineDispatchers,
) {
suspend fun search(query: String): List<RoomMember> = withContext(coroutineDispatchers.io) {
suspend fun search(query: String, selectedSection: SelectedSection): List<RoomMember> = withContext(coroutineDispatchers.io) {
val roomMembersState = room.membersStateFlow.value
val activeRoomMembers = roomMembersState.roomMembers()
?.filter { it.membership.isActive() }
val displayableMembers = roomMembersState.roomMembers()
.orEmpty()
.filter {
when(selectedSection){
SelectedSection.MEMBERS -> it.membership.isActive()
SelectedSection.BANNED -> it.membership == RoomMembershipState.BAN
}
}
val filteredMembers = if (query.isBlank()) {
activeRoomMembers
displayableMembers
} else {
activeRoomMembers.filter { member ->
displayableMembers.filter { member ->
member.userId.value.contains(query, ignoreCase = true) ||
member.displayName?.contains(query, ignoreCase = true).orFalse()
}

View File

@@ -130,7 +130,7 @@ class RoomMemberListPresenter(
searchResults = if (searchQuery.isEmpty() || !isSearchActive) {
SearchBarResultState.Initial()
} else {
val results = roomMemberListDataSource.search(searchQuery).groupBy { it.membership }
val results = roomMemberListDataSource.search(searchQuery, selectedSection).groupBy { it.membership }
if (results.isEmpty()) {
SearchBarResultState.NoResultsFound()
} else {