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
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()
}
}

View File

@@ -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,
)

View File

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

View File

@@ -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(),