Removing default value in ViewState + use ImmutableList type

This commit is contained in:
Maxime NATUREL 2023-03-14 14:31:22 +01:00 committed by Florian Renaud
parent 17c65f324f
commit c476a29edb
4 changed files with 15 additions and 12 deletions

View file

@ -17,10 +17,14 @@
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.MutableState
import androidx.compose.runtime.mutableStateOf 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.architecture.Presenter
import io.element.android.libraries.matrix.ui.model.MatrixUser 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 import javax.inject.Inject
// TODO add unit tests // TODO add unit tests
@ -28,16 +32,12 @@ class SelectMembersPresenter @Inject constructor() : Presenter<SelectMembersStat
@Composable @Composable
override fun present(): SelectMembersState { override fun present(): SelectMembersState {
val selectedUsers = rememberSaveable { mutableStateOf(emptyList<MatrixUser>()) } val selectedUsers: MutableState<ImmutableList<MatrixUser>> = remember { mutableStateOf(persistentListOf()) }
fun handleEvents(event: SelectMembersEvents) { fun handleEvents(event: SelectMembersEvents) {
when (event) { when (event) {
is SelectMembersEvents.AddToSelection -> selectedUsers.value = mutableListOf<MatrixUser>().also { is SelectMembersEvents.AddToSelection -> selectedUsers.value = selectedUsers.value.plus(event.matrixUser).toImmutableList()
it.addAll(selectedUsers.value.plus(event.matrixUser)) is SelectMembersEvents.RemoveFromSelection -> selectedUsers.value = selectedUsers.value.minus(event.matrixUser).toImmutableList()
}
is SelectMembersEvents.RemoveFromSelection -> selectedUsers.value = mutableListOf<MatrixUser>().also {
it.addAll(selectedUsers.value.minus(event.matrixUser))
}
} }
} }

View file

@ -17,8 +17,9 @@
package io.element.android.features.createroom.impl.selectmembers package io.element.android.features.createroom.impl.selectmembers
import io.element.android.libraries.matrix.ui.model.MatrixUser import io.element.android.libraries.matrix.ui.model.MatrixUser
import kotlinx.collections.immutable.ImmutableList
data class SelectMembersState( data class SelectMembersState(
val selectedUsers: List<MatrixUser> = emptyList(), val selectedUsers: ImmutableList<MatrixUser>,
val eventSink: (SelectMembersEvents) -> Unit, val eventSink: (SelectMembersEvents) -> Unit,
) )

View file

@ -18,16 +18,16 @@ package io.element.android.features.createroom.impl.selectmembers
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.components.avatar.AvatarData 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.api.core.UserId
import io.element.android.libraries.matrix.ui.model.MatrixUser import io.element.android.libraries.matrix.ui.model.MatrixUser
import kotlinx.collections.immutable.persistentListOf
open class SelectMembersStateProvider : PreviewParameterProvider<SelectMembersState> { open class SelectMembersStateProvider : PreviewParameterProvider<SelectMembersState> {
override val values: Sequence<SelectMembersState> override val values: Sequence<SelectMembersState>
get() = sequenceOf( get() = sequenceOf(
aSelectMembersState(), aSelectMembersState(),
aSelectMembersState().copy( aSelectMembersState().copy(
selectedUsers = listOf( selectedUsers = persistentListOf(
aMatrixUser(userName = "User"), aMatrixUser(userName = "User"),
aMatrixUser(userName = "User with long name"), aMatrixUser(userName = "User with long name"),
) )
@ -36,9 +36,10 @@ open class SelectMembersStateProvider : PreviewParameterProvider<SelectMembersSt
} }
fun aSelectMembersState() = SelectMembersState( fun aSelectMembersState() = SelectMembersState(
selectedUsers = persistentListOf(),
eventSink = {} eventSink = {}
) )
fun aMatrixUser(userName: String): MatrixUser { 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"))
} }

View file

@ -151,6 +151,7 @@ fun SelectedMember(
Column( Column(
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
) { ) {
// TODO set the size using custom Avatar size set to 56.dp
Avatar(matrixUser.avatarData) Avatar(matrixUser.avatarData)
Text( Text(
text = matrixUser.username.orEmpty(), text = matrixUser.username.orEmpty(),