Removing default value in ViewState + use ImmutableList type
This commit is contained in:
committed by
Florian Renaud
parent
17c65f324f
commit
c476a29edb
@@ -17,10 +17,14 @@
|
||||
package io.element.android.features.createroom.impl.selectmembers
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.MutableState
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.remember
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import javax.inject.Inject
|
||||
|
||||
// TODO add unit tests
|
||||
@@ -28,16 +32,12 @@ class SelectMembersPresenter @Inject constructor() : Presenter<SelectMembersStat
|
||||
|
||||
@Composable
|
||||
override fun present(): SelectMembersState {
|
||||
val selectedUsers = rememberSaveable { mutableStateOf(emptyList<MatrixUser>()) }
|
||||
val selectedUsers: MutableState<ImmutableList<MatrixUser>> = remember { mutableStateOf(persistentListOf()) }
|
||||
|
||||
fun handleEvents(event: SelectMembersEvents) {
|
||||
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))
|
||||
}
|
||||
is SelectMembersEvents.AddToSelection -> selectedUsers.value = selectedUsers.value.plus(event.matrixUser).toImmutableList()
|
||||
is SelectMembersEvents.RemoveFromSelection -> selectedUsers.value = selectedUsers.value.minus(event.matrixUser).toImmutableList()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,8 +17,9 @@
|
||||
package io.element.android.features.createroom.impl.selectmembers
|
||||
|
||||
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
|
||||
data class SelectMembersState(
|
||||
val selectedUsers: List<MatrixUser> = emptyList(),
|
||||
val selectedUsers: ImmutableList<MatrixUser>,
|
||||
val eventSink: (SelectMembersEvents) -> Unit,
|
||||
)
|
||||
|
||||
@@ -18,16 +18,16 @@ package io.element.android.features.createroom.impl.selectmembers
|
||||
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||
import io.element.android.libraries.designsystem.components.avatar.AvatarData
|
||||
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
|
||||
open class SelectMembersStateProvider : PreviewParameterProvider<SelectMembersState> {
|
||||
override val values: Sequence<SelectMembersState>
|
||||
get() = sequenceOf(
|
||||
aSelectMembersState(),
|
||||
aSelectMembersState().copy(
|
||||
selectedUsers = listOf(
|
||||
selectedUsers = persistentListOf(
|
||||
aMatrixUser(userName = "User"),
|
||||
aMatrixUser(userName = "User with long name"),
|
||||
)
|
||||
@@ -36,9 +36,10 @@ open class SelectMembersStateProvider : PreviewParameterProvider<SelectMembersSt
|
||||
}
|
||||
|
||||
fun aSelectMembersState() = SelectMembersState(
|
||||
selectedUsers = persistentListOf(),
|
||||
eventSink = {}
|
||||
)
|
||||
|
||||
fun aMatrixUser(userName: String): MatrixUser {
|
||||
return MatrixUser(id = UserId("@id"), username = userName, avatarData = AvatarData("@id", "U", size = AvatarSize.BIG))
|
||||
return MatrixUser(id = UserId("@id"), username = userName, avatarData = AvatarData("@id", "U"))
|
||||
}
|
||||
|
||||
@@ -151,6 +151,7 @@ fun SelectedMember(
|
||||
Column(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
// TODO set the size using custom Avatar size set to 56.dp
|
||||
Avatar(matrixUser.avatarData)
|
||||
Text(
|
||||
text = matrixUser.username.orEmpty(),
|
||||
|
||||
Reference in New Issue
Block a user