change(room members): remove useless call to updateMembers
This commit is contained in:
parent
3086d1e8e3
commit
1623651ca8
2 changed files with 24 additions and 39 deletions
|
|
@ -25,6 +25,7 @@ import im.vector.app.features.analytics.plan.RoomModeration
|
||||||
import io.element.android.features.rolesandpermissions.impl.RoomMemberListDataSource
|
import io.element.android.features.rolesandpermissions.impl.RoomMemberListDataSource
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
|
import io.element.android.libraries.architecture.runUpdatingState
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
||||||
import io.element.android.libraries.di.annotations.RoomCoroutineScope
|
import io.element.android.libraries.di.annotations.RoomCoroutineScope
|
||||||
|
|
@ -193,37 +194,27 @@ class ChangeRolesPresenter(
|
||||||
selectedUsers: MutableState<ImmutableList<MatrixUser>>,
|
selectedUsers: MutableState<ImmutableList<MatrixUser>>,
|
||||||
saveState: MutableState<AsyncAction<Boolean>>,
|
saveState: MutableState<AsyncAction<Boolean>>,
|
||||||
) = launch {
|
) = launch {
|
||||||
saveState.value = AsyncAction.Loading
|
runUpdatingState(saveState) {
|
||||||
|
val toAdd = selectedUsers.value - usersWithRole
|
||||||
val toAdd = selectedUsers.value - usersWithRole
|
val toRemove = usersWithRole - selectedUsers.value
|
||||||
val toRemove = usersWithRole - selectedUsers.value
|
val changes: List<UserRoleChange> = buildList {
|
||||||
|
for (selectedUser in toAdd) {
|
||||||
val changes: List<UserRoleChange> = buildList {
|
analyticsService.capture(RoomModeration(RoomModeration.Action.ChangeMemberRole, role.toAnalyticsMemberRole()))
|
||||||
for (selectedUser in toAdd) {
|
add(UserRoleChange(selectedUser.userId, role))
|
||||||
analyticsService.capture(RoomModeration(RoomModeration.Action.ChangeMemberRole, role.toAnalyticsMemberRole()))
|
}
|
||||||
add(UserRoleChange(selectedUser.userId, role))
|
for (selectedUser in toRemove) {
|
||||||
}
|
analyticsService.capture(RoomModeration(RoomModeration.Action.ChangeMemberRole, RoomModeration.Role.User))
|
||||||
for (selectedUser in toRemove) {
|
add(UserRoleChange(selectedUser.userId, RoomMember.Role.User))
|
||||||
analyticsService.capture(RoomModeration(RoomModeration.Action.ChangeMemberRole, RoomModeration.Role.User))
|
}
|
||||||
add(UserRoleChange(selectedUser.userId, RoomMember.Role.User))
|
|
||||||
}
|
}
|
||||||
|
room.updateUsersRoles(changes).map { true }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
room.updateUsersRoles(changes)
|
internal fun RoomMember.Role.toAnalyticsMemberRole(): RoomModeration.Role = when (this) {
|
||||||
.onFailure {
|
is RoomMember.Role.Owner -> RoomModeration.Role.Administrator // TODO - distinguish creator from admin
|
||||||
saveState.value = AsyncAction.Failure(it)
|
RoomMember.Role.Admin -> RoomModeration.Role.Administrator
|
||||||
}
|
RoomMember.Role.Moderator -> RoomModeration.Role.Moderator
|
||||||
.onSuccess {
|
RoomMember.Role.User -> RoomModeration.Role.User
|
||||||
// Asynchronously reload the room members
|
|
||||||
launch { room.updateMembers() }
|
|
||||||
saveState.value = AsyncAction.Success(true)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun RoomMember.Role.toAnalyticsMemberRole(): RoomModeration.Role = when (this) {
|
|
||||||
is RoomMember.Role.Owner -> RoomModeration.Role.Administrator // TODO - distinguish creator from admin
|
|
||||||
RoomMember.Role.Admin -> RoomModeration.Role.Administrator
|
|
||||||
RoomMember.Role.Moderator -> RoomModeration.Role.Moderator
|
|
||||||
RoomMember.Role.User -> RoomModeration.Role.User
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -39,11 +39,8 @@ import kotlinx.collections.immutable.ImmutableMap
|
||||||
import kotlinx.collections.immutable.persistentMapOf
|
import kotlinx.collections.immutable.persistentMapOf
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
import kotlinx.collections.immutable.toImmutableMap
|
import kotlinx.collections.immutable.toImmutableMap
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
|
||||||
import kotlinx.coroutines.flow.first
|
import kotlinx.coroutines.flow.first
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.map
|
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
|
|
@ -55,9 +52,10 @@ class RoomMemberListPresenter(
|
||||||
private val roomMembersModerationPresenter: Presenter<RoomMemberModerationState>,
|
private val roomMembersModerationPresenter: Presenter<RoomMemberModerationState>,
|
||||||
private val encryptionService: EncryptionService,
|
private val encryptionService: EncryptionService,
|
||||||
) : Presenter<RoomMemberListState> {
|
) : Presenter<RoomMemberListState> {
|
||||||
|
var roomMembers: AsyncData<RoomMembers> by mutableStateOf(AsyncData.Loading())
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun present(): RoomMemberListState {
|
override fun present(): RoomMemberListState {
|
||||||
var roomMembers: AsyncData<RoomMembers> by remember { mutableStateOf(AsyncData.Loading()) }
|
|
||||||
var searchQuery by rememberSaveable { mutableStateOf("") }
|
var searchQuery by rememberSaveable { mutableStateOf("") }
|
||||||
var searchResults by remember {
|
var searchResults by remember {
|
||||||
mutableStateOf<SearchBarResultState<AsyncData<RoomMembers>>>(SearchBarResultState.Initial())
|
mutableStateOf<SearchBarResultState<AsyncData<RoomMembers>>>(SearchBarResultState.Initial())
|
||||||
|
|
@ -77,13 +75,9 @@ class RoomMemberListPresenter(
|
||||||
.launchIn(this)
|
.launchIn(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the room members when the screen is loaded or the active member count changes
|
// Update the room members when the screen is loaded
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
room.roomInfoFlow.map { it.activeMembersCount }
|
room.updateMembers()
|
||||||
.distinctUntilChanged()
|
|
||||||
.collectLatest {
|
|
||||||
room.updateMembers()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LaunchedEffect(membersState, roomMemberIdentityStates) {
|
LaunchedEffect(membersState, roomMemberIdentityStates) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue