Add topic and room name to the state

This commit is contained in:
Florian Renaud 2023-04-04 17:41:31 +02:00
parent 97ade693f5
commit 470afea802
5 changed files with 32 additions and 8 deletions

View file

@ -16,7 +16,10 @@
package io.element.android.features.createroom.impl.configureroom package io.element.android.features.createroom.impl.configureroom
// TODO Add your events or remove the file completely if no events import android.net.Uri
sealed interface ConfigureRoomEvents { sealed interface ConfigureRoomEvents {
object MyEvent : ConfigureRoomEvents data class RoomNameChanged(val name: String) : ConfigureRoomEvents
data class TopicChanged(val topic: String) : ConfigureRoomEvents
data class AvatarUriChanged(val uri: Uri?) : ConfigureRoomEvents
} }

View file

@ -16,7 +16,12 @@
package io.element.android.features.createroom.impl.configureroom package io.element.android.features.createroom.impl.configureroom
import android.net.Uri
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
@ -34,16 +39,23 @@ class ConfigureRoomPresenter @AssistedInject constructor(
@Composable @Composable
override fun present(): ConfigureRoomState { override fun present(): ConfigureRoomState {
var roomName by rememberSaveable { mutableStateOf("") }
var topic by rememberSaveable { mutableStateOf("") }
var avatarUri by rememberSaveable { mutableStateOf<Uri?>(null) }
fun handleEvents(event: ConfigureRoomEvents) { fun handleEvents(event: ConfigureRoomEvents) {
when (event) { when (event) {
ConfigureRoomEvents.MyEvent -> Unit is ConfigureRoomEvents.AvatarUriChanged -> avatarUri = event.uri
is ConfigureRoomEvents.RoomNameChanged -> roomName = event.name
is ConfigureRoomEvents.TopicChanged -> topic = event.topic
} }
} }
return ConfigureRoomState( return ConfigureRoomState(
selectedUsers = args.selectedUsers.toImmutableList(), selectedUsers = args.selectedUsers.toImmutableList(),
avatarUri = null, roomName = roomName,
topic = topic,
avatarUri = avatarUri,
eventSink = ::handleEvents, eventSink = ::handleEvents,
) )
} }

View file

@ -22,6 +22,8 @@ import kotlinx.collections.immutable.ImmutableList
data class ConfigureRoomState( data class ConfigureRoomState(
val selectedUsers: ImmutableList<MatrixUser>, val selectedUsers: ImmutableList<MatrixUser>,
val roomName: String,
val topic: String,
val avatarUri: Uri?, val avatarUri: Uri?,
val eventSink: (ConfigureRoomEvents) -> Unit val eventSink: (ConfigureRoomEvents) -> Unit
) )

View file

@ -30,6 +30,8 @@ open class ConfigureRoomStateProvider : PreviewParameterProvider<ConfigureRoomSt
fun aConfigureRoomState() = ConfigureRoomState( fun aConfigureRoomState() = ConfigureRoomState(
selectedUsers = aMatrixUserList().toImmutableList(), selectedUsers = aMatrixUserList().toImmutableList(),
roomName = "",
topic = "",
avatarUri = null, avatarUri = null,
eventSink = {} eventSink = {}
) )

View file

@ -81,9 +81,14 @@ fun ConfigureRoomView(
) { ) {
RoomNameWithAvatar( RoomNameWithAvatar(
modifier = Modifier.padding(horizontal = 16.dp), modifier = Modifier.padding(horizontal = 16.dp),
avatarUri = state.avatarUri,
roomName = state.roomName,
onRoomNameChanged = { state.eventSink(ConfigureRoomEvents.RoomNameChanged(it)) },
) )
RoomTopic( RoomTopic(
modifier = Modifier.padding(horizontal = 16.dp), modifier = Modifier.padding(horizontal = 16.dp),
topic = state.topic,
onTopicChanged = { state.eventSink(ConfigureRoomEvents.TopicChanged(it)) },
) )
SelectedUsersList( SelectedUsersList(
listState = LazyListState(), // FIXME listState = LazyListState(), // FIXME
@ -133,8 +138,8 @@ fun ConfigureRoomToolbar(
@Composable @Composable
fun RoomNameWithAvatar( fun RoomNameWithAvatar(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
avatarUri: Uri? = null, avatarUri: Uri?,
roomName: String = "", roomName: String,
onAvatarClick: () -> Unit = {}, onAvatarClick: () -> Unit = {},
onRoomNameChanged: (String) -> Unit = {}, onRoomNameChanged: (String) -> Unit = {},
) { ) {
@ -170,7 +175,7 @@ fun RoomNameWithAvatar(
@Composable @Composable
fun Avatar( fun Avatar(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
avatarUri: Uri? = null, avatarUri: Uri?,
onClick: () -> Unit = {}, onClick: () -> Unit = {},
) { ) {
val commonModifier = modifier val commonModifier = modifier
@ -208,7 +213,7 @@ fun Avatar(
@Composable @Composable
fun RoomTopic( fun RoomTopic(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
topic: String = "", topic: String,
onTopicChanged: (String) -> Unit = {}, onTopicChanged: (String) -> Unit = {},
) { ) {
Column( Column(