Skip to content
24 changes: 12 additions & 12 deletions src/app/(dashboard)/users/[id]/edit/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -90,25 +90,25 @@ export default function EditUserPage() {
const genero = gender === UserGender.MALE ? 'hombre' : 'mujer';

const result = registerSchema.safeParse({
nombre: firstName,
apellido: lastName,
firstName: firstName,
lastName: lastName,
email,
cedula: documentId,
telefono: phoneNumber,
fechaNacimiento: birthDate ? convertSlashDateToIso(birthDate) : null,
genero,
documentId: documentId,
phoneNumber: phoneNumber,
birthDate: birthDate ? convertSlashDateToIso(birthDate) : null,
gender: genero,
});

if (!result.success) {
const fieldErrors = result.error.flatten().fieldErrors;
setErrors({
firstName: fieldErrors.nombre?.[0] || '',
lastName: fieldErrors.apellido?.[0] || '',
firstName: fieldErrors.firstName?.[0] || '',
lastName: fieldErrors.lastName?.[0] || '',
email: fieldErrors.email?.[0] || '',
documentId: fieldErrors.cedula?.[0] || '',
phoneNumber: fieldErrors.telefono?.[0] || '',
birthDate: fieldErrors.fechaNacimiento?.[0] || '',
gender: fieldErrors.genero?.[0] || '',
documentId: fieldErrors.documentId?.[0] || '',
phoneNumber: fieldErrors.phoneNumber?.[0] || '',
birthDate: fieldErrors.birthDate?.[0] || '',
gender: fieldErrors.gender?.[0] || '',
});
toast.error('Por favor, revisa los errores en el formulario');
return;
Expand Down
24 changes: 12 additions & 12 deletions src/app/(dashboard)/users/new/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -81,25 +81,25 @@ export default function NewUserPage() {

// Prepara los datos para la validación usando el schema
const result = registerSchema.safeParse({
nombre: firstName,
apellido: lastName,
firstName: firstName,
lastName: lastName,
email,
cedula: documentId,
telefono: phoneNumber,
fechaNacimiento: convertSlashDateToIso(birthDate), // Se espera formato yyyy-mm-dd
genero,
documentId: documentId,
phoneNumber: phoneNumber,
birthDate: convertSlashDateToIso(birthDate), // Se espera formato yyyy-mm-dd
gender: genero,
});

if (!result.success) {
const { fieldErrors } = result.error.flatten();
setErrors({
firstName: fieldErrors.nombre?.[0] || '',
lastName: fieldErrors.apellido?.[0] || '',
firstName: fieldErrors.firstName?.[0] || '',
lastName: fieldErrors.lastName?.[0] || '',
email: fieldErrors.email?.[0] || '',
documentId: fieldErrors.cedula?.[0] || '',
phoneNumber: fieldErrors.telefono?.[0] || '',
birthDate: fieldErrors.fechaNacimiento?.[0] || '',
gender: fieldErrors.genero?.[0] || '',
documentId: fieldErrors.documentId?.[0] || '',
phoneNumber: fieldErrors.phoneNumber?.[0] || '',
birthDate: fieldErrors.birthDate?.[0] || '',
gender: fieldErrors.gender?.[0] || '',
});
toast.error('Por favor, revisa los errores en el formulario');
return;
Expand Down
2 changes: 1 addition & 1 deletion src/lib/validations/categorySchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export const categorySchema = z.object({
description: z
.string()
.min(1, 'La descripción es requerida')
.max(255, 'La descripción no puede exceder 500 caracteres'),
.max(255, 'La descripción no puede exceder 255 caracteres'),
});

export type CategoryFormValues = z.infer<typeof categorySchema>;
4 changes: 2 additions & 2 deletions src/lib/validations/editProfileSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ export const editProfileSchema = z
.string()
.optional()
.refine(
(value) => value === undefined || /^\+\d{8,15}$/.test(value),
'El teléfono debe iniciar con + y tener entre 8 y 15 dígitos',
(value) => value === undefined || /^\d{8,15}$/.test(value),
'El teléfono debe tener entre 8 y 15 dígitos numéricos',
),
birthDate: z
.string()
Expand Down
3 changes: 2 additions & 1 deletion src/lib/validations/loginSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ export const loginSchema = z.object({
password: z
.string()
.nonempty('La contraseña es obligatoria')
.min(6, 'La contraseña debe tener al menos 6 caracteres'),
.min(8, 'La contraseña debe tener al menos 8 caracteres')
.max(255, 'La contraseña no puede exceder los 255 caracteres'),
});
2 changes: 1 addition & 1 deletion src/lib/validations/newPresentationSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { z } from 'zod';

export const newPresentationSchema = z.object({
name: z.string().min(1, 'El nombre de la presentación es requerido'),
description: z.string().optional(), // o .min(1, 'Descripción requerida') si es obligatoria
description: z.string().min(1, 'Descripción requerida'),
quantity: z
.string()
.min(1, 'La cantidad es requerida')
Expand Down
35 changes: 18 additions & 17 deletions src/lib/validations/registerSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,35 @@ import { z } from 'zod';

export const registerSchema = z
.object({
nombre: z
firstName: z
.string()
.nonempty('El nombre es obligatorio')
.min(2, 'El nombre debe tener al menos 2 caracteres')
.max(50, 'El nombre no puede exceder los 50 caracteres')
.regex(/^[a-zA-Z\s]+$/, 'El nombre solo puede contener letras')
.nonempty('El nombre es obligatorio'),
apellido: z
.regex(/^[a-zA-Z\s]+$/, 'El nombre solo puede contener letras'),
lastName: z
.string()
.nonempty('El apellido es obligatorio')
.min(2, 'El apellido debe tener al menos 2 caracteres')
.max(50, 'El apellido no puede exceder los 50 caracteres')
.regex(/^[a-zA-Z\s]+$/, 'El apellido solo puede contener letras')
.nonempty('El apellido es obligatorio'),
.regex(/^[a-zA-Z\s]+$/, 'El apellido solo puede contener letras'),
email: z
.string()
.nonempty('El email es obligatorio')
.email('Formato de email inválido'),
cedula: z
documentId: z
.string()
.nonempty('La cédula es obligatoria')
.regex(/^\d+$/, 'La cédula debe contener solo números'),
telefono: z
phoneNumber: z
.string()
.transform((value) => (value?.trim() === '' ? null : value))
.nullable()
.refine(
(value) => value === null || /^\+\d{8,15}$/.test(value),
'El teléfono debe iniciar con + y tener entre 8 y 15 dígitos',
(value) => value === null || /^\d{8,15}$/.test(value),
'El teléfono debe tener entre 8 y 15 dígitos numéricos',
),
fechaNacimiento: z
birthDate: z
.string()
.nonempty('La fecha de nacimiento es obligatoria')
.regex(
Expand All @@ -54,7 +54,7 @@ export const registerSchema = z
message: 'Debes tener al menos 14 años',
},
),
genero: z
gender: z
.string()
.transform((value) => (value?.trim() === '' ? null : value))
.nullable()
Expand All @@ -67,12 +67,13 @@ export const registerSchema = z
password: z
.string()
.min(8, 'La contraseña debe tener al menos 8 caracteres')
.regex(/[A-Z]/, 'Debe tener al menos una letra mayúscula')
.regex(/[a-z]/, 'Debe tener al menos una letra minúscula')
.regex(/\d/, 'Debe tener al menos un número')
.regex(/[!@#$%^&*]/, 'Debe tener al menos un símbolo especial (!@#$%^&*)')
.max(255, 'La contraseña no puede exceder los 255 caracteres')
.optional(),
confirmPassword: z
.string()
.min(8, 'La contraseña debe tener al menos 8 caracteres')
.max(255, 'La contraseña no puede exceder los 255 caracteres')
.optional(),
confirmPassword: z.string().optional(),
})
.refine(
(data) => {
Expand Down
26 changes: 13 additions & 13 deletions src/lib/validations/updatePasswordSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,23 @@ import { z } from 'zod';

export const updatePasswordSchema = z
.object({
password: z.string().nonempty('La contraseña es obligatoria'),
password: z
.string()
.nonempty('La contraseña actual es obligatoria')
.min(8, 'La contraseña debe tener al menos 8 caracteres')
.max(255, 'La contraseña no puede exceder 255 caracteres'),

newPassword: z
.string()
.min(8, 'La confirmación debe tener al menos 8 caracteres')
.regex(/[A-Z]/, 'Debe tener al menos una letra mayúscula')
.regex(/[a-z]/, 'Debe tener al menos una letra minúscula')
.regex(/\d/, 'Debe tener al menos un número')
.regex(/[!@#$%^&*]/, 'Debe tener al menos un símbolo especial (!@#$%^&*)')
.nonempty('La confirmación de contraseña es obligatoria'),
.nonempty('La contraseña es obligatoria')
.min(8, 'La contraseña debe tener al menos 8 caracteres')
.max(255, 'La contraseña no puede exceder 255 caracteres'),

confirmPassword: z
.string()
.min(8, 'La confirmación debe tener al menos 8 caracteres')
.regex(/[A-Z]/, 'Debe tener al menos una letra mayúscula')
.regex(/[a-z]/, 'Debe tener al menos una letra minúscula')
.regex(/\d/, 'Debe tener al menos un número')
.regex(/[!@#$%^&*]/, 'Debe tener al menos un símbolo especial (!@#$%^&*)')
Comment thread
andres15alvarez marked this conversation as resolved.
.nonempty('La confirmación de contraseña es obligatoria'),
.nonempty('La confirmación de contraseña es obligatoria')
.min(8, 'La contraseña debe tener al menos 8 caracteres')
.max(255, 'La contraseña no puede exceder 255 caracteres'),
})
.refine((data) => data.newPassword === data.confirmPassword, {
message: 'Las contraseñas no coinciden',
Expand Down
Loading