Add character sheet access from lexicon list.

This commit is contained in:
Thomas Andres Gomez 2023-12-01 15:16:30 +01:00
parent 4a44d8fc51
commit d6f8ff1445
3 changed files with 42 additions and 12 deletions

View file

@ -2,10 +2,14 @@ package com.pixelized.rplexicon.ui.screens.lexicon.list
import android.content.res.Configuration.UI_MODE_NIGHT_NO
import android.content.res.Configuration.UI_MODE_NIGHT_YES
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
@ -13,6 +17,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
@ -21,10 +26,10 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import androidx.compose.ui.unit.dp
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.ui.theme.LexiconTheme
import com.pixelized.rplexicon.utilitary.LOS_FULL
import com.pixelized.rplexicon.utilitary.LOS_HOLLOW
import com.pixelized.rplexicon.utilitary.extentions.cell
import com.pixelized.rplexicon.utilitary.extentions.lexicon
import com.pixelized.rplexicon.utilitary.extentions.placeholder
import java.util.UUID
@ -62,14 +67,24 @@ data class LexiconItemUio(
fun LexiconItem(
modifier: Modifier = Modifier,
item: LexiconItemUio,
onItem: (LexiconItemUio) -> Unit,
onCharacterSheet: (LexiconItemUio) -> Unit,
) {
val typography = MaterialTheme.lexicon.typography
Box(
modifier = modifier,
contentAlignment = Alignment.CenterStart,
Row(
modifier = modifier
.clickable { item.let(onItem) }
.fillMaxWidth()
.heightIn(min = MaterialTheme.lexicon.dimens.item)
.padding(vertical = 4.dp)
.padding(start = 16.dp, end = 8.dp),
verticalAlignment = Alignment.CenterVertically,
) {
Row(
modifier = Modifier
.weight(weight = 1f)
.padding(end = 8.dp),
horizontalArrangement = Arrangement.spacedBy(space = 4.dp),
) {
Text(
@ -141,6 +156,15 @@ fun LexiconItem(
)
}
}
if (item.isPlayingCharacter) {
IconButton(onClick = { item.let(onCharacterSheet) }) {
Icon(
painter = painterResource(id = R.drawable.ic_d20_24),
contentDescription = null
)
}
}
}
}
@ -154,8 +178,9 @@ private fun LexiconItemPreview(
LexiconTheme {
Surface {
LexiconItem(
modifier = Modifier.cell(),
item = preview
item = preview,
onItem = { },
onCharacterSheet = { }
)
}
}

View file

@ -41,6 +41,7 @@ import com.pixelized.rplexicon.ui.composable.FloatingActionButton
import com.pixelized.rplexicon.ui.composable.Loader
import com.pixelized.rplexicon.ui.composable.error.HandleFetchError
import com.pixelized.rplexicon.ui.navigation.LocalScreenNavHost
import com.pixelized.rplexicon.ui.navigation.screens.navigateToCharacterSheet
import com.pixelized.rplexicon.ui.navigation.screens.navigateToLexiconDetail
import com.pixelized.rplexicon.ui.navigation.screens.navigateToSearch
import com.pixelized.rplexicon.ui.theme.LexiconTheme
@ -87,6 +88,9 @@ fun LexiconScreen(
onItem = {
screen.navigateToLexiconDetail(id = it.id)
},
onCharacterSheet = {
screen.navigateToCharacterSheet(name = it.name)
}
)
HandleFetchError(
@ -106,6 +110,7 @@ private fun LexiconScreenContent(
isFabExpended: State<Boolean>,
onSearch: () -> Unit,
onItem: (LexiconItemUio) -> Unit,
onCharacterSheet: (LexiconItemUio) -> Unit,
) {
Box(
modifier = modifier,
@ -136,10 +141,9 @@ private fun LexiconScreenContent(
contentType = { "Lexicon" },
) {
LexiconItem(
modifier = Modifier
.clickable { onItem(it) }
.cell(),
item = it,
onItem = onItem,
onCharacterSheet = onCharacterSheet
)
}
}
@ -198,6 +202,7 @@ private fun LexiconScreenContentPreview() {
items = rememberLexiconGroupStatePreview(),
onSearch = { },
onItem = { },
onCharacterSheet = { },
)
}
}