fix: guardar el telefono en el formato que usa WhatsApp #5
+3
-1
@@ -14,8 +14,10 @@
|
|||||||
import { createInterface } from "readline";
|
import { createInterface } from "readline";
|
||||||
import { prisma } from "../src/lib/prisma";
|
import { prisma } from "../src/lib/prisma";
|
||||||
import { procesarMensaje } from "../src/lib/whatsapp-bot";
|
import { procesarMensaje } from "../src/lib/whatsapp-bot";
|
||||||
|
import { normalizarTelefono } from "../src/lib/telefono";
|
||||||
|
|
||||||
const telefono = process.argv[2] ?? "5493510000000";
|
// Normalizado igual que en el bot: si no, /reset no encuentra la conversación.
|
||||||
|
const telefono = normalizarTelefono(process.argv[2] ?? "5493510000000");
|
||||||
|
|
||||||
function mostrar(resp: { tipo: string; texto: string; botones?: { titulo: string }[] }[]) {
|
function mostrar(resp: { tipo: string; texto: string; botones?: { titulo: string }[] }[]) {
|
||||||
for (const r of resp) {
|
for (const r of resp) {
|
||||||
|
|||||||
@@ -23,12 +23,18 @@ export default function RegistroPage() {
|
|||||||
function handleTelefono(e: React.ChangeEvent<HTMLInputElement>) {
|
function handleTelefono(e: React.ChangeEvent<HTMLInputElement>) {
|
||||||
const soloDigitos = e.target.value.replace(/\D/g, "").slice(0, 10);
|
const soloDigitos = e.target.value.replace(/\D/g, "").slice(0, 10);
|
||||||
setForm((f) => ({ ...f, telefono: soloDigitos }));
|
setForm((f) => ({ ...f, telefono: soloDigitos }));
|
||||||
if (soloDigitos === "") setTelefonoError("");
|
// Mientras tipea sólo se avisa lo que ya es un error seguro; lo de "faltan
|
||||||
else if (soloDigitos.startsWith("0")) setTelefonoError("Sin el 0 de la característica");
|
// dígitos" espera a que salga del campo, para no retarlo por la mitad.
|
||||||
else if (soloDigitos.length < 10) setTelefonoError("Faltan dígitos (son 10 en total)");
|
if (soloDigitos.startsWith("0")) setTelefonoError("Sin el 0 de la característica");
|
||||||
|
|
|||||||
|
else if (soloDigitos.startsWith("15")) setTelefonoError("Sin el 15, poné la característica");
|
||||||
else setTelefonoError("");
|
else setTelefonoError("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleTelefonoBlur() {
|
||||||
|
if (form.telefono && !esLocalArgentinoValido(form.telefono))
|
||||||
|
setTelefonoError("Son 10 dígitos: característica sin el 0 y número sin el 15");
|
||||||
|
}
|
||||||
|
|
||||||
async function handleSubmit(e: React.FormEvent) {
|
async function handleSubmit(e: React.FormEvent) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
if (!esLocalArgentinoValido(form.telefono)) {
|
if (!esLocalArgentinoValido(form.telefono)) {
|
||||||
@@ -76,6 +82,7 @@ export default function RegistroPage() {
|
|||||||
error={telefonoError}
|
error={telefonoError}
|
||||||
value={form.telefono}
|
value={form.telefono}
|
||||||
onChange={handleTelefono}
|
onChange={handleTelefono}
|
||||||
|
onBlur={handleTelefonoBlur}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
{error && <p className="text-sm text-red-500 text-center">{error}</p>}
|
{error && <p className="text-sm text-red-500 text-center">{error}</p>}
|
||||||
|
|||||||
+3
-1
@@ -20,7 +20,9 @@ export const PREFIJO_WHATSAPP_AR = "549";
|
|||||||
*/
|
*/
|
||||||
export function esLocalArgentinoValido(local: string): boolean {
|
export function esLocalArgentinoValido(local: string): boolean {
|
||||||
|
ai-bot
commented
La validación no rechaza números que empiezan con '15' (prefijo móvil antiguo). El comentario dice 'sin el 15' pero el código solo chequea '0'. #ai-review-inline La validación no rechaza números que empiezan con '15' (prefijo móvil antiguo). El comentario dice 'sin el 15' pero el código solo chequea '0'.
```suggestion
export function esLocalArgentinoValido(local: string): boolean {
const d = normalizarTelefono(local);
return d.length === 10 && !d.startsWith('0') && !d.startsWith('15');
}
```
#ai-review-inline
|
|||||||
const d = normalizarTelefono(local);
|
const d = normalizarTelefono(local);
|
||||||
return d.length === 10 && !d.startsWith("0");
|
// Ninguna característica argentina empieza con 0 (es el prefijo de larga distancia)
|
||||||
|
// ni con 15 (el viejo prefijo de celular), así que esos casos son error de tipeo.
|
||||||
|
return d.length === 10 && !d.startsWith("0") && !d.startsWith("15");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Número local a formato WhatsApp: 1141984844 → 5491141984844. */
|
/** Número local a formato WhatsApp: 1141984844 → 5491141984844. */
|
||||||
|
|||||||
Reference in New Issue
Block a user
Muestra error 'Faltan dígitos' mientras el usuario está tipeando (antes de llegar a 10). Molesto. Mejor validar solo al blur o al submit.
#ai-review-inline