Removing default value in ViewState + use ImmutableList type
This commit is contained in:
parent
17c65f324f
commit
c476a29edb
4 changed files with 15 additions and 12 deletions
|
|
@ -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))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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"))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue