Logic to store the currently selected users
This commit is contained in:
committed by
Florian Renaud
parent
341dfb478e
commit
17c65f324f
@@ -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
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user