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
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
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<SelectMembersState> {
@Composable
override fun present(): SelectMembersState {
val selectedUsers = rememberSaveable { mutableStateOf(emptyList<MatrixUser>()) }
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(
eventSink = ::handleEvents
selectedUsers = selectedUsers.value,
eventSink = ::handleEvents,
)
}
}

View File

@@ -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
}
}
}