fix(alta-cliente/afluencia): telefono limitado a 10 digitos, normalizacion de valores heredados con lada duplicada o caracteres invisibles
This commit is contained in:
@@ -117,10 +117,17 @@ export function CampoTelefono({ nombre, etiqueta, requerido, className }: CampoB
|
||||
const { watch, setValue, formState: { errors } } = useFormContext()
|
||||
const valor = ((watch(nombre) as string) ?? '').trim()
|
||||
const lada = valor.startsWith('+1') ? '+1' : '+52'
|
||||
const numero = valor.startsWith('+1') ? valor.slice(2).trim() : valor.startsWith('+52') ? valor.slice(3).trim() : valor
|
||||
// Normaliza lo que se muestra: dígitos, últimos 10 (limpia ladas duplicadas
|
||||
// o caracteres invisibles heredados de registros viejos)
|
||||
const numero = (() => {
|
||||
const crudo = valor.startsWith('+1') ? valor.slice(2).trim() : valor.startsWith('+52') ? valor.slice(3).trim() : valor
|
||||
const d = crudo.replace(/\D/g, '')
|
||||
return d.length > 10 ? d.slice(-10) : d
|
||||
})()
|
||||
|
||||
const actualizar = (nuevaLada: string, nuevoNumero: string) => {
|
||||
const limpio = nuevoNumero.trim()
|
||||
// Sólo dígitos y máximo 10 (la lada va en el selector)
|
||||
const limpio = nuevoNumero.replace(/\D/g, '').slice(0, 10)
|
||||
// Vacío se guarda vacío (sin prefijo huérfano); con número, compuesto
|
||||
setValue(nombre, limpio === '' ? '' : `${nuevaLada} ${limpio}`, { shouldValidate: true })
|
||||
}
|
||||
@@ -144,12 +151,15 @@ export function CampoTelefono({ nombre, etiqueta, requerido, className }: CampoB
|
||||
<input
|
||||
id={nombre}
|
||||
type="tel"
|
||||
placeholder="664 123 4567"
|
||||
inputMode="numeric"
|
||||
maxLength={10}
|
||||
placeholder="6641234567"
|
||||
value={numero}
|
||||
onChange={(e) => actualizar(lada, e.target.value)}
|
||||
className={claseInput(nombre, errors)}
|
||||
/>
|
||||
</div>
|
||||
<p className="mt-1 text-xs text-[#64748B] dark:text-[#94A3B8]">10 dígitos, sin lada</p>
|
||||
<MensajeError nombre={nombre} />
|
||||
</div>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user