Fix: try to correct update basket

This commit is contained in:
Emelyanov535 2023-12-13 20:59:19 +04:00
parent 37c45d0cf7
commit db454fe540
6 changed files with 22 additions and 26 deletions

View File

@ -12,6 +12,7 @@ import com.example.android_programming.model.BasketWithSneakers
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.runBlocking
class RestBasketRepository( class RestBasketRepository(
private var service: BackendService private var service: BackendService
@ -20,10 +21,10 @@ class RestBasketRepository(
service.createBasketSneaker(basketSneaker.toBasketSneakerRemote()) service.createBasketSneaker(basketSneaker.toBasketSneakerRemote())
} }
override suspend fun getBasketWithSneakers(id: Int): Flow<List<Sneaker>> { override fun getBasketWithSneakers(id: Int): Flow<List<Sneaker>> = runBlocking {
val sneakersRemoteList = service.getUserBasketSneakers(id) val sneakersRemoteList = service.getUserBasketSneakers(id)
val sneakersList = sneakersRemoteList.map { it.toSneaker() } val sneakersList = sneakersRemoteList.map { it.toSneaker() }
return flowOf(sneakersList.toList()) flowOf(sneakersList.toList())
} }
override suspend fun getUserBasketId(id: Int): Int { override suspend fun getUserBasketId(id: Int): Int {

View File

@ -11,7 +11,7 @@ import kotlinx.coroutines.flow.Flow
interface BasketRepository { interface BasketRepository {
suspend fun insertBasketSneaker(basketSneaker: BasketSneakers) suspend fun insertBasketSneaker(basketSneaker: BasketSneakers)
suspend fun getBasketWithSneakers(id: Int): Flow<List<Sneaker>> fun getBasketWithSneakers(id: Int): Flow<List<Sneaker>>
suspend fun getUserBasketId(id: Int): Int suspend fun getUserBasketId(id: Int): Int
// fun getAllBasket(): Flow<List<Basket>> // fun getAllBasket(): Flow<List<Basket>>
// suspend fun delete(basket: Basket) // suspend fun delete(basket: Basket)

View File

@ -25,9 +25,6 @@ class BasketViewModel(private val basketRepository: BasketRepository): ViewModel
private val _quantityStateMap = mutableMapOf<Int, MutableStateFlow<Int>>() private val _quantityStateMap = mutableMapOf<Int, MutableStateFlow<Int>>()
private val _sneakerList = MutableStateFlow<List<Sneaker>>(emptyList())
val sneakerList: StateFlow<List<Sneaker>> = _sneakerList.asStateFlow()
fun getQuantityState(basketId: Int, sneakerId: Int): StateFlow<Int> { fun getQuantityState(basketId: Int, sneakerId: Int): StateFlow<Int> {
val quantityStateFlow = _quantityStateMap.getOrPut(sneakerId) { val quantityStateFlow = _quantityStateMap.getOrPut(sneakerId) {
MutableStateFlow(0) MutableStateFlow(0)
@ -53,12 +50,8 @@ class BasketViewModel(private val basketRepository: BasketRepository): ViewModel
basketRepository.insertBasketSneaker(basketSneakers) basketRepository.insertBasketSneaker(basketSneakers)
} }
} }
fun fetchBasketSneakers(userId: Int) { fun getBasketSneakers(userId: Int) : Flow<List<Sneaker>> {
viewModelScope.launch { return basketRepository.getBasketWithSneakers(userId)
basketRepository.getBasketWithSneakers(userId).collect {
_sneakerList.emit(it)
}
}
} }
suspend fun getUserBasketId(userId: Int) : Int{ suspend fun getUserBasketId(userId: Int) : Int{

View File

@ -100,11 +100,12 @@ fun CardSneaker(item: Sneaker, navController: NavHostController, basketViewModel
if(user == null){ if(user == null){
navController.navigate("login") navController.navigate("login")
}else{ }else{
runBlocking { basketViewModel.addToBasket(BasketSneakers(1, item.sneakerId!!, 1))
launch(Dispatchers.Default) { // runBlocking {
basketViewModel.addToBasket(BasketSneakers(basketViewModel.getUserBasketId(user.userId!!), item.sneakerId!!, 1)) // launch(Dispatchers.Default) {
} // basketViewModel.addToBasket(BasketSneakers(basketViewModel.getUserBasketId(user.userId!!), item.sneakerId!!, 1))
} // }
// }
} }
}, },
modifier = Modifier modifier = Modifier

View File

@ -85,11 +85,12 @@ fun CardSneakerLike(item: Sneaker, basketViewModel: BasketViewModel = viewModel(
contentColor = Color.White contentColor = Color.White
), ),
onClick = { onClick = {
runBlocking { basketViewModel.deleteSneakerFromBasket(1, item.sneakerId!!)
launch(Dispatchers.Default) { // runBlocking {
basketViewModel.deleteSneakerFromBasket(basketViewModel.getUserBasketId(GlobalUser.getInstance().getUser()?.userId!!), item.sneakerId!!) // launch(Dispatchers.Default) {
} // basketViewModel.deleteSneakerFromBasket(basketViewModel.getUserBasketId(GlobalUser.getInstance().getUser()?.userId!!), item.sneakerId!!)
} // }
// }
}, },
modifier = Modifier modifier = Modifier
.padding(end = 16.dp) .padding(end = 16.dp)

View File

@ -11,6 +11,7 @@ import androidx.compose.material.Button
import androidx.compose.material.ButtonDefaults import androidx.compose.material.ButtonDefaults
import androidx.compose.material.Text import androidx.compose.material.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@ -45,11 +46,10 @@ fun OrderScreen(navHostController: NavHostController, basketViewModel: BasketVie
DeliveryAddress(orderViewModel) DeliveryAddress(orderViewModel)
val userId = GlobalUser.getInstance().getUser()?.userId val userId = GlobalUser.getInstance().getUser()?.userId
if (userId != null) { if (userId != null) {
basketViewModel.fetchBasketSneakers(userId!!) val sneakerList: List<Sneaker>? by basketViewModel.getBasketSneakers(userId).collectAsState(null)
val sneakerList: List<Sneaker>? = basketViewModel.sneakerList.collectAsState(null).value
if (sneakerList != null) { if (sneakerList != null) {
orderViewModel.updateSelectedItems(sneakerList) orderViewModel.updateSelectedItems(sneakerList!!)
ShoppingList(sneakerList) ShoppingList(sneakerList!!)
SubTotal(orderViewModel) SubTotal(orderViewModel)
} }
} }