ContactDraftFields.kt
110 lignes · 4824 octets
package fr.ebii.card2vcf.ui import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import fr.ebii.card2vcf.R import fr.ebii.card2vcf.contact.ContactCard import fr.ebii.card2vcf.ui.composants.ChampTexte @Composable fun ContactDraftFields( card: ContactCard, onChange: (ContactCard) -> Unit, modifier: Modifier = Modifier, ) { // Pas de verticalScroll ici : le parent ContactDraftScreen scrolle déjà. // Claviers adaptés + focus chaîné (ImeAction.Next), champs délimités via ChampTexte. val suivant = KeyboardOptions(imeAction = ImeAction.Next) // Champs à confiance OCR basse : sous-texte « à vérifier », effacé dès correction. val aVerifier = stringResource(R.string.scan_champ_a_verifier) fun sousTexte(cle: String): String? = if (cle in card.champsDouteux) aVerifier else null Column( modifier, verticalArrangement = Arrangement.spacedBy(10.dp), ) { ChampTexte( value = card.fullName.orEmpty(), onValueChange = { onChange(card.copy(fullName = it.ifBlank { null }, champsDouteux = card.champsDouteux - "fullName")) }, label = stringResource(R.string.scan_champ_nom), supportingText = sousTexte("fullName"), keyboardOptions = suivant, ) ChampTexte( value = card.firstName.orEmpty(), onValueChange = { onChange(card.copy(firstName = it.ifBlank { null })) }, label = stringResource(R.string.scan_champ_prenom), keyboardOptions = suivant, ) ChampTexte( value = card.lastName.orEmpty(), onValueChange = { onChange(card.copy(lastName = it.ifBlank { null })) }, label = stringResource(R.string.scan_champ_nom_famille), keyboardOptions = suivant, ) ChampTexte( value = card.company.orEmpty(), onValueChange = { onChange(card.copy(company = it.ifBlank { null }, champsDouteux = card.champsDouteux - "company")) }, label = stringResource(R.string.scan_champ_societe), supportingText = sousTexte("company"), keyboardOptions = suivant, ) ChampTexte( value = card.jobTitle.orEmpty(), onValueChange = { onChange(card.copy(jobTitle = it.ifBlank { null }, champsDouteux = card.champsDouteux - "jobTitle")) }, label = stringResource(R.string.scan_champ_poste), supportingText = sousTexte("jobTitle"), keyboardOptions = suivant, ) ChampTexte( value = card.phones.joinToString(", "), onValueChange = { onChange(card.copy(phones = it.split(',', ';').map { p -> p.trim() }.filter { p -> p.isNotEmpty() })) }, label = stringResource(R.string.scan_champ_tel), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Phone, imeAction = ImeAction.Next), ) ChampTexte( value = card.emails.joinToString(", "), onValueChange = { onChange(card.copy(emails = it.split(',', ';').map { e -> e.trim() }.filter { e -> e.isNotEmpty() })) }, label = stringResource(R.string.scan_champ_email), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email, imeAction = ImeAction.Next), ) ChampTexte( value = card.website.orEmpty(), onValueChange = { onChange(card.copy(website = it.ifBlank { null })) }, label = stringResource(R.string.scan_champ_site), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Uri, imeAction = ImeAction.Next), ) ChampTexte( value = card.address.orEmpty(), onValueChange = { onChange(card.copy(address = it.ifBlank { null }, champsDouteux = card.champsDouteux - "address")) }, label = stringResource(R.string.scan_champ_adresse), supportingText = sousTexte("address"), keyboardOptions = suivant, ) ChampTexte( value = card.note.orEmpty(), onValueChange = { onChange(card.copy(note = it.ifBlank { null })) }, label = stringResource(R.string.scan_champ_note), singleLine = false, minLines = 2, ) } }
GitRust