Merge pull request #2591 from element-hq/fix/jme/2590-update-room-member-list-after-changing-roles

Update member list after changing member roles
This commit is contained in:
ganfra
2024-03-26 12:27:42 +01:00
committed by GitHub
5 changed files with 16 additions and 4 deletions

1
changelog.d/2590.bugfix Normal file
View File

@@ -0,0 +1 @@
Update member list after changing member roles and when the room member list is opened.

View File

@@ -30,11 +30,13 @@ class RoomMemberListDataSource @Inject constructor(
) {
suspend fun search(query: String): List<RoomMember> = withContext(coroutineDispatchers.io) {
val roomMembersState = room.membersStateFlow.value
val roomMembers = roomMembersState.roomMembers().orEmpty()
val activeRoomMembers = roomMembersState.roomMembers()
?.filter { it.membership.isActive() }
.orEmpty()
val filteredMembers = if (query.isBlank()) {
roomMembers
activeRoomMembers
} else {
roomMembers.filter { member ->
activeRoomMembers.filter { member ->
member.userId.value.contains(query, ignoreCase = true) ||
member.displayName?.contains(query, ignoreCase = true).orFalse()
}

View File

@@ -84,6 +84,11 @@ class RoomMemberListPresenter @AssistedInject constructor(
remember { roomMembersModerationPresenter.dummyState() }
}
// Ensure we load the latest data when entering this screen
LaunchedEffect(Unit) {
room.updateMembers()
}
LaunchedEffect(membersState) {
if (membersState is MatrixRoomMembersState.Unknown) {
return@LaunchedEffect

View File

@@ -216,6 +216,8 @@ class ChangeRolesPresenter @AssistedInject constructor(
}
.onSuccess {
saveState.value = AsyncAction.Success(Unit)
// Asynchronously reload the room members
launch { room.updateMembers() }
}
}
}

View File

@@ -66,7 +66,9 @@ enum class RoomMembershipState {
INVITE,
JOIN,
KNOCK,
LEAVE
LEAVE;
fun isActive(): Boolean = this == JOIN || this == INVITE
}
/**