first commit
This commit is contained in:
38
utils/validations.ts
Normal file
38
utils/validations.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
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>;
|
||||
Reference in New Issue
Block a user