Browse Source

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

Update member list after changing member roles
pull/2607/head
ganfra 6 months ago committed by GitHub
parent
commit
865b8b0001
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      changelog.d/2590.bugfix
  2. 8
      features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListDataSource.kt
  3. 5
      features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt
  4. 2
      features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesPresenter.kt
  5. 4
      libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt

1
changelog.d/2590.bugfix

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

8
features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListDataSource.kt

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

5
features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt

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

2
features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesPresenter.kt

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

4
libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt

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

Loading…
Cancel
Save