Add topic and room name to the state
This commit is contained in:
parent
97ade693f5
commit
470afea802
5 changed files with 32 additions and 8 deletions
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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 = {}
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue