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 kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.runBlocking
class RestBasketRepository(
private var service: BackendService
@ -20,10 +21,10 @@ class RestBasketRepository(
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 sneakersList = sneakersRemoteList.map { it.toSneaker() }
return flowOf(sneakersList.toList())
flowOf(sneakersList.toList())
}
override suspend fun getUserBasketId(id: Int): Int {

View File

@ -11,7 +11,7 @@ import kotlinx.coroutines.flow.Flow
interface BasketRepository {
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
// fun getAllBasket(): Flow<List<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 _sneakerList = MutableStateFlow<List<Sneaker>>(emptyList())
val sneakerList: StateFlow<List<Sneaker>> = _sneakerList.asStateFlow()
fun getQuantityState(basketId: Int, sneakerId: Int): StateFlow<Int> {
val quantityStateFlow = _quantityStateMap.getOrPut(sneakerId) {
MutableStateFlow(0)
@ -53,12 +50,8 @@ class BasketViewModel(private val basketRepository: BasketRepository): ViewModel
basketRepository.insertBasketSneaker(basketSneakers)
}
}
fun fetchBasketSneakers(userId: Int) {
viewModelScope.launch {
basketRepository.getBasketWithSneakers(userId).collect {
_sneakerList.emit(it)
}
}
fun getBasketSneakers(userId: Int) : Flow<List<Sneaker>> {
return basketRepository.getBasketWithSneakers(userId)
}
suspend fun getUserBasketId(userId: Int) : Int{

View File

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

View File

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

View File

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