It's working!!!

This commit is contained in:
ElEgEv 2023-12-11 16:09:28 +04:00
parent 8f116e2005
commit b0fbd2704f
12 changed files with 50 additions and 7 deletions

Binary file not shown.

View File

@ -40,6 +40,10 @@ class TankEditViewModel(
} }
} }
fun getTankId(): Long{
return tankUid;
}
fun updateUiState(tankDetails: TankDetails) { fun updateUiState(tankDetails: TankDetails) {
tankUiState = TankUiState( tankUiState = TankUiState(
tankDetails = tankDetails, tankDetails = tankDetails,
@ -58,6 +62,14 @@ class TankEditViewModel(
} }
} }
suspend fun deleteTank() {
if (validateInput()) {
if (tankUid > 0) {
tankRepository.deleteTank(tankUiState.tankDetails.toTank(tankUid))
}
}
}
private fun validateInput(uiState: TankDetails = tankUiState.tankDetails): Boolean { private fun validateInput(uiState: TankDetails = tankUiState.tankDetails): Boolean {
return with(uiState) { return with(uiState) {
name.isNotBlank() name.isNotBlank()

View File

@ -34,7 +34,7 @@ abstract class AppDatabase : RoomDatabase() {
abstract fun tankImageDao() : TankImageDao abstract fun tankImageDao() : TankImageDao
companion object { companion object {
private const val DB_NAME: String = "18-db" private const val DB_NAME: String = "19-db"
@Volatile @Volatile
private var INSTANCE: AppDatabase? = null private var INSTANCE: AppDatabase? = null

View File

@ -42,6 +42,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavController import androidx.navigation.NavController
import com.application.ui.getEmptyBitmap
import com.application.ui.miniatureBound import com.application.ui.miniatureBound
import com.application.ui.resize import com.application.ui.resize
import com.application.ui.tankImageBound import com.application.ui.tankImageBound
@ -76,10 +77,13 @@ fun Constructor(
){ ){
val coroutineScope = rememberCoroutineScope() val coroutineScope = rememberCoroutineScope()
val tankId = tankEditViewModel.getTankId()
levelDropDownViewModel.setCurrentLevel(tankEditViewModel.tankUiState.tankDetails.levelId ?: 1) levelDropDownViewModel.setCurrentLevel(tankEditViewModel.tankUiState.tankDetails.levelId ?: 1)
nationDropDownViewModel.setCurrentNation(tankEditViewModel.tankUiState.tankDetails.nationId ?: 1) nationDropDownViewModel.setCurrentNation(tankEditViewModel.tankUiState.tankDetails.nationId ?: 1)
Constructor( Constructor(
tankId = tankId,
tankViewModel = tankEditViewModel, tankViewModel = tankEditViewModel,
tankUiState = tankEditViewModel.tankUiState, tankUiState = tankEditViewModel.tankUiState,
levelUiState = levelDropDownViewModel.levelUiState, levelUiState = levelDropDownViewModel.levelUiState,
@ -88,12 +92,18 @@ fun Constructor(
nationUiState = nationDropDownViewModel.nationUiState, nationUiState = nationDropDownViewModel.nationUiState,
nationsListUiState = nationDropDownViewModel.nationsListUiState, nationsListUiState = nationDropDownViewModel.nationsListUiState,
onNationUpdate = nationDropDownViewModel::updateUiState, onNationUpdate = nationDropDownViewModel::updateUiState,
onClick = { onClickSave = {
coroutineScope.launch { coroutineScope.launch {
tankEditViewModel.saveTank() tankEditViewModel.saveTank()
navController.popBackStack() navController.popBackStack()
} }
}, },
onClickDelete = {
coroutineScope.launch {
tankEditViewModel.deleteTank()
navController.popBackStack()
}
},
onUpdate = tankEditViewModel::updateUiState onUpdate = tankEditViewModel::updateUiState
) )
} }
@ -200,6 +210,7 @@ private fun NationDropDown(
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
private fun Constructor( private fun Constructor(
tankId: Long,
tankViewModel: TankEditViewModel, tankViewModel: TankEditViewModel,
tankUiState: TankUiState, tankUiState: TankUiState,
levelUiState: LevelUiState, levelUiState: LevelUiState,
@ -208,7 +219,8 @@ private fun Constructor(
nationUiState: NationUiState, nationUiState: NationUiState,
nationsListUiState: NationsListUiState, nationsListUiState: NationsListUiState,
onNationUpdate: (Nation) -> Unit, onNationUpdate: (Nation) -> Unit,
onClick: () -> Unit, onClickSave: () -> Unit,
onClickDelete: () -> Unit,
onUpdate: (TankDetails) -> Unit onUpdate: (TankDetails) -> Unit
) { ) {
fun handleImageUpload(bitmap: Bitmap) { fun handleImageUpload(bitmap: Bitmap) {
@ -344,7 +356,7 @@ private fun Constructor(
} }
Spacer(Modifier.height(10.dp)) Spacer(Modifier.height(10.dp))
Row( Row(
horizontalArrangement = Arrangement.Center, horizontalArrangement = Arrangement.SpaceAround,
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(10.dp, 10.dp) .padding(10.dp, 10.dp)
@ -358,11 +370,27 @@ private fun Constructor(
contentColor = Color.Black contentColor = Color.Black
), ),
enabled = tankUiState.isEntryValid, enabled = tankUiState.isEntryValid,
onClick = onClick onClick = onClickSave
) { ) {
//"${student.firstName} ${student.lastName}" //"${student.firstName} ${student.lastName}"
Text(text = stringResource(id = R.string.save_account_button), fontSize = 20.sp, fontWeight = FontWeight.Bold) Text(text = stringResource(id = R.string.save_account_button), fontSize = 20.sp, fontWeight = FontWeight.Bold)
} }
if(tankId != 0L){
Button(
modifier = Modifier
.width(200.dp)
.height(50.dp),
colors = ButtonDefaults.buttonColors(
containerColor = CustomOrange,
contentColor = Color.Black
),
enabled = tankUiState.isEntryValid,
onClick = onClickDelete
) {
//"${student.firstName} ${student.lastName}"
Text(text = stringResource(id = R.string.delete_account_button), fontSize = 20.sp, fontWeight = FontWeight.Bold)
}
}
} }
} }
} }
@ -467,7 +495,7 @@ private fun Constructor(
containerColor = CustomOrange, containerColor = CustomOrange,
contentColor = Color.Black contentColor = Color.Black
), ),
onClick = onClick onClick = onClickSave
) { ) {
//"${student.firstName} ${student.lastName}" //"${student.firstName} ${student.lastName}"
Text(text = stringResource(id = R.string.create_account_button), fontSize = 20.sp, fontWeight = FontWeight.Bold) Text(text = stringResource(id = R.string.create_account_button), fontSize = 20.sp, fontWeight = FontWeight.Bold)
@ -488,6 +516,7 @@ fun ConstructorEditPreview() {
color = CustomDark color = CustomDark
) { ) {
Constructor( Constructor(
tankId = 0L,
tankViewModel = viewModel(factory = AppViewModelProvider.Factory), tankViewModel = viewModel(factory = AppViewModelProvider.Factory),
tankUiState = Tank.getTank().toUiState(true), tankUiState = Tank.getTank().toUiState(true),
levelUiState = Level.DEMO_LEVEL.toUiState(), levelUiState = Level.DEMO_LEVEL.toUiState(),
@ -496,7 +525,8 @@ fun ConstructorEditPreview() {
nationUiState = Nation.DEMO_NATION.toUiState(), nationUiState = Nation.DEMO_NATION.toUiState(),
nationsListUiState = NationsListUiState(listOf()), nationsListUiState = NationsListUiState(listOf()),
onNationUpdate = { }, onNationUpdate = { },
onClick = { }, onClickSave = { },
onClickDelete = { },
onUpdate = { }, onUpdate = { },
) )
} }

View File

@ -13,6 +13,7 @@
<string name="login_button">Войти</string> <string name="login_button">Войти</string>
<string name="create_account_button">Создать</string> <string name="create_account_button">Создать</string>
<string name="save_account_button">Сохранить</string> <string name="save_account_button">Сохранить</string>
<string name="delete_account_button">Удалить</string>
<string name="register_button">Регистрация</string> <string name="register_button">Регистрация</string>
<string name="student_firstname">Имя</string> <string name="student_firstname">Имя</string>
<string name="student_lastname">Фамилия</string> <string name="student_lastname">Фамилия</string>