Files
item_opina/utils/validations.ts
gestions-UO 838bec205e first commit
2026-05-11 20:50:44 +02:00

38 lines
1.4 KiB
TypeScript

import { z } from "zod";
// --- ESQUEMA DE CONTACTO ---
export const ContactoSchema = z.object({
nombre: z.string().min(2, "El nombre es demasiado corto"),
email: z.string().email("Introduce un correo electrónico válido"),
mensaje: z.string().min(10, "Cuéntanos un poco más sobre tu proyecto"),
privacidad: z.boolean().refine((val) => val === true, {
message: "Debes aceptar la política de privacidad",
}),
});
export type ContactoFormData = z.infer<typeof ContactoSchema>;
// --- ESQUEMA DE PARTICIPACIÓN ---
export const ParticipaSchema = z.object({
nombre: z.string().min(2, "El nombre es demasiado corto"),
apellidos: z.string().min(2, "Los apellidos son necesarios"),
email: z.string().email("Introduce un correo electrónico válido"),
telefono: z.string().min(9, "El teléfono no es válido"),
provincia: z.string().min(2, "Indica tu provincia"),
edad: z.string().refine((val) => !isNaN(Number(val)) && Number(val) > 0, {
message: "Introduce una edad válida",
}),
// SOLUCIÓN: Ahora acepta un string genérico (el ID de Supabase) o vacío (opcional)
interes: z.string().optional(),
mensaje: z.string().optional(),
// Usar boolean().refine() es más seguro con checkboxes en React Hook Form
privacidad: z.boolean().refine((val) => val === true, {
message: "Debes aceptar la política de privacidad",
}),
});
export type ParticipaFormData = z.infer<typeof ParticipaSchema>;