diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/selectmembers/SelectMembersEvents.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/selectmembers/SelectMembersEvents.kt index b751e9249e..7343cb3377 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/selectmembers/SelectMembersEvents.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/selectmembers/SelectMembersEvents.kt @@ -16,4 +16,9 @@ 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 +} diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/selectmembers/SelectMembersPresenter.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/selectmembers/SelectMembersPresenter.kt index a434656298..ac8616985d 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/selectmembers/SelectMembersPresenter.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/selectmembers/SelectMembersPresenter.kt @@ -17,20 +17,33 @@ package io.element.android.features.createroom.impl.selectmembers 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.matrix.ui.model.MatrixUser import javax.inject.Inject +// TODO add unit tests class SelectMembersPresenter @Inject constructor() : Presenter { @Composable override fun present(): SelectMembersState { + val selectedUsers = rememberSaveable { mutableStateOf(emptyList()) } fun handleEvents(event: SelectMembersEvents) { - // do nothing for now + when (event) { + is SelectMembersEvents.AddToSelection -> selectedUsers.value = mutableListOf().also { + it.addAll(selectedUsers.value.plus(event.matrixUser)) + } + is SelectMembersEvents.RemoveFromSelection -> selectedUsers.value = mutableListOf().also { + it.addAll(selectedUsers.value.minus(event.matrixUser)) + } + } } return SelectMembersState( - eventSink = ::handleEvents + selectedUsers = selectedUsers.value, + eventSink = ::handleEvents, ) } } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/selectmembers/SelectMembersView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/selectmembers/SelectMembersView.kt index a0a313b727..9ff946f98f 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/selectmembers/SelectMembersView.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/selectmembers/SelectMembersView.kt @@ -79,12 +79,12 @@ fun SelectMembersView( .fillMaxSize() .padding(padding) ) { + // TODO create a SearchUserView with multi selection option + callbacks SelectedMembersList( modifier = Modifier.padding(horizontal = 16.dp), 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 } } }