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,
        )
    }
}