diff --git a/app/src/main/java/com/example/testktor/ViewModel/MainViewModel.kt b/app/src/main/java/com/example/testktor/ViewModel/MainViewModel.kt index b44cc34..095ec5b 100644 --- a/app/src/main/java/com/example/testktor/ViewModel/MainViewModel.kt +++ b/app/src/main/java/com/example/testktor/ViewModel/MainViewModel.kt @@ -1,6 +1,7 @@ package com.example.testktor.ViewModel import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateMapOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -17,11 +18,11 @@ class MainViewModel : ViewModel() { var sneakersCategories by mutableStateOf(SneakerCategoryResponse(emptyList(), emptyList())) private set - private val client = HttpClient(Android) - -// var selectedCategory by mutableStateOf(null) var selectedCategory by mutableStateOf(null) + var likedSneakers = mutableStateMapOf() + + private val client = HttpClient(Android) init { viewModelScope.launch { @@ -29,6 +30,14 @@ class MainViewModel : ViewModel() { } } + fun toggleLike(sneakerId: Int) { + likedSneakers[sneakerId] = !(likedSneakers[sneakerId] ?: false) + } + + fun isLiked(sneakerId: Int): Boolean { + return likedSneakers[sneakerId] ?: false + } + fun refreshData() { viewModelScope.launch { sneakersCategories = getSneakers(client) ?: SneakerCategoryResponse(emptyList(), emptyList()) diff --git a/app/src/main/java/com/example/testktor/method/main/CategorySneakersMethods.kt b/app/src/main/java/com/example/testktor/method/main/CategorySneakersMethods.kt index da0fd35..4b9df07 100644 --- a/app/src/main/java/com/example/testktor/method/main/CategorySneakersMethods.kt +++ b/app/src/main/java/com/example/testktor/method/main/CategorySneakersMethods.kt @@ -1,5 +1,6 @@ package com.example.testktor.method.main +import android.util.Log import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -48,7 +49,7 @@ fun TopWriteNavigationBar(navController: NavController, message: String, viewMod } @Composable -fun SneakerCategorySelection(sneakers: List) { +fun SneakerCategorySelection(sneakers: List, viewModel: MainViewModel) { Column(modifier = Modifier.fillMaxWidth()) { sneakers.chunked(2).forEach { sneakerPair -> Row( @@ -60,8 +61,13 @@ fun SneakerCategorySelection(sneakers: List) { sneakerPair.forEach { sneakerShop -> SneakerButton( sneakerShop = sneakerShop, - onClick = { /* TODO */ }, - onFavoriteClick = { /* TODO */ } + isLiked = viewModel.isLiked(sneakerShop.sneaker.id), + onClick = { /* TODO: Действие кнопки */ }, + onFavoriteClick = { + viewModel.toggleLike(sneakerShop.sneaker.id) + val likedCount = viewModel.likedSneakers.values.count { it } + Log.d("SneakerLike", "Лайкнуто кроссовок: $likedCount") + } ) } } diff --git a/app/src/main/java/com/example/testktor/method/main/MainSneakersMethods.kt b/app/src/main/java/com/example/testktor/method/main/MainSneakersMethods.kt index c9a73bc..2a00339 100644 --- a/app/src/main/java/com/example/testktor/method/main/MainSneakersMethods.kt +++ b/app/src/main/java/com/example/testktor/method/main/MainSneakersMethods.kt @@ -1,5 +1,6 @@ package com.example.testktor.method.main +import android.util.Log import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -56,6 +57,7 @@ import coil.compose.AsyncImage import com.example.testktor.Category import com.example.testktor.R import com.example.testktor.SneakerShop +import com.example.testktor.ViewModel.MainViewModel @Preview(showBackground = true) @Composable @@ -310,7 +312,7 @@ fun CategoryButton(category: Category, isSelected: Boolean, onClick: () -> Unit) } @Composable -fun SneakerSelection(sneakers: List) { +fun SneakerSelection(sneakers: List, viewModel: MainViewModel) { Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly @@ -318,18 +320,26 @@ fun SneakerSelection(sneakers: List) { sneakers.take(2).forEachIndexed { index ,sneakerShop -> SneakerButton( sneakerShop = sneakerShop, - onClick = { /* TODO: Действие кнопки */ }, - onFavoriteClick = { /* TODO: Действие кнопки */ } + isLiked = viewModel.isLiked(sneakerShop.sneaker.id), + onClick = { /* переход */ }, +// onFavoriteClick = { viewModel.toggleLike(sneakerShop.sneaker.id) } + onFavoriteClick = { + viewModel.toggleLike(sneakerShop.sneaker.id) + val likedCount = viewModel.likedSneakers.values.count { it } + Log.d("SneakerLike", "Лайкнуто кроссовок: $likedCount") + } ) } } } @Composable -fun SneakerButton(sneakerShop: SneakerShop, onClick: () -> Unit, onFavoriteClick: () -> Unit) { - val cost = "₽${sneakerShop.sneaker.cost}" - - var isLiked by remember { mutableStateOf(false) } +fun SneakerButton( + sneakerShop: SneakerShop, + isLiked: Boolean, + onClick: () -> Unit, + onFavoriteClick: () -> Unit +) { var isAddedToCart by remember { mutableStateOf(false) } Box(modifier = Modifier.padding(8.dp)) { @@ -352,19 +362,19 @@ fun SneakerButton(sneakerShop: SneakerShop, onClick: () -> Unit, onFavoriteClick .height(90.dp) ) Text(text = sneakerShop.sneaker.name, fontSize = 20.sp, color = Color.DarkGray) - Text(text = cost, fontSize = 15.sp, color = Color.Black) + Text(text = "₽${sneakerShop.sneaker.cost}", fontSize = 15.sp, color = Color.Black) } } IconButton( - onClick = {isLiked = !isLiked}, + onClick = onFavoriteClick, modifier = Modifier .align(Alignment.TopStart) .size(28.dp) .padding(4.dp) ) { - val iconRes = if (sneakerShop.likeOrNot) Icons.Default.Favorite else Icons.Default.FavoriteBorder - Icon(imageVector = iconRes, contentDescription = "Favourite", tint = Color.Red) + val icon = if (isLiked) Icons.Default.Favorite else Icons.Default.FavoriteBorder + Icon(imageVector = icon, contentDescription = "Favourite", tint = Color.Red) } IconButton( @@ -377,7 +387,7 @@ fun SneakerButton(sneakerShop: SneakerShop, onClick: () -> Unit, onFavoriteClick .padding(4.dp) ) { val iconRes = if (isAddedToCart) Icons.Default.ShoppingCart else Icons.Default.Add - Icon(imageVector = iconRes, contentDescription = "Favourite", tint = Color.Cyan) + Icon(imageVector = iconRes, contentDescription = "Cart", tint = Color.Cyan) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/testktor/screen/main/CategorySneakersScreen.kt b/app/src/main/java/com/example/testktor/screen/main/CategorySneakersScreen.kt index 6b30237..0f63579 100644 --- a/app/src/main/java/com/example/testktor/screen/main/CategorySneakersScreen.kt +++ b/app/src/main/java/com/example/testktor/screen/main/CategorySneakersScreen.kt @@ -63,6 +63,6 @@ fun CategorySneakersContent( } ) - SneakerCategorySelection(sneakers) + SneakerCategorySelection(sneakers, viewModel) } } diff --git a/app/src/main/java/com/example/testktor/screen/main/MainSneakersScreen.kt b/app/src/main/java/com/example/testktor/screen/main/MainSneakersScreen.kt index 14cd3b1..90d6414 100644 --- a/app/src/main/java/com/example/testktor/screen/main/MainSneakersScreen.kt +++ b/app/src/main/java/com/example/testktor/screen/main/MainSneakersScreen.kt @@ -82,7 +82,7 @@ fun SneakersContent( } OverSmth("Популярное", navController) - SneakerSelection(sneakers = sneakers) + SneakerSelection(sneakers = sneakers, viewModel) SalesBar() BottomNavigationBar() } diff --git a/app/src/main/java/com/example/testktor/screen/main/PopularSneakersScreen.kt b/app/src/main/java/com/example/testktor/screen/main/PopularSneakersScreen.kt index 74db925..18e5729 100644 --- a/app/src/main/java/com/example/testktor/screen/main/PopularSneakersScreen.kt +++ b/app/src/main/java/com/example/testktor/screen/main/PopularSneakersScreen.kt @@ -47,6 +47,6 @@ fun FavouriteSneakersContent( Column { TopWriteNavigationBar(navController, "Популярное", viewModel) - SneakerCategorySelection(sneakers) + SneakerCategorySelection(sneakers, viewModel) } } \ No newline at end of file