From 68a276d54949a630c8bc19f4470f1e8f26e436b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=B0=D1=88=D0=B8=D0=BD=20=D0=9C=D0=B0=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D0=BC?= Date: Sat, 23 Dec 2023 03:03:40 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A3=D1=80=D0=B0,=20=D0=B0=D0=B4=D0=B5=D0=BA?= =?UTF-8?q?=D0=B2=D0=B0=D1=82=D0=BD=D1=8B=D0=B9=20=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=20=D1=81=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B0=D0=BD,=20=D0=BE=D1=81=D1=82=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=D1=81=D1=8C=20=D0=B0=D0=B4=D0=B5=D0=BA=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D0=BD=D1=83=D1=8E=20=D0=B0=D0=B2=D1=82=D0=BE=D1=80=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8E=20=D0=B8=D0=BB=D0=B8=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8E=20=D1=81?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/myapplication/composeui/Cart.kt | 65 ++++++------- .../composeui/navigation/MainNavbar.kt | 2 +- .../database/entities/composeui/RentList.kt | 13 ++- .../entities/composeui/RentListViewModel.kt | 14 ++- server/data.json | 91 ++----------------- 5 files changed, 67 insertions(+), 118 deletions(-) diff --git a/app/src/main/java/com/example/myapplication/composeui/Cart.kt b/app/src/main/java/com/example/myapplication/composeui/Cart.kt index 5e49ff1..8da94de 100644 --- a/app/src/main/java/com/example/myapplication/composeui/Cart.kt +++ b/app/src/main/java/com/example/myapplication/composeui/Cart.kt @@ -80,35 +80,39 @@ fun Cart( cartUiState = cartUiState, modifier = Modifier .padding(all = 10.dp), - onSwipe = { item: ItemFromCart, user: Int -> + onSwipe = { item: ItemFromCart -> coroutineScope.launch { - viewModel.removeFromCart( - item = Item( - uid = item.uid, - dateTime = item.dateTime, - weight = item.weight, - maxCount = 0, - bikeId = item.bikeId - ), user = user - ) + getUser?.uid?.let { + viewModel.removeFromCart( + item = Item( + uid = item.uid, + dateTime = item.dateTime, + weight = item.weight, + maxCount = 0, + bikeId = item.bikeId + ), user = it + ) + } } }, - onChangeCount = { item: ItemFromCart, user: Int, count: Int -> + onChangeCount = { item: ItemFromCart, count: Int -> coroutineScope.launch { - viewModel.updateFromCart( - item = Item( - uid = item.uid, - dateTime = item.dateTime, - weight = item.weight, - maxCount = 0, - bikeId = item.bikeId - ), userId = user, count = count, availableCount = item.availableCount - ) + getUser?.uid?.let { + viewModel.updateFromCart( + item = Item( + uid = item.uid, + dateTime = item.dateTime, + weight = item.weight, + maxCount = 0, + bikeId = item.bikeId + ), userId = it, count = count, availableCount = item.availableCount + ) + } } }, - onAddToRent = { items: List, user: Int -> + onAddToRent = { items: List -> coroutineScope.launch { - viewModel.addToRent(items = items, userId = user) + getUser?.uid?.let { viewModel.addToRent(items = items, userId = it) } } } ) @@ -119,9 +123,9 @@ fun Cart( private fun Cart( cartUiState: CartUiState, modifier: Modifier, - onSwipe: (ItemFromCart, Int) -> Unit, - onChangeCount: (ItemFromCart, Int, Int) -> Unit, - onAddToRent: (List, Int) -> Unit + onSwipe: (ItemFromCart) -> Unit, + onChangeCount: (ItemFromCart, Int) -> Unit, + onAddToRent: (List) -> Unit ) { LazyColumn( modifier = modifier @@ -132,7 +136,7 @@ private fun Cart( ) if (dismissState.isDismissed(direction = DismissDirection.EndToStart)) { - onSwipe(item, 1) + onSwipe(item) } SwipeToDelete( @@ -146,7 +150,7 @@ private fun Cart( Spacer(modifier = Modifier.weight(1f)) Button( - onClick = { onAddToRent(cartUiState.itemList, 1) }, + onClick = { onAddToRent(cartUiState.itemList) }, modifier = Modifier .padding(16.dp) .fillMaxWidth() @@ -159,7 +163,7 @@ private fun Cart( private fun SwipeToDelete( dismissState: DismissState, item: ItemFromCart, - onChangeCount: (ItemFromCart, Int, Int) -> Unit, + onChangeCount: (ItemFromCart, Int) -> Unit, ) { SwipeToDismiss( state = dismissState, @@ -211,7 +215,7 @@ private fun SwipeToDelete( private fun ItemListItem( item: ItemFromCart, modifier: Modifier = Modifier, - onChangeCount: (ItemFromCart, Int, Int) -> Unit, + onChangeCount: (ItemFromCart, Int) -> Unit, ) { var currentCount by remember { mutableStateOf(item.count) } @@ -269,7 +273,7 @@ private fun ItemListItem( verticalAlignment = Alignment.CenterVertically ) { IconButton( - onClick = { onChangeCount(item, 1, --currentCount) } + onClick = { onChangeCount(item, --currentCount) } ) { Icon( imageVector = ImageVector.vectorResource(id = R.drawable.minus), @@ -288,7 +292,6 @@ private fun ItemListItem( onClick = { onChangeCount( item, - 1, if (currentCount != item.availableCount) ++currentCount else currentCount ) } diff --git a/app/src/main/java/com/example/myapplication/composeui/navigation/MainNavbar.kt b/app/src/main/java/com/example/myapplication/composeui/navigation/MainNavbar.kt index adb55ed..4dad969 100644 --- a/app/src/main/java/com/example/myapplication/composeui/navigation/MainNavbar.kt +++ b/app/src/main/java/com/example/myapplication/composeui/navigation/MainNavbar.kt @@ -186,7 +186,7 @@ fun Navhost( modifier.padding(innerPadding) ) { composable(Screen.BikeList.route) { BikeList(navController) } - composable(Screen.RentList.route) { RentList(navController, 1) } + composable(Screen.RentList.route) { RentList(navController, currentUserViewModel = currentUserViewModel) } composable(Screen.Cart.route) { Cart(currentUserViewModel = currentUserViewModel) } composable(Screen.UserProfile.route) { UserProfile(isDarkTheme, dataStore, currentUserViewModel = currentUserViewModel) } composable( diff --git a/app/src/main/java/com/example/myapplication/database/entities/composeui/RentList.kt b/app/src/main/java/com/example/myapplication/database/entities/composeui/RentList.kt index c1daab0..cfff48c 100644 --- a/app/src/main/java/com/example/myapplication/database/entities/composeui/RentList.kt +++ b/app/src/main/java/com/example/myapplication/database/entities/composeui/RentList.kt @@ -19,7 +19,11 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview @@ -36,9 +40,12 @@ import kotlinx.coroutines.launch @Composable fun RentList( navController: NavController?, - userId: Int?, - viewModel: RentListViewModel = viewModel(factory = AppViewModelProvider.Factory) + viewModel: RentListViewModel = viewModel(factory = AppViewModelProvider.Factory), + currentUserViewModel: CurrentUserViewModel = viewModel(factory = AppViewModelProvider.Factory) ) { + var getUser by remember { mutableStateOf(currentUserViewModel.user) } + getUser?.uid?.let { viewModel.setUserId(it) } + val coroutineScope = rememberCoroutineScope() val rentsUiState = viewModel.rentListUiState.collectAsLazyPagingItems() LazyColumn( @@ -98,7 +105,7 @@ fun RentListPreview() { Surface( color = MaterialTheme.colorScheme.background ) { - RentList(navController = null, 1) + RentList(navController = null) } } } \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/database/entities/composeui/RentListViewModel.kt b/app/src/main/java/com/example/myapplication/database/entities/composeui/RentListViewModel.kt index 58976cd..6fd11e7 100644 --- a/app/src/main/java/com/example/myapplication/database/entities/composeui/RentListViewModel.kt +++ b/app/src/main/java/com/example/myapplication/database/entities/composeui/RentListViewModel.kt @@ -5,15 +5,27 @@ import androidx.paging.PagingData import com.example.myapplication.database.entities.model.Rent import com.example.myapplication.database.entities.repository.RentRepository import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.flatMapLatest class RentListViewModel( private val rentRepository: RentRepository ) : ViewModel() { - val rentListUiState: Flow> = rentRepository.getAllRents(1) + private val _userId = MutableStateFlow(null) + val userId: StateFlow get() = _userId + + val rentListUiState: Flow> = userId.flatMapLatest { userId -> + rentRepository.getAllRents(userId) + } suspend fun deleteRent(rent: Rent) { rentRepository.deleteRent(rent) } + + fun setUserId(userId: Int) { + _userId.value = userId + } } data class RentListUiState(val rentList: List = listOf()) \ No newline at end of file diff --git a/server/data.json b/server/data.json index ca08969..c9ad22b 100644 --- a/server/data.json +++ b/server/data.json @@ -20,19 +20,7 @@ { "id": 2, "login": "hello", - "password": "hello", - "items": [ - { - "id": 6, - "count": 1, - "bikeId": 3 - }, - { - "id": 1, - "count": 1, - "bikeId": 1 - } - ] + "password": "hello" }, { "id": 3, @@ -57,14 +45,7 @@ { "id": 7, "login": "1", - "password": "1", - "items": [ - { - "id": 4, - "count": 1, - "bikeId": 2 - } - ] + "password": "1" }, { "id": 8, @@ -74,28 +55,8 @@ ], "rents": [ { - "id": 2, - "userId": 1, - "items": [ - { - "id": 1, - "dateTime": 2026, - "frozenWeight": 26.6, - "count": 1, - "bikeId": 1 - }, - { - "id": 2, - "dateTime": 2027, - "frozenWeight": 24.6, - "count": 2, - "bikeId": 1 - } - ] - }, - { - "id": 3, - "userId": 7, + "id": 6, + "userId": 2, "items": [ { "id": 1, @@ -103,52 +64,18 @@ "frozenWeight": 26.6, "count": 2, "bikeId": 1 - }, - { - "id": 4, - "dateTime": 2023, - "frozenWeight": 26.3, - "count": 1, - "bikeId": 2 } ] }, { - "id": 4, - "userId": 7, + "id": 8, + "userId": 2, "items": [ { - "id": 1, - "dateTime": 2021, - "frozenWeight": 26.6, + "id": 4, + "dateTime": 2023, + "frozenWeight": 26.3, "count": 2, - "bikeId": 1 - }, - { - "id": 4, - "dateTime": 2023, - "frozenWeight": 26.3, - "count": 1, - "bikeId": 2 - } - ] - }, - { - "id": 5, - "userId": 7, - "items": [ - { - "id": 1, - "dateTime": 2021, - "frozenWeight": 26.6, - "count": 3, - "bikeId": 1 - }, - { - "id": 4, - "dateTime": 2023, - "frozenWeight": 26.3, - "count": 1, "bikeId": 2 } ]