Добавил роль, добавил UI ограничения по ролям
This commit is contained in:
parent
54ee3a0a18
commit
3fe3d41253
@ -64,27 +64,30 @@ fun BikeList(
|
|||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {},
|
topBar = {},
|
||||||
floatingActionButton = {
|
floatingActionButton = {
|
||||||
Box(
|
if(getUser?.role == "admin") {
|
||||||
contentAlignment = Alignment.Center
|
Box(
|
||||||
) {
|
contentAlignment = Alignment.Center
|
||||||
FloatingActionButton(
|
|
||||||
onClick = {
|
|
||||||
val route = Screen.BikeEdit.route.replace("{id}", 0.toString())
|
|
||||||
navController.navigate(route)
|
|
||||||
},
|
|
||||||
modifier = Modifier.fillMaxWidth(0.92f).align(Alignment.BottomCenter),
|
|
||||||
containerColor = MaterialTheme.colorScheme.primary
|
|
||||||
) {
|
) {
|
||||||
Icon(
|
FloatingActionButton(
|
||||||
Icons.Filled.Add,
|
onClick = {
|
||||||
"Добавить",
|
val route = Screen.BikeEdit.route.replace("{id}", 0.toString())
|
||||||
tint = MaterialTheme.colorScheme.onPrimary
|
navController.navigate(route)
|
||||||
)
|
},
|
||||||
|
modifier = Modifier.fillMaxWidth(0.92f).align(Alignment.BottomCenter),
|
||||||
|
containerColor = MaterialTheme.colorScheme.primary
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
Icons.Filled.Add,
|
||||||
|
"Добавить",
|
||||||
|
tint = MaterialTheme.colorScheme.onPrimary
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
) { innerPadding ->
|
) { innerPadding ->
|
||||||
BikeList(
|
BikeList(
|
||||||
|
currentUserViewModel = currentUserViewModel,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(innerPadding)
|
.padding(innerPadding)
|
||||||
.fillMaxSize(),
|
.fillMaxSize(),
|
||||||
@ -115,8 +118,11 @@ private fun BikeList(
|
|||||||
pagingBike: LazyPagingItems<Bike>,
|
pagingBike: LazyPagingItems<Bike>,
|
||||||
onClick: (uid: Int) -> Unit,
|
onClick: (uid: Int) -> Unit,
|
||||||
onDeleteClick: (bike: Bike) -> Unit,
|
onDeleteClick: (bike: Bike) -> Unit,
|
||||||
onEditClick: (bike: Int) -> Unit
|
onEditClick: (bike: Int) -> Unit,
|
||||||
|
currentUserViewModel: CurrentUserViewModel = viewModel(factory = AppViewModelProvider.Factory)
|
||||||
) {
|
) {
|
||||||
|
var getUser by remember { mutableStateOf(currentUserViewModel.user) }
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
) {
|
) {
|
||||||
@ -124,12 +130,13 @@ private fun BikeList(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.padding(all = 10.dp)
|
.padding(all = 10.dp)
|
||||||
.padding(bottom = 72.dp) // Добавим отступ внизу
|
.then(if (getUser?.role == "admin") Modifier.padding(bottom = 72.dp) else Modifier)
|
||||||
) {
|
) {
|
||||||
items(pagingBike.itemCount) { index ->
|
items(pagingBike.itemCount) { index ->
|
||||||
val bike = pagingBike[index]
|
val bike = pagingBike[index]
|
||||||
if (bike != null) {
|
if (bike != null) {
|
||||||
BikeListItem(
|
BikeListItem(
|
||||||
|
currentUserViewModel = currentUserViewModel,
|
||||||
bike = bike,
|
bike = bike,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(vertical = 7.dp)
|
.padding(vertical = 7.dp)
|
||||||
@ -151,21 +158,24 @@ private fun BikeList(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun BikeListItem(
|
private fun BikeListItem(
|
||||||
|
currentUserViewModel: CurrentUserViewModel = viewModel(factory = AppViewModelProvider.Factory),
|
||||||
bike: Bike,
|
bike: Bike,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
onDeleteClick: (bike: Bike) -> Unit,
|
onDeleteClick: (bike: Bike) -> Unit,
|
||||||
onClick: (uid: Int) -> Unit,
|
onClick: (uid: Int) -> Unit,
|
||||||
onEditClick: (bike: Int) -> Unit
|
onEditClick: (bike: Int) -> Unit
|
||||||
) {
|
) {
|
||||||
|
var getUser by remember { mutableStateOf(currentUserViewModel.user) }
|
||||||
var isExpanded by remember { mutableStateOf(false) } // Состояние для определения, раскрыта ли дополнительная информация о велосипеде
|
var isExpanded by remember { mutableStateOf(false) } // Состояние для определения, раскрыта ли дополнительная информация о велосипеде
|
||||||
|
|
||||||
Box(
|
Box(
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
.clip(RoundedCornerShape(8.dp))
|
.clip(RoundedCornerShape(8.dp))
|
||||||
//.background(Color.White)
|
|
||||||
.shadow(4.dp)
|
.shadow(4.dp)
|
||||||
.padding(8.dp)
|
.padding(8.dp)
|
||||||
.clickable { isExpanded = !isExpanded } // Добавляем обработчик нажатия для раскрытия/скрытия дополнительной информации
|
.clickable {
|
||||||
|
isExpanded = !isExpanded
|
||||||
|
} // Добавляем обработчик нажатия для раскрытия/скрытия дополнительной информации
|
||||||
) {
|
) {
|
||||||
Column(Modifier.padding(8.dp)) {
|
Column(Modifier.padding(8.dp)) {
|
||||||
Row(
|
Row(
|
||||||
@ -177,7 +187,10 @@ private fun BikeListItem(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.size(90.dp)
|
.size(90.dp)
|
||||||
.padding(4.dp)
|
.padding(4.dp)
|
||||||
.border(width = 1.dp, color = MaterialTheme.colorScheme.secondary) // Добавляем рамку
|
.border(
|
||||||
|
width = 1.dp,
|
||||||
|
color = MaterialTheme.colorScheme.secondary
|
||||||
|
) // Добавляем рамку
|
||||||
) {
|
) {
|
||||||
Image(
|
Image(
|
||||||
bitmap = BitmapFactory.decodeByteArray(
|
bitmap = BitmapFactory.decodeByteArray(
|
||||||
@ -197,16 +210,19 @@ private fun BikeListItem(
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Добавляем пустое пространство для разделения текста и кнопок
|
// Добавляем пустое пространство для разделения текста и кнопок
|
||||||
|
|
||||||
Spacer(modifier = Modifier.weight(1f))
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
IconButton(
|
if (getUser?.role == "admin") {
|
||||||
onClick = { onEditClick(bike.uid) },
|
IconButton(
|
||||||
modifier = Modifier.size(24.dp)
|
onClick = { onEditClick(bike.uid) },
|
||||||
) {
|
modifier = Modifier.size(24.dp)
|
||||||
Icon(
|
) {
|
||||||
imageVector = Icons.Default.Edit,
|
Icon(
|
||||||
contentDescription = "Редактировать",
|
imageVector = Icons.Default.Edit,
|
||||||
tint = MaterialTheme.colorScheme.secondary,
|
contentDescription = "Редактировать",
|
||||||
)
|
tint = MaterialTheme.colorScheme.secondary,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
IconButton(
|
IconButton(
|
||||||
onClick = { onClick(bike.uid) },
|
onClick = { onClick(bike.uid) },
|
||||||
@ -218,15 +234,17 @@ private fun BikeListItem(
|
|||||||
tint = MaterialTheme.colorScheme.secondary,
|
tint = MaterialTheme.colorScheme.secondary,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
IconButton(
|
if (getUser?.role == "admin") {
|
||||||
onClick = { onDeleteClick(bike) },
|
IconButton(
|
||||||
modifier = Modifier.size(24.dp)
|
onClick = { onDeleteClick(bike) },
|
||||||
) {
|
modifier = Modifier.size(24.dp)
|
||||||
Icon(
|
) {
|
||||||
imageVector = Icons.Default.Delete,
|
Icon(
|
||||||
contentDescription = "Удалить",
|
imageVector = Icons.Default.Delete,
|
||||||
tint = MaterialTheme.colorScheme.secondary,
|
contentDescription = "Удалить",
|
||||||
)
|
tint = MaterialTheme.colorScheme.secondary,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AnimatedVisibility(visible = isExpanded) { // Анимированная видимость для дополнительной информации
|
AnimatedVisibility(visible = isExpanded) { // Анимированная видимость для дополнительной информации
|
||||||
|
@ -20,6 +20,10 @@ import androidx.compose.material3.MaterialTheme
|
|||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.asImageBitmap
|
import androidx.compose.ui.graphics.asImageBitmap
|
||||||
@ -39,6 +43,8 @@ fun BikeView(
|
|||||||
viewModel: BikeViewModel = viewModel(factory = AppViewModelProvider.Factory),
|
viewModel: BikeViewModel = viewModel(factory = AppViewModelProvider.Factory),
|
||||||
currentUserViewModel: CurrentUserViewModel = viewModel(factory = AppViewModelProvider.Factory)
|
currentUserViewModel: CurrentUserViewModel = viewModel(factory = AppViewModelProvider.Factory)
|
||||||
) {
|
) {
|
||||||
|
var getUser by remember { mutableStateOf(currentUserViewModel.user) }
|
||||||
|
|
||||||
val bikeUiState = viewModel.bikeUiState
|
val bikeUiState = viewModel.bikeUiState
|
||||||
|
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
@ -119,21 +125,22 @@ fun BikeView(
|
|||||||
.weight(1f) // Занимает доступное пространство
|
.weight(1f) // Занимает доступное пространство
|
||||||
.padding(top = 8.dp, bottom = 8.dp)
|
.padding(top = 8.dp, bottom = 8.dp)
|
||||||
)
|
)
|
||||||
|
if (getUser?.role == "admin") {
|
||||||
IconButton(
|
IconButton(
|
||||||
onClick = {
|
onClick = {
|
||||||
val route = Screen.ItemEdit.route.replace("{id}", 0.toString())
|
val route = Screen.ItemEdit.route.replace("{id}", 0.toString())
|
||||||
.replace(
|
.replace(
|
||||||
"{bikeId}",
|
"{bikeId}",
|
||||||
bikeUiState.bikeWithItems?.bike?.uid.toString()
|
bikeUiState.bikeWithItems?.bike?.uid.toString()
|
||||||
)
|
)
|
||||||
navController.navigate(route)
|
navController.navigate(route)
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Filled.Add,
|
||||||
|
contentDescription = "Добавить сеанс",
|
||||||
|
)
|
||||||
}
|
}
|
||||||
) {
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Filled.Add,
|
|
||||||
contentDescription = "Добавить сеанс",
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (bikeUiState.bikeWithItems != null) {
|
if (bikeUiState.bikeWithItems != null) {
|
||||||
|
@ -52,7 +52,7 @@ fun ItemList(
|
|||||||
val bikeWithItems = bikeWithItemsViewModel.bikeUiState.bikeWithItems!!
|
val bikeWithItems = bikeWithItemsViewModel.bikeUiState.bikeWithItems!!
|
||||||
|
|
||||||
var getUser by remember { mutableStateOf(currentUserViewModel.user) }
|
var getUser by remember { mutableStateOf(currentUserViewModel.user) }
|
||||||
Log.d("Пожалуйста, работай","${getUser?.uid}")
|
Log.d("Пожалуйста, работай", "${getUser?.uid}")
|
||||||
|
|
||||||
LazyColumn {
|
LazyColumn {
|
||||||
if (bikeWithItems.items.isEmpty()) {
|
if (bikeWithItems.items.isEmpty()) {
|
||||||
@ -73,7 +73,7 @@ fun ItemList(
|
|||||||
val dateFormatter = DateTimeFormatter.ofPattern("yyyy")
|
val dateFormatter = DateTimeFormatter.ofPattern("yyyy")
|
||||||
val formattedDate = dateFormatter.format(item.dateTime)
|
val formattedDate = dateFormatter.format(item.dateTime)
|
||||||
Column {
|
Column {
|
||||||
/* Text(
|
/* Text(
|
||||||
text = formattedDate,
|
text = formattedDate,
|
||||||
color = MaterialTheme.colorScheme.onBackground,
|
color = MaterialTheme.colorScheme.onBackground,
|
||||||
)*/
|
)*/
|
||||||
@ -118,7 +118,12 @@ fun ItemList(
|
|||||||
onClick = {
|
onClick = {
|
||||||
coroutineScope.launch {
|
coroutineScope.launch {
|
||||||
if (item.availableCount != 0) {
|
if (item.availableCount != 0) {
|
||||||
getUser?.uid?.let { viewModel.addItemInCart(userId = it,itemId = item.uid) }
|
getUser?.uid?.let {
|
||||||
|
viewModel.addItemInCart(
|
||||||
|
userId = it,
|
||||||
|
itemId = item.uid
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -130,20 +135,22 @@ fun ItemList(
|
|||||||
tint = MaterialTheme.colorScheme.onPrimary
|
tint = MaterialTheme.colorScheme.onPrimary
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
IconButton(
|
if (getUser?.role == "admin") {
|
||||||
onClick = {
|
IconButton(
|
||||||
coroutineScope.launch {
|
onClick = {
|
||||||
viewModel.deleteItem(item = item)
|
coroutineScope.launch {
|
||||||
bikeWithItemsViewModel.refreshState()
|
viewModel.deleteItem(item = item)
|
||||||
}
|
bikeWithItemsViewModel.refreshState()
|
||||||
},
|
}
|
||||||
) {
|
},
|
||||||
Icon(
|
) {
|
||||||
imageVector = Icons.Default.Delete,
|
Icon(
|
||||||
contentDescription = null,
|
imageVector = Icons.Default.Delete,
|
||||||
modifier = Modifier.size(24.dp),
|
contentDescription = null,
|
||||||
tint = MaterialTheme.colorScheme.onPrimary
|
modifier = Modifier.size(24.dp),
|
||||||
)
|
tint = MaterialTheme.colorScheme.onPrimary
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -148,6 +148,19 @@
|
|||||||
"bikeId": 3
|
"bikeId": 3
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 11,
|
||||||
|
"userId": 10,
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"id": 6,
|
||||||
|
"dateTime": 2020,
|
||||||
|
"frozenWeight": 23.6,
|
||||||
|
"count": 1,
|
||||||
|
"bikeId": 3
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"items": [
|
"items": [
|
||||||
@ -57774,7 +57787,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"name": "не велосипед ",
|
"name": "не велосипед 5",
|
||||||
"description": "очень дорогие вложении с уважением Александр и я не могу найти в интернете и я не могу найти в интернете и я не смогу быть у вас есть вопросы пишите ",
|
"description": "очень дорогие вложении с уважением Александр и я не могу найти в интернете и я не могу найти в интернете и я не смогу быть у вас есть вопросы пишите ",
|
||||||
"image": [
|
"image": [
|
||||||
-1,
|
-1,
|
||||||
|
Loading…
Reference in New Issue
Block a user