|
@@ -38,6 +38,7 @@ import androidx.compose.runtime.remember
|
|
|
import androidx.compose.runtime.setValue
|
|
|
import androidx.compose.ui.Alignment
|
|
|
import androidx.compose.ui.Modifier
|
|
|
+import androidx.compose.ui.draw.clip
|
|
|
import androidx.compose.ui.draw.shadow
|
|
|
import androidx.compose.ui.geometry.Offset
|
|
|
import androidx.compose.ui.graphics.Brush
|
|
@@ -71,6 +72,9 @@ import coil.compose.AsyncImagePainter
|
|
|
import coil.compose.rememberAsyncImagePainter
|
|
|
import coil.request.ImageRequest
|
|
|
import coil.size.Size
|
|
|
+import com.example.oscellamobile.models.Age_rating
|
|
|
+import com.example.oscellamobile.models.Basic_labels
|
|
|
+import com.example.oscellamobile.models.Label
|
|
|
import org.intellij.lang.annotations.JdkConstants
|
|
|
|
|
|
|
|
@@ -101,12 +105,18 @@ fun MainWindow(navController: NavHostController) {
|
|
|
|
|
|
var games by remember { mutableStateOf<List<Game>>(listOf()) }
|
|
|
var сompany by remember { mutableStateOf<List<Company>>(listOf()) }
|
|
|
+ var labels by remember{ mutableStateOf<List<Label>>(listOf()) }
|
|
|
+ var basiclabels by remember{ mutableStateOf<List<Basic_labels>>(listOf()) }
|
|
|
+ var age by remember{ mutableStateOf<List<Age_rating>>(listOf()) }
|
|
|
|
|
|
LaunchedEffect(Unit) {
|
|
|
withContext(Dispatchers.IO) {
|
|
|
try {
|
|
|
сompany = Constant.supabase.from("Company").select().decodeList<Company>()
|
|
|
games = Constant.supabase.from("Game").select().decodeList<Game>()
|
|
|
+ labels = Constant.supabase.from("Label").select().decodeList<Label>()
|
|
|
+ basiclabels = Constant.supabase.from("Basic_labels").select().decodeList<Basic_labels>()
|
|
|
+ age = Constant.supabase.from("Age_rating").select().decodeList<Age_rating>()
|
|
|
games.forEach { Game ->
|
|
|
Log.d("C", Game.name_game)
|
|
|
}
|
|
@@ -245,10 +255,13 @@ fun MainWindow(navController: NavHostController) {
|
|
|
items(
|
|
|
games,
|
|
|
key = { Game -> Game.id },
|
|
|
- ) { film ->
|
|
|
+ ) { Game ->
|
|
|
GameItem(
|
|
|
- game = film,
|
|
|
- company = сompany
|
|
|
+ game = Game,
|
|
|
+ company = сompany,
|
|
|
+ label = labels,
|
|
|
+ basic = basiclabels,
|
|
|
+ age = age
|
|
|
)
|
|
|
}
|
|
|
}
|
|
@@ -259,84 +272,56 @@ fun MainWindow(navController: NavHostController) {
|
|
|
fun GameItem(
|
|
|
game: Game,
|
|
|
company: List<Company>,
|
|
|
+ label: List<Label>,
|
|
|
+ basic: List<Basic_labels>,
|
|
|
+ age: List<Age_rating>
|
|
|
) {
|
|
|
val imageState = rememberAsyncImagePainter(
|
|
|
model = ImageRequest.Builder(LocalContext.current).data(game.picture)
|
|
|
.size(Size.ORIGINAL).build()
|
|
|
).state
|
|
|
|
|
|
- Card(
|
|
|
- modifier = Modifier
|
|
|
- .padding(20.dp, 10.dp)
|
|
|
- .background(color = Color(0xFFFDFFFC), shape = RoundedCornerShape(15.dp)),
|
|
|
- ) {
|
|
|
- Row {
|
|
|
- Spacer(Modifier.width(10.dp))
|
|
|
- Column {
|
|
|
- val companyId = game.company
|
|
|
- val companyy = company.find { it.id == companyId }
|
|
|
- if (company != null) {
|
|
|
- Text(
|
|
|
- "${companyy?.name_company}",
|
|
|
- fontSize = 20.sp,
|
|
|
- fontFamily = kdamFontFamily,
|
|
|
- color = Color(0xFF2EC4B6)
|
|
|
- )
|
|
|
+ Card(
|
|
|
+ modifier = Modifier
|
|
|
+ .padding(20.dp, 10.dp)
|
|
|
+ .background(color = Color(0xFFFDFFFC), shape = RoundedCornerShape(15.dp)),
|
|
|
+ ) {
|
|
|
+ Row {
|
|
|
+ Spacer(Modifier.width(10.dp))
|
|
|
+ Column {
|
|
|
+ val companyId = game.company
|
|
|
+ val companyy = company.find { it.id == companyId }
|
|
|
+ if (company != null) {
|
|
|
+ Text(
|
|
|
+ "${companyy?.name_company}",
|
|
|
+ fontSize = 20.sp,
|
|
|
+ fontFamily = kdamFontFamily,
|
|
|
+ color = Color(0xFF2EC4B6)
|
|
|
+ )
|
|
|
+ Text(
|
|
|
+ text = "Фэнтези",
|
|
|
+ fontSize = 12.sp,
|
|
|
+ fontFamily = kdamFontFamily,
|
|
|
+ color = Color(0xFFE71D36)
|
|
|
+ )
|
|
|
+ Spacer(Modifier.width(20.dp))
|
|
|
+ Column {
|
|
|
Text(
|
|
|
- text = "Фэнтези",
|
|
|
- fontSize = 12.sp,
|
|
|
+ text = "Основные метки:",
|
|
|
+ fontSize = 14.sp,
|
|
|
fontFamily = kdamFontFamily,
|
|
|
- color = Color(0xFFE71D36)
|
|
|
+ color = Color(0xFF7F807E)
|
|
|
)
|
|
|
- Spacer(Modifier.width(20.dp))
|
|
|
- Column {
|
|
|
- Text(
|
|
|
- text = "Основные метки:",
|
|
|
- fontSize = 14.sp,
|
|
|
- fontFamily = kdamFontFamily,
|
|
|
- color = Color(0xFF7F807E)
|
|
|
- )
|
|
|
- Column(
|
|
|
- Modifier.padding(10.dp)
|
|
|
- ) {
|
|
|
- Box(
|
|
|
- modifier = Modifier
|
|
|
- .width(107.dp)
|
|
|
- .height(22.dp)
|
|
|
- .background(
|
|
|
- color = Color(0xFF2EC4B6),
|
|
|
- shape = RoundedCornerShape(20.dp)
|
|
|
- ),
|
|
|
- contentAlignment = Alignment.Center
|
|
|
- )
|
|
|
- {
|
|
|
- Text(
|
|
|
- text = "Пошаговая",
|
|
|
- color = Color(0xFFFDFFFC),
|
|
|
- fontFamily = caveat,
|
|
|
- fontSize = 20.sp
|
|
|
- )
|
|
|
- }
|
|
|
- Spacer(Modifier.height(7.dp))
|
|
|
- Box(
|
|
|
- modifier = Modifier
|
|
|
- .width(107.dp)
|
|
|
- .height(22.dp)
|
|
|
- .background(
|
|
|
- color = Color(0xFF2EC4B6),
|
|
|
- shape = RoundedCornerShape(20.dp)
|
|
|
- ),
|
|
|
- contentAlignment = Alignment.Center
|
|
|
- )
|
|
|
- {
|
|
|
- Text(
|
|
|
- text = "Ролевая",
|
|
|
- color = Color(0xFFFDFFFC),
|
|
|
- fontFamily = caveat,
|
|
|
- fontSize = 20.sp
|
|
|
- )
|
|
|
- }
|
|
|
- Spacer(Modifier.height(7.dp))
|
|
|
+ Column(
|
|
|
+ ) {
|
|
|
+ val GameID = game.id
|
|
|
+ val labelsForGame = basic.filter { it.id_game == GameID }
|
|
|
+ val labelIds = labelsForGame.map { it.id_label }
|
|
|
+ val labels = labelIds.mapNotNull { id ->
|
|
|
+ label.find { it.id == id }
|
|
|
+ }
|
|
|
+ for (label in labels) {
|
|
|
+ Spacer(modifier = Modifier.padding(7.dp))
|
|
|
Box(
|
|
|
modifier = Modifier
|
|
|
.width(107.dp)
|
|
@@ -349,7 +334,7 @@ fun MainWindow(navController: NavHostController) {
|
|
|
)
|
|
|
{
|
|
|
Text(
|
|
|
- text = "Стратегия",
|
|
|
+ "${label.label_name}",
|
|
|
color = Color(0xFFFDFFFC),
|
|
|
fontFamily = caveat,
|
|
|
fontSize = 20.sp
|
|
@@ -359,77 +344,80 @@ fun MainWindow(navController: NavHostController) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- Column {
|
|
|
- Row {
|
|
|
- Spacer(Modifier.width(45.dp))
|
|
|
- Box(
|
|
|
- modifier = Modifier
|
|
|
- .width(130.dp)
|
|
|
- .height(30.dp)
|
|
|
- .border(
|
|
|
- BorderStroke(2.dp, Color(0x80B0B0B0)),
|
|
|
- shape = RoundedCornerShape(15.dp)
|
|
|
- )
|
|
|
- )
|
|
|
- {
|
|
|
- Text(
|
|
|
- text = if (game.favourites == null) {
|
|
|
- "Избранное: 0"
|
|
|
- } else {
|
|
|
- "Избранное: ${game.favourites}"
|
|
|
- },
|
|
|
- fontSize = 16.sp,
|
|
|
- fontFamily = playfairdisplay,
|
|
|
- color = Color(0xFFFF9F1C),
|
|
|
- modifier = Modifier.align(Alignment.Center)
|
|
|
+ }
|
|
|
+ Column {
|
|
|
+ Row {
|
|
|
+ Spacer(Modifier.width(45.dp))
|
|
|
+ Box(
|
|
|
+ modifier = Modifier
|
|
|
+ .width(130.dp)
|
|
|
+ .height(30.dp)
|
|
|
+ .border(
|
|
|
+ BorderStroke(2.dp, Color(0x80B0B0B0)),
|
|
|
+ shape = RoundedCornerShape(15.dp)
|
|
|
)
|
|
|
- }
|
|
|
- val size = 31.dp
|
|
|
+ )
|
|
|
+ {
|
|
|
+ Text(
|
|
|
+ text = if (game.favourites == null) {
|
|
|
+ "Избранное: 0"
|
|
|
+ } else {
|
|
|
+ "Избранное: ${game.favourites}"
|
|
|
+ },
|
|
|
+ fontSize = 16.sp,
|
|
|
+ fontFamily = playfairdisplay,
|
|
|
+ color = Color(0xFFFF9F1C),
|
|
|
+ modifier = Modifier.align(Alignment.Center)
|
|
|
+ )
|
|
|
+ }
|
|
|
+ val size = 31.dp
|
|
|
|
|
|
- var isOrange by remember { mutableStateOf(false) }
|
|
|
+ var isOrange by remember { mutableStateOf(false) }
|
|
|
|
|
|
- val buttonColor = if (isOrange) Color(0xFFFF9F1C) else Color.Gray
|
|
|
+ val buttonColor = if (isOrange) Color(0xFFFF9F1C) else Color.Gray
|
|
|
|
|
|
- Canvas(
|
|
|
- modifier = Modifier
|
|
|
- .size(30.dp)
|
|
|
- .clickable(onClick = { isOrange = !isOrange })
|
|
|
- ) {
|
|
|
- drawStar(
|
|
|
- center = center,
|
|
|
- radius = size.toPx() / 2,
|
|
|
- color = buttonColor
|
|
|
- )
|
|
|
- }
|
|
|
- }
|
|
|
- Row(
|
|
|
- modifier = Modifier.fillMaxWidth(),
|
|
|
- horizontalArrangement = Arrangement.Center,
|
|
|
- verticalAlignment = Alignment.CenterVertically
|
|
|
+ Canvas(
|
|
|
+ modifier = Modifier
|
|
|
+ .size(30.dp)
|
|
|
+ .clickable(onClick = { isOrange = !isOrange })
|
|
|
) {
|
|
|
- Text(
|
|
|
- game.name_game,
|
|
|
- fontSize = 20.sp,
|
|
|
- fontFamily = kdamFontFamily,
|
|
|
- color = Color(0xFF7F807E),
|
|
|
+ drawStar(
|
|
|
+ center = center,
|
|
|
+ radius = size.toPx() / 2,
|
|
|
+ color = buttonColor
|
|
|
)
|
|
|
- Spacer(Modifier.width(10.dp))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Row(
|
|
|
+ modifier = Modifier.fillMaxWidth(),
|
|
|
+ horizontalArrangement = Arrangement.Center,
|
|
|
+ verticalAlignment = Alignment.CenterVertically
|
|
|
+ ) {
|
|
|
+ Text(
|
|
|
+ game.name_game,
|
|
|
+ fontSize = 20.sp,
|
|
|
+ fontFamily = kdamFontFamily,
|
|
|
+ color = Color(0xFF7F807E),
|
|
|
+ )
|
|
|
+ Spacer(Modifier.width(10.dp))
|
|
|
+ val AgeId = game.age_rating
|
|
|
+ val agee = age.find { it.id == AgeId }
|
|
|
+ if (agee != null) {
|
|
|
Text(
|
|
|
- text = "16+",
|
|
|
+ agee.rating,
|
|
|
fontSize = 20.sp,
|
|
|
fontFamily = kdamFontFamily,
|
|
|
color = Color(0xFFE71D36),
|
|
|
)
|
|
|
}
|
|
|
+ }
|
|
|
if (imageState is AsyncImagePainter.State.Success) {
|
|
|
- {
|
|
|
- }
|
|
|
Image(
|
|
|
painter = imageState.painter,
|
|
|
contentDescription = "Описание изображения",
|
|
|
modifier = Modifier
|
|
|
- .width(300.dp)
|
|
|
- .height(138.dp)
|
|
|
+ .width(280.dp)
|
|
|
+ .clip(RoundedCornerShape(20.dp))
|
|
|
)
|
|
|
}
|
|
|
}
|
|
@@ -523,4 +511,4 @@ fun DrawScope.drawStar(center: Offset, radius: Float, color: Color) {
|
|
|
}
|
|
|
path.close()
|
|
|
drawPath(path, color)
|
|
|
-}
|
|
|
+}
|