use list instead of set
This commit is contained in:
parent
6f299dd7f9
commit
4f6acc12a2
6 changed files with 32 additions and 36 deletions
|
|
@ -40,11 +40,8 @@ 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
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
|
|
@ -62,8 +59,8 @@ class DefaultSelectUsersPresenter @AssistedInject constructor(
|
|||
override fun present(): SelectUsersState {
|
||||
val localCoroutineScope = rememberCoroutineScope()
|
||||
var isSearchActive by rememberSaveable { mutableStateOf(false) }
|
||||
val selectedUsers: MutableState<ImmutableSet<MatrixUser>> = remember {
|
||||
mutableStateOf(persistentSetOf())
|
||||
val selectedUsers: MutableState<ImmutableList<MatrixUser>> = remember {
|
||||
mutableStateOf(persistentListOf())
|
||||
}
|
||||
val selectedUsersListState = rememberLazyListState()
|
||||
var searchQuery by rememberSaveable { mutableStateOf("") }
|
||||
|
|
@ -76,10 +73,12 @@ class DefaultSelectUsersPresenter @AssistedInject constructor(
|
|||
is SelectUsersEvents.OnSearchActiveChanged -> isSearchActive = event.active
|
||||
is SelectUsersEvents.UpdateSearchQuery -> searchQuery = event.query
|
||||
is SelectUsersEvents.AddToSelection -> {
|
||||
selectedUsers.value = selectedUsers.value.plus(event.matrixUser).toImmutableSet()
|
||||
if (event.matrixUser !in selectedUsers.value) {
|
||||
selectedUsers.value = selectedUsers.value.plus(event.matrixUser).toImmutableList()
|
||||
}
|
||||
localCoroutineScope.scrollToFirstSelectedUser(selectedUsersListState)
|
||||
}
|
||||
is SelectUsersEvents.RemoveFromSelection -> selectedUsers.value = selectedUsers.value.minus(event.matrixUser).toImmutableSet()
|
||||
is SelectUsersEvents.RemoveFromSelection -> selectedUsers.value = selectedUsers.value.minus(event.matrixUser).toImmutableList()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -99,7 +98,7 @@ class DefaultSelectUsersPresenter @AssistedInject constructor(
|
|||
return SelectUsersState(
|
||||
searchQuery = searchQuery,
|
||||
searchResults = searchResults.value,
|
||||
selectedUsers = selectedUsers.value.reversed().toImmutableSet(),
|
||||
selectedUsers = selectedUsers.value.reversed().toImmutableList(),
|
||||
selectedUsersListState = selectedUsersListState,
|
||||
isSearchActive = isSearchActive,
|
||||
selectionMode = args.selectionMode,
|
||||
|
|
|
|||
|
|
@ -105,27 +105,27 @@ class DefaultSelectUsersPresenterTests {
|
|||
|
||||
val userA = aMatrixUser("userA", "A")
|
||||
val userB = aMatrixUser("userB", "B")
|
||||
val userABis = aMatrixUser("userA", "A")
|
||||
val userC = aMatrixUser("userC", "C")
|
||||
|
||||
initialState.eventSink(SelectUsersEvents.AddToSelection(userA))
|
||||
val selectionAfterAddingA = awaitItem().selectedUsers
|
||||
assertThat(selectionAfterAddingA).hasSize(1)
|
||||
assertThat(selectionAfterAddingA).contains(userA)
|
||||
assertThat(awaitItem().selectedUsers).containsExactly(userA)
|
||||
|
||||
initialState.eventSink(SelectUsersEvents.AddToSelection(userB))
|
||||
val selectionAfterAddingB = awaitItem().selectedUsers
|
||||
assertThat(selectionAfterAddingB).hasSize(2)
|
||||
assertThat(selectionAfterAddingB).contains(userA)
|
||||
assertThat(selectionAfterAddingB).contains(userB)
|
||||
// the last added user should be presented first
|
||||
assertThat(selectionAfterAddingB.first()).isEqualTo(userB)
|
||||
assertThat(awaitItem().selectedUsers).containsExactly(userB, userA)
|
||||
|
||||
initialState.eventSink(SelectUsersEvents.AddToSelection(userABis))
|
||||
initialState.eventSink(SelectUsersEvents.AddToSelection(userC))
|
||||
// duplicated users should be ignored
|
||||
assertThat(awaitItem().selectedUsers).containsExactly(userC, userB, userA)
|
||||
|
||||
initialState.eventSink(SelectUsersEvents.RemoveFromSelection(userB))
|
||||
val selectionAfterRemovingB = awaitItem().selectedUsers
|
||||
assertThat(selectionAfterRemovingB).hasSize(1)
|
||||
assertThat(selectionAfterRemovingB).contains(userA)
|
||||
|
||||
assertThat(awaitItem().selectedUsers).containsExactly(userC, userA)
|
||||
initialState.eventSink(SelectUsersEvents.RemoveFromSelection(userA))
|
||||
val selectionAfterRemovingA = awaitItem().selectedUsers
|
||||
assertThat(selectionAfterRemovingA).isEmpty()
|
||||
assertThat(awaitItem().selectedUsers).containsExactly(userC)
|
||||
initialState.eventSink(SelectUsersEvents.RemoveFromSelection(userC))
|
||||
assertThat(awaitItem().selectedUsers).isEmpty()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue