Merge pull request #5736 from element-hq/feature/bma/roomV12

Render Owner in the horizontal list when editing Admins.
This commit is contained in:
Benoit Marty 2025-11-17 13:41:52 +01:00 committed by GitHub
commit ac0e39cbef
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 32 additions and 10 deletions

View file

@ -44,8 +44,14 @@ class ChangeRolesStateProvider : PreviewParameterProvider<ChangeRolesState> {
aChangeRolesStateWithSelectedUsers().copy(savingState = AsyncAction.Loading), aChangeRolesStateWithSelectedUsers().copy(savingState = AsyncAction.Loading),
aChangeRolesStateWithSelectedUsers().copy(savingState = AsyncAction.Success(true)), aChangeRolesStateWithSelectedUsers().copy(savingState = AsyncAction.Success(true)),
aChangeRolesStateWithSelectedUsers().copy(savingState = AsyncAction.Failure(Exception("boom"))), aChangeRolesStateWithSelectedUsers().copy(savingState = AsyncAction.Failure(Exception("boom"))),
aChangeRolesStateWithOwners(), aChangeRolesStateWithOwners(
aChangeRolesStateWithOwners().copy(role = RoomMember.Role.Owner(isCreator = false)), role = RoomMember.Role.Admin,
// Do not include the owners in the selectedUsers (the presenter will not do it), the View will add them
selectedUsers = listOf(
aMatrixUser(id = "@carol:server.org", displayName = "Carol"),
)
),
aChangeRolesStateWithOwners(role = RoomMember.Role.Owner(isCreator = false)),
) )
} }
@ -88,8 +94,15 @@ internal fun aChangeRolesStateWithSelectedUsers() = aChangeRolesState(
canRemoveMember = { it != UserId("@alice:server.org") }, canRemoveMember = { it != UserId("@alice:server.org") },
) )
internal fun aChangeRolesStateWithOwners() = aChangeRolesState( internal fun aChangeRolesStateWithOwners(
role = RoomMember.Role.Admin, role: RoomMember.Role = RoomMember.Role.Admin,
selectedUsers: List<MatrixUser> = listOf(
aMatrixUser(id = "@alice:server.org", displayName = "Alice"),
aMatrixUser(id = "@bob:server.org", displayName = "Bob"),
aMatrixUser(id = "@carol:server.org", displayName = "Carol"),
),
) = aChangeRolesState(
role = role,
searchResults = SearchBarResultState.Results( searchResults = SearchBarResultState.Results(
MembersByRole( MembersByRole(
members = persistentListOf( members = persistentListOf(
@ -125,9 +138,5 @@ internal fun aChangeRolesStateWithOwners() = aChangeRolesState(
else -> false else -> false
} }
}, },
selectedUsers = persistentListOf( selectedUsers = selectedUsers.toImmutableList(),
aMatrixUser(id = "@alice:server.org", displayName = "Alice"),
aMatrixUser(id = "@bob:server.org", displayName = "Bob"),
aMatrixUser(id = "@carol:server.org", displayName = "Carol"),
)
) )

View file

@ -30,6 +30,7 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -71,6 +72,7 @@ import io.element.android.libraries.matrix.ui.components.SelectedUsersRowList
import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.matrix.ui.model.getAvatarData
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toImmutableList
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -226,7 +228,18 @@ private fun SearchResultsList(
state = lazyListState, state = lazyListState,
) { ) {
item { item {
selectedUsersList(selectedUsers) val usersInHorizontalRow = remember(searchResults.owners, selectedUsers) {
if (currentRole == RoomMember.Role.Admin) {
// Also include the owners in the horizontal list
val owners = searchResults.owners.map {
it.toMatrixUser()
}
(owners + selectedUsers).toImmutableList()
} else {
selectedUsers
}
}
selectedUsersList(usersInHorizontalRow)
} }
if (searchResults.owners.isNotEmpty()) { if (searchResults.owners.isNotEmpty()) {
stickyHeader { ListSectionHeader(text = stringResource(R.string.screen_room_roles_and_permissions_owners)) } stickyHeader { ListSectionHeader(text = stringResource(R.string.screen_room_roles_and_permissions_owners)) }