Quiztable/src/main/kotlin/components/TopicRow.kt

67 lines
2.1 KiB
Kotlin

package components
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.em
import data.Player
import data.QuestionData
import data.Topic
import data.toColorOrDefault
@Composable
@Suppress("FunctionName")
fun TopicRow(
topic: Topic,
secondRoundDouble: Boolean,
users: List<Player>,
columnFraction: Float,
questionsResolved: Map<QuestionData, QuestionResolution>,
onPointsChange: (Player, Long) -> Unit,
onResolveQuestion: (QuestionData, QuestionResolution) -> Unit,
) {
val topicColor = topic.color.toColorOrDefault()
Column(
modifier = Modifier.fillMaxHeight()
.fillMaxWidth(columnFraction)
) {
val numberOfButtons = topic.questions.size
Box(
modifier = Modifier.fillMaxWidth()
.fillMaxHeight(0.1f),
contentAlignment = Alignment.Center
) {
Text(
text = topic.topic,
fontSize = (2.5).em
)
}
Column(
modifier = Modifier.fillMaxWidth()
.fillMaxHeight(1f)
) {
for ((index, question) in topic.questions.withIndex()) {
val buttonHeightFraction = 1f / (numberOfButtons - index)
Question(
questionData = question,
topic = topic,
secondRoundDouble = secondRoundDouble,
players = users,
questionResolved = questionsResolved[question]
?: error("No resolution found for question ${question.hint}"),
heightFraction = buttonHeightFraction,
color = topicColor,
onPointsChange = onPointsChange,
onResolve = onResolveQuestion
)
}
}
}
}