change(members): search is now dependent of the selected section
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user