Using an immutable set for the selected users
This commit is contained in:
parent
25a1c2936d
commit
70a8b7395b
4 changed files with 18 additions and 12 deletions
|
|
@ -18,11 +18,12 @@ package io.element.android.features.selectusers.api
|
||||||
|
|
||||||
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
|
import kotlinx.collections.immutable.ImmutableSet
|
||||||
|
|
||||||
data class SelectUsersState(
|
data class SelectUsersState(
|
||||||
val searchQuery: String,
|
val searchQuery: String,
|
||||||
val searchResults: ImmutableList<MatrixUser>,
|
val searchResults: ImmutableList<MatrixUser>,
|
||||||
val selectedUsers: ImmutableList<MatrixUser>,
|
val selectedUsers: ImmutableSet<MatrixUser>,
|
||||||
val isSearchActive: Boolean,
|
val isSearchActive: Boolean,
|
||||||
val isMultiSelectionEnabled: Boolean,
|
val isMultiSelectionEnabled: Boolean,
|
||||||
val eventSink: (SelectUsersEvents) -> Unit,
|
val eventSink: (SelectUsersEvents) -> Unit,
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
|
import kotlinx.collections.immutable.persistentSetOf
|
||||||
|
|
||||||
open class SelectUsersStateProvider : PreviewParameterProvider<SelectUsersState> {
|
open class SelectUsersStateProvider : PreviewParameterProvider<SelectUsersState> {
|
||||||
override val values: Sequence<SelectUsersState>
|
override val values: Sequence<SelectUsersState>
|
||||||
|
|
@ -31,14 +32,14 @@ open class SelectUsersStateProvider : PreviewParameterProvider<SelectUsersState>
|
||||||
aSelectUsersState().copy(
|
aSelectUsersState().copy(
|
||||||
isSearchActive = true,
|
isSearchActive = true,
|
||||||
searchQuery = "@someone:matrix.org",
|
searchQuery = "@someone:matrix.org",
|
||||||
selectedUsers = aListOfSelectedUsers(),
|
selectedUsers = aSetOfSelectedUsers(),
|
||||||
searchResults = aListOfResults(),
|
searchResults = aListOfResults(),
|
||||||
),
|
),
|
||||||
aSelectUsersState().copy(
|
aSelectUsersState().copy(
|
||||||
isSearchActive = true,
|
isSearchActive = true,
|
||||||
searchQuery = "@someone:matrix.org",
|
searchQuery = "@someone:matrix.org",
|
||||||
isMultiSelectionEnabled = true,
|
isMultiSelectionEnabled = true,
|
||||||
selectedUsers = aListOfSelectedUsers(),
|
selectedUsers = aSetOfSelectedUsers(),
|
||||||
searchResults = aListOfResults(),
|
searchResults = aListOfResults(),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
@ -48,12 +49,12 @@ fun aSelectUsersState() = SelectUsersState(
|
||||||
isSearchActive = false,
|
isSearchActive = false,
|
||||||
searchQuery = "",
|
searchQuery = "",
|
||||||
searchResults = persistentListOf(),
|
searchResults = persistentListOf(),
|
||||||
selectedUsers = persistentListOf(),
|
selectedUsers = persistentSetOf(),
|
||||||
isMultiSelectionEnabled = false,
|
isMultiSelectionEnabled = false,
|
||||||
eventSink = {}
|
eventSink = {}
|
||||||
)
|
)
|
||||||
|
|
||||||
fun aListOfSelectedUsers() = persistentListOf(
|
fun aSetOfSelectedUsers() = persistentSetOf(
|
||||||
MatrixUser(id = UserId("@someone:matrix.org")),
|
MatrixUser(id = UserId("@someone:matrix.org")),
|
||||||
MatrixUser(id = UserId("@someone:matrix.org"), username = "someone"),
|
MatrixUser(id = UserId("@someone:matrix.org"), username = "someone"),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ import io.element.android.libraries.matrix.ui.components.MatrixUserRow
|
||||||
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
||||||
import io.element.android.libraries.matrix.ui.model.getBestName
|
import io.element.android.libraries.matrix.ui.model.getBestName
|
||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
|
import kotlinx.collections.immutable.ImmutableSet
|
||||||
import io.element.android.libraries.ui.strings.R as StringR
|
import io.element.android.libraries.ui.strings.R as StringR
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|
@ -99,7 +100,7 @@ fun SelectUsersView(
|
||||||
fun SearchUserBar(
|
fun SearchUserBar(
|
||||||
query: String,
|
query: String,
|
||||||
results: ImmutableList<MatrixUser>,
|
results: ImmutableList<MatrixUser>,
|
||||||
selectedUsers: ImmutableList<MatrixUser>,
|
selectedUsers: ImmutableSet<MatrixUser>,
|
||||||
active: Boolean,
|
active: Boolean,
|
||||||
isMultiSelectionEnabled: Boolean,
|
isMultiSelectionEnabled: Boolean,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
|
|
@ -192,7 +193,7 @@ fun SearchUserResultItem(
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SelectedUsersList(
|
fun SelectedUsersList(
|
||||||
selectedUsers: List<MatrixUser>,
|
selectedUsers: ImmutableSet<MatrixUser>,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
onUserRemoved: (MatrixUser) -> Unit = {},
|
onUserRemoved: (MatrixUser) -> Unit = {},
|
||||||
) {
|
) {
|
||||||
|
|
@ -200,7 +201,7 @@ fun SelectedUsersList(
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
horizontalArrangement = Arrangement.spacedBy(24.dp),
|
horizontalArrangement = Arrangement.spacedBy(24.dp),
|
||||||
) {
|
) {
|
||||||
items(selectedUsers) { matrixUser ->
|
items(selectedUsers.toList()) { matrixUser ->
|
||||||
SelectedUser(
|
SelectedUser(
|
||||||
matrixUser = matrixUser,
|
matrixUser = matrixUser,
|
||||||
onUserRemoved = onUserRemoved,
|
onUserRemoved = onUserRemoved,
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,11 @@ import io.element.android.libraries.matrix.api.core.MatrixPatterns
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
|
import kotlinx.collections.immutable.ImmutableSet
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
|
import kotlinx.collections.immutable.persistentSetOf
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
import kotlinx.collections.immutable.toImmutableSet
|
||||||
|
|
||||||
interface DefaultSelectUsersPresenter : Presenter<SelectUsersState> {
|
interface DefaultSelectUsersPresenter : Presenter<SelectUsersState> {
|
||||||
|
|
||||||
|
|
@ -41,8 +44,8 @@ interface DefaultSelectUsersPresenter : Presenter<SelectUsersState> {
|
||||||
@Composable
|
@Composable
|
||||||
override fun present(): SelectUsersState {
|
override fun present(): SelectUsersState {
|
||||||
var isSearchActive by rememberSaveable { mutableStateOf(false) }
|
var isSearchActive by rememberSaveable { mutableStateOf(false) }
|
||||||
val selectedUsers: MutableState<ImmutableList<MatrixUser>> = remember {
|
val selectedUsers: MutableState<ImmutableSet<MatrixUser>> = remember {
|
||||||
mutableStateOf(persistentListOf())
|
mutableStateOf(persistentSetOf())
|
||||||
}
|
}
|
||||||
var searchQuery by rememberSaveable { mutableStateOf("") }
|
var searchQuery by rememberSaveable { mutableStateOf("") }
|
||||||
val searchResults: MutableState<ImmutableList<MatrixUser>> = remember {
|
val searchResults: MutableState<ImmutableList<MatrixUser>> = remember {
|
||||||
|
|
@ -53,8 +56,8 @@ interface DefaultSelectUsersPresenter : Presenter<SelectUsersState> {
|
||||||
when (event) {
|
when (event) {
|
||||||
is SelectUsersEvents.OnSearchActiveChanged -> isSearchActive = event.active
|
is SelectUsersEvents.OnSearchActiveChanged -> isSearchActive = event.active
|
||||||
is SelectUsersEvents.UpdateSearchQuery -> searchQuery = event.query
|
is SelectUsersEvents.UpdateSearchQuery -> searchQuery = event.query
|
||||||
is SelectUsersEvents.AddToSelection -> selectedUsers.value = selectedUsers.value.plus(event.matrixUser).toImmutableList()
|
is SelectUsersEvents.AddToSelection -> selectedUsers.value = selectedUsers.value.plus(event.matrixUser).toImmutableSet()
|
||||||
is SelectUsersEvents.RemoveFromSelection -> selectedUsers.value = selectedUsers.value.minus(event.matrixUser).toImmutableList()
|
is SelectUsersEvents.RemoveFromSelection -> selectedUsers.value = selectedUsers.value.minus(event.matrixUser).toImmutableSet()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue