Logic to store the currently selected users

This commit is contained in:
Maxime NATUREL 2023-03-13 17:07:36 +01:00 committed by Florian Renaud
parent 341dfb478e
commit 17c65f324f
3 changed files with 23 additions and 5 deletions

View file

@ -16,4 +16,9 @@
package io.element.android.features.createroom.impl.selectmembers package io.element.android.features.createroom.impl.selectmembers
sealed interface SelectMembersEvents import io.element.android.libraries.matrix.ui.model.MatrixUser
sealed interface SelectMembersEvents {
data class AddToSelection(val matrixUser: MatrixUser) : SelectMembersEvents
data class RemoveFromSelection(val matrixUser: MatrixUser) : SelectMembersEvents
}

View file

@ -17,20 +17,33 @@
package io.element.android.features.createroom.impl.selectmembers package io.element.android.features.createroom.impl.selectmembers
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.matrix.ui.model.MatrixUser
import javax.inject.Inject import javax.inject.Inject
// TODO add unit tests
class SelectMembersPresenter @Inject constructor() : Presenter<SelectMembersState> { class SelectMembersPresenter @Inject constructor() : Presenter<SelectMembersState> {
@Composable @Composable
override fun present(): SelectMembersState { override fun present(): SelectMembersState {
val selectedUsers = rememberSaveable { mutableStateOf(emptyList<MatrixUser>()) }
fun handleEvents(event: SelectMembersEvents) { fun handleEvents(event: SelectMembersEvents) {
// do nothing for now when (event) {
is SelectMembersEvents.AddToSelection -> selectedUsers.value = mutableListOf<MatrixUser>().also {
it.addAll(selectedUsers.value.plus(event.matrixUser))
}
is SelectMembersEvents.RemoveFromSelection -> selectedUsers.value = mutableListOf<MatrixUser>().also {
it.addAll(selectedUsers.value.minus(event.matrixUser))
}
}
} }
return SelectMembersState( return SelectMembersState(
eventSink = ::handleEvents selectedUsers = selectedUsers.value,
eventSink = ::handleEvents,
) )
} }
} }

View file

@ -79,12 +79,12 @@ fun SelectMembersView(
.fillMaxSize() .fillMaxSize()
.padding(padding) .padding(padding)
) { ) {
// TODO create a SearchUserView with multi selection option + callbacks
SelectedMembersList( SelectedMembersList(
modifier = Modifier.padding(horizontal = 16.dp), modifier = Modifier.padding(horizontal = 16.dp),
selectedUsers = state.selectedUsers, selectedUsers = state.selectedUsers,
onUserRemoved = { eventSink(SelectMembersEvents.RemoveFromSelection(it)) }
) )
// TODO create ViewEvent to add/remove selected user
// TODO create a SearchUserView with multi selection option + callbacks
} }
} }
} }