fix update
This commit is contained in:
@@ -4,27 +4,166 @@ import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.OutlinedTextField
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.sio.gestionclients.data.local.AppDatabase
|
||||
import com.sio.gestionclients.data.local.entities.Client
|
||||
import com.sio.gestionclients.data.repository.LocalClientRepository
|
||||
import com.sio.gestionclients.viewmodel.LocalClientViewModel
|
||||
import com.sio.gestionclients.viewmodel.LocalClientViewModelFactory
|
||||
|
||||
class ModifClientActivity : ComponentActivity() {
|
||||
private lateinit var viewModel: LocalClientViewModel
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContent { ModifClientScreen(onQuit = { finish() })}
|
||||
val database = AppDatabase.getDatabase(this)
|
||||
val clientDao = database.clientDao()
|
||||
val repository = LocalClientRepository (clientDao)
|
||||
val factory = LocalClientViewModelFactory (repository)
|
||||
viewModel = ViewModelProvider(this, factory).get(LocalClientViewModel::class.java)
|
||||
setContent {
|
||||
ModifClientScreen({ finish() }, viewModel = viewModel)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ModifClientScreen(onQuit: () -> Unit) {
|
||||
Column(Modifier.fillMaxSize().padding(26.dp)) {
|
||||
Text("Modifier un client", fontSize = 26.sp)
|
||||
fun ModifClientScreen(onQuit: () -> Unit, viewModel: LocalClientViewModel) {
|
||||
val clients by viewModel.clients.collectAsState(initial = emptyList())
|
||||
val selectedClient by viewModel.selectedClient.collectAsState()
|
||||
|
||||
Button(onClick = onQuit) { Text("Quitter") }
|
||||
var expanded by remember { mutableStateOf(false) }
|
||||
var selectedId by remember { mutableStateOf<Long?>(null) }
|
||||
|
||||
Column(modifier = Modifier.padding(16.dp)) {
|
||||
|
||||
// Bouton pour ouvrir le menu déroulant
|
||||
TextButton(onClick = { expanded = true }) {
|
||||
Text(
|
||||
text = clients.find { it.id == selectedId }?.nom ?: "Choisir un client"
|
||||
)
|
||||
}
|
||||
|
||||
// Menu déroulant
|
||||
DropdownMenu(
|
||||
expanded = expanded,
|
||||
onDismissRequest = { expanded = false }
|
||||
) {
|
||||
clients.forEach { client ->
|
||||
DropdownMenuItem(
|
||||
text = { Text(client.nom) },
|
||||
onClick = {
|
||||
selectedId = client.id
|
||||
expanded = false
|
||||
viewModel.selectClient(client.id)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
// Affichage des infos du client sélectionné
|
||||
selectedClient?.let { client ->
|
||||
var nom by remember { mutableStateOf("") }
|
||||
var prenom by remember { mutableStateOf("") }
|
||||
var telephone by remember { mutableStateOf("") }
|
||||
var email by remember { mutableStateOf("") }
|
||||
|
||||
OutlinedTextField(
|
||||
value = nom,
|
||||
onValueChange = { newValue -> nom = newValue },
|
||||
label = { Text(client.nom) },
|
||||
placeholder = { Text("Nom") },
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
|
||||
OutlinedTextField(
|
||||
value = prenom,
|
||||
onValueChange = { newValue -> prenom = newValue },
|
||||
label = { Text(client.prenom) },
|
||||
placeholder = { Text("Prénom") },
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
|
||||
OutlinedTextField(
|
||||
value = telephone,
|
||||
onValueChange = { newValue -> telephone = newValue },
|
||||
label = { Text(client.telephone) },
|
||||
placeholder = { Text("Téléphone") },
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
|
||||
OutlinedTextField(
|
||||
value = email,
|
||||
onValueChange = { newValue -> email = newValue },
|
||||
label = { Text(client.email) },
|
||||
placeholder = { Text("Email") },
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
Button(onClick = {
|
||||
if (nom.isBlank()) {
|
||||
nom = client.nom
|
||||
}
|
||||
|
||||
if (prenom.isBlank()) {
|
||||
prenom = client.prenom
|
||||
}
|
||||
|
||||
if (telephone.isBlank()) {
|
||||
telephone = client.telephone
|
||||
}
|
||||
|
||||
if (email.isBlank()) {
|
||||
email = client.email
|
||||
}
|
||||
|
||||
val newClient = Client(
|
||||
nom = nom,
|
||||
prenom = prenom,
|
||||
email = email,
|
||||
telephone = telephone
|
||||
)
|
||||
|
||||
if (!newClient.equals(client)) {
|
||||
viewModel.updateSelectedClient(newClient)
|
||||
selectedId = null
|
||||
}
|
||||
|
||||
}) {
|
||||
Text("Modifier le client")
|
||||
}
|
||||
}
|
||||
|
||||
Button(
|
||||
onClick = onQuit,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(top = 8.dp)
|
||||
) {
|
||||
Text("Quitter")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -29,9 +29,9 @@ class LocalClientViewModel(
|
||||
}
|
||||
}
|
||||
|
||||
fun updateSelectedClient() {
|
||||
fun updateSelectedClient(client: Client) {
|
||||
viewModelScope.launch {
|
||||
_selectedClient.value?.let { client ->
|
||||
_selectedClient.value?.let { c ->
|
||||
repository.updateClient(client)
|
||||
_selectedClient.value = null
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user