diff --git a/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersState.kt b/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersState.kt index 4be92a0003..6d1b1e5757 100644 --- a/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersState.kt +++ b/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersState.kt @@ -18,11 +18,12 @@ package io.element.android.features.selectusers.api import io.element.android.libraries.matrix.ui.model.MatrixUser import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.ImmutableSet data class SelectUsersState( val searchQuery: String, val searchResults: ImmutableList, - val selectedUsers: ImmutableList, + val selectedUsers: ImmutableSet, val isSearchActive: Boolean, val isMultiSelectionEnabled: Boolean, val eventSink: (SelectUsersEvents) -> Unit, diff --git a/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersStateProvider.kt b/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersStateProvider.kt index 0b57957afa..6bc7c40b1e 100644 --- a/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersStateProvider.kt +++ b/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersStateProvider.kt @@ -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.ui.model.MatrixUser import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.persistentSetOf open class SelectUsersStateProvider : PreviewParameterProvider { override val values: Sequence @@ -31,14 +32,14 @@ open class SelectUsersStateProvider : PreviewParameterProvider aSelectUsersState().copy( isSearchActive = true, searchQuery = "@someone:matrix.org", - selectedUsers = aListOfSelectedUsers(), + selectedUsers = aSetOfSelectedUsers(), searchResults = aListOfResults(), ), aSelectUsersState().copy( isSearchActive = true, searchQuery = "@someone:matrix.org", isMultiSelectionEnabled = true, - selectedUsers = aListOfSelectedUsers(), + selectedUsers = aSetOfSelectedUsers(), searchResults = aListOfResults(), ) ) @@ -48,12 +49,12 @@ fun aSelectUsersState() = SelectUsersState( isSearchActive = false, searchQuery = "", searchResults = persistentListOf(), - selectedUsers = persistentListOf(), + selectedUsers = persistentSetOf(), isMultiSelectionEnabled = false, eventSink = {} ) -fun aListOfSelectedUsers() = persistentListOf( +fun aSetOfSelectedUsers() = persistentSetOf( MatrixUser(id = UserId("@someone:matrix.org")), MatrixUser(id = UserId("@someone:matrix.org"), username = "someone"), ) diff --git a/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersView.kt b/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersView.kt index 5dc17b717a..f04ad011de 100644 --- a/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersView.kt +++ b/features/selectusers/api/src/main/kotlin/io/element/android/features/selectusers/api/SelectUsersView.kt @@ -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.getBestName import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.ImmutableSet import io.element.android.libraries.ui.strings.R as StringR @Composable @@ -99,7 +100,7 @@ fun SelectUsersView( fun SearchUserBar( query: String, results: ImmutableList, - selectedUsers: ImmutableList, + selectedUsers: ImmutableSet, active: Boolean, isMultiSelectionEnabled: Boolean, modifier: Modifier = Modifier, @@ -192,7 +193,7 @@ fun SearchUserResultItem( @Composable fun SelectedUsersList( - selectedUsers: List, + selectedUsers: ImmutableSet, modifier: Modifier = Modifier, onUserRemoved: (MatrixUser) -> Unit = {}, ) { @@ -200,7 +201,7 @@ fun SelectedUsersList( modifier = modifier, horizontalArrangement = Arrangement.spacedBy(24.dp), ) { - items(selectedUsers) { matrixUser -> + items(selectedUsers.toList()) { matrixUser -> SelectedUser( matrixUser = matrixUser, onUserRemoved = onUserRemoved, diff --git a/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt b/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt index 69cec08433..77e3c6f6c5 100644 --- a/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt +++ b/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt @@ -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.ui.model.MatrixUser import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.ImmutableSet import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.persistentSetOf import kotlinx.collections.immutable.toImmutableList +import kotlinx.collections.immutable.toImmutableSet interface DefaultSelectUsersPresenter : Presenter { @@ -41,8 +44,8 @@ interface DefaultSelectUsersPresenter : Presenter { @Composable override fun present(): SelectUsersState { var isSearchActive by rememberSaveable { mutableStateOf(false) } - val selectedUsers: MutableState> = remember { - mutableStateOf(persistentListOf()) + val selectedUsers: MutableState> = remember { + mutableStateOf(persistentSetOf()) } var searchQuery by rememberSaveable { mutableStateOf("") } val searchResults: MutableState> = remember { @@ -53,8 +56,8 @@ interface DefaultSelectUsersPresenter : Presenter { when (event) { is SelectUsersEvents.OnSearchActiveChanged -> isSearchActive = event.active is SelectUsersEvents.UpdateSearchQuery -> searchQuery = event.query - is SelectUsersEvents.AddToSelection -> selectedUsers.value = selectedUsers.value.plus(event.matrixUser).toImmutableList() - is SelectUsersEvents.RemoveFromSelection -> selectedUsers.value = selectedUsers.value.minus(event.matrixUser).toImmutableList() + is SelectUsersEvents.AddToSelection -> selectedUsers.value = selectedUsers.value.plus(event.matrixUser).toImmutableSet() + is SelectUsersEvents.RemoveFromSelection -> selectedUsers.value = selectedUsers.value.minus(event.matrixUser).toImmutableSet() } }