change(members): search is now dependent of the selected section
This commit is contained in:
parent
dcaac703fc
commit
f3f40de14a
2 changed files with 14 additions and 6 deletions
|
|
@ -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.core.coroutine.CoroutineDispatchers
|
||||||
import io.element.android.libraries.matrix.api.room.BaseRoom
|
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.RoomMember
|
||||||
|
import io.element.android.libraries.matrix.api.room.RoomMembershipState
|
||||||
import io.element.android.libraries.matrix.api.room.roomMembers
|
import io.element.android.libraries.matrix.api.room.roomMembers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
import kotlin.collections.filter
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
class RoomMemberListDataSource(
|
class RoomMemberListDataSource(
|
||||||
private val room: BaseRoom,
|
private val room: BaseRoom,
|
||||||
private val coroutineDispatchers: CoroutineDispatchers,
|
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 roomMembersState = room.membersStateFlow.value
|
||||||
val activeRoomMembers = roomMembersState.roomMembers()
|
val displayableMembers = roomMembersState.roomMembers()
|
||||||
?.filter { it.membership.isActive() }
|
|
||||||
.orEmpty()
|
.orEmpty()
|
||||||
|
.filter {
|
||||||
|
when(selectedSection){
|
||||||
|
SelectedSection.MEMBERS -> it.membership.isActive()
|
||||||
|
SelectedSection.BANNED -> it.membership == RoomMembershipState.BAN
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val filteredMembers = if (query.isBlank()) {
|
val filteredMembers = if (query.isBlank()) {
|
||||||
activeRoomMembers
|
displayableMembers
|
||||||
} else {
|
} else {
|
||||||
activeRoomMembers.filter { member ->
|
displayableMembers.filter { member ->
|
||||||
member.userId.value.contains(query, ignoreCase = true) ||
|
member.userId.value.contains(query, ignoreCase = true) ||
|
||||||
member.displayName?.contains(query, ignoreCase = true).orFalse()
|
member.displayName?.contains(query, ignoreCase = true).orFalse()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,7 @@ class RoomMemberListPresenter(
|
||||||
searchResults = if (searchQuery.isEmpty() || !isSearchActive) {
|
searchResults = if (searchQuery.isEmpty() || !isSearchActive) {
|
||||||
SearchBarResultState.Initial()
|
SearchBarResultState.Initial()
|
||||||
} else {
|
} else {
|
||||||
val results = roomMemberListDataSource.search(searchQuery).groupBy { it.membership }
|
val results = roomMemberListDataSource.search(searchQuery, selectedSection).groupBy { it.membership }
|
||||||
if (results.isEmpty()) {
|
if (results.isEmpty()) {
|
||||||
SearchBarResultState.NoResultsFound()
|
SearchBarResultState.NoResultsFound()
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue