Pass item to RoomPrivacyOption

This commit is contained in:
Florian Renaud 2023-04-13 18:06:17 +02:00
parent 878b9ccf33
commit 54b76078a8

View file

@ -111,7 +111,7 @@ fun ConfigureRoomView(
RoomPrivacyOptions( RoomPrivacyOptions(
modifier = Modifier.padding(bottom = 40.dp), modifier = Modifier.padding(bottom = 40.dp),
selected = state.privacy, selected = state.privacy,
onOptionSelected = { state.eventSink(ConfigureRoomEvents.RoomPrivacyChanged(it)) }, onOptionSelected = { state.eventSink(ConfigureRoomEvents.RoomPrivacyChanged(it.privacy)) },
) )
} }
} }
@ -228,20 +228,19 @@ fun RoomTopic(
) )
} }
data class RoomPrivacyItem(
val privacy: RoomPrivacy,
val icon: ImageVector,
val title: String,
val description: String,
)
@Composable @Composable
fun RoomPrivacyOptions( fun RoomPrivacyOptions(
selected: RoomPrivacy?, selected: RoomPrivacy?,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
onOptionSelected: (RoomPrivacy) -> Unit = {}, onOptionSelected: (RoomPrivacyItem) -> Unit = {},
) { ) {
data class RoomPrivacyItem(
val privacy: RoomPrivacy,
val icon: ImageVector,
val title: String,
val description: String,
)
val items = RoomPrivacy.values().map { val items = RoomPrivacy.values().map {
when (it) { when (it) {
RoomPrivacy.Public -> RoomPrivacyItem( RoomPrivacy.Public -> RoomPrivacyItem(
@ -261,10 +260,7 @@ fun RoomPrivacyOptions(
Column(modifier = modifier.selectableGroup()) { Column(modifier = modifier.selectableGroup()) {
items.forEach { item -> items.forEach { item ->
RoomPrivacyOption( RoomPrivacyOption(
privacy = item.privacy, roomPrivacyItem = item,
icon = item.icon,
title = item.title,
description = item.description,
isSelected = selected == item.privacy, isSelected = selected == item.privacy,
onOptionSelected = onOptionSelected, onOptionSelected = onOptionSelected,
) )
@ -274,27 +270,24 @@ fun RoomPrivacyOptions(
@Composable @Composable
fun RoomPrivacyOption( fun RoomPrivacyOption(
privacy: RoomPrivacy, roomPrivacyItem: RoomPrivacyItem,
icon: ImageVector,
title: String,
description: String,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
isSelected: Boolean = false, isSelected: Boolean = false,
onOptionSelected: (RoomPrivacy) -> Unit = {}, onOptionSelected: (RoomPrivacyItem) -> Unit = {},
) { ) {
Row( Row(
modifier modifier
.fillMaxWidth() .fillMaxWidth()
.selectable( .selectable(
selected = isSelected, selected = isSelected,
onClick = { onOptionSelected(privacy) }, onClick = { onOptionSelected(roomPrivacyItem) },
role = Role.RadioButton, role = Role.RadioButton,
) )
.padding(8.dp), .padding(8.dp),
) { ) {
Icon( Icon(
modifier = Modifier.padding(horizontal = 8.dp), modifier = Modifier.padding(horizontal = 8.dp),
imageVector = icon, imageVector = roomPrivacyItem.icon,
contentDescription = "", contentDescription = "",
tint = MaterialTheme.colorScheme.secondary, tint = MaterialTheme.colorScheme.secondary,
) )
@ -305,13 +298,13 @@ fun RoomPrivacyOption(
.padding(horizontal = 8.dp) .padding(horizontal = 8.dp)
) { ) {
Text( Text(
text = title, text = roomPrivacyItem.title,
fontSize = 16.sp, fontSize = 16.sp,
color = MaterialTheme.colorScheme.primary, color = MaterialTheme.colorScheme.primary,
) )
Spacer(Modifier.size(3.dp)) Spacer(Modifier.size(3.dp))
Text( Text(
text = description, text = roomPrivacyItem.description,
fontSize = 12.sp, fontSize = 12.sp,
lineHeight = 17.sp, lineHeight = 17.sp,
color = MaterialTheme.colorScheme.tertiary, color = MaterialTheme.colorScheme.tertiary,