Logic to store the currently selected users
This commit is contained in:
parent
341dfb478e
commit
17c65f324f
3 changed files with 23 additions and 5 deletions
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue