From 65893bf0522bce9d8b2985354aeaac7abfdb7c8b Mon Sep 17 00:00:00 2001 From: SirRobert-1 Date: Thu, 22 May 2025 11:41:25 -0600 Subject: [PATCH] feat: implement form validation for alumno editing using Zod schema --- diplomas/src/pages/alumnosVista.jsx | 118 +++++++++++++++++--------- diplomas/src/schemas/AlumnosSchema.js | 4 +- 2 files changed, 80 insertions(+), 42 deletions(-) diff --git a/diplomas/src/pages/alumnosVista.jsx b/diplomas/src/pages/alumnosVista.jsx index 1778a34..4ee0e81 100644 --- a/diplomas/src/pages/alumnosVista.jsx +++ b/diplomas/src/pages/alumnosVista.jsx @@ -19,14 +19,16 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select"; -import { set } from "react-hook-form"; +import { useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { alumnoSchema } from "@/schemas/AlumnosSchema"; export default function AlumnosVista() { const [alumnos, setAlumnos] = useState([]); const [alumnoEditando, setAlumnoEditando] = useState(null); const [nuevoNombre, setNuevoNombre] = useState(""); const [nuevoCorreo, setNuevoCorreo] = useState(""); - const [nuevoNumero, setNuevoNumero] = useState(""); + const [nuevoNumero, setNuevoNumero] = useState(""); const [mostrarModal, setMostrarModal] = useState(false); const [modalMensaje, setModalMensaje] = useState(""); const [nuevoCurso, setNuevoCurso] = useState(""); @@ -62,38 +64,50 @@ export default function AlumnosVista() { } }; + const { + register, + handleSubmit, + setValue, + reset, + formState: { errors }, + } = useForm({ + resolver: zodResolver(alumnoSchema), + defaultValues: { + nombre: "", + correo: "", + telefono: "", + cursoSeleccionado: "", + }, + }); + // Iniciar edición const iniciarEdicion = (alumno) => { setAlumnoEditando(alumno.id); - setNuevoNombre(alumno.nombre); - setNuevoCorreo(alumno.correo); - setNuevoNumero(alumno.telefono); - setNuevoCurso(alumno.curso_id); + setValue("nombre", alumno.nombre); + setValue("correo", alumno.correo); + setValue("telefono", alumno.telefono); + setValue("cursoSeleccionado", alumno.curso_id?.toString() || ""); }; // Cancelar edición const cancelarEdicion = () => { setAlumnoEditando(null); - setNuevoNombre(""); - setNuevoCorreo(""); - setNuevoNumero(""); - setNuevoCurso(""); + reset(); }; // Guardar cambios - const guardarEdicion = async (id) => { + const guardarEdicion = async (data) => { const { error } = await supabaseClient .from("alumno") .update({ - nombre: nuevoNombre, - correo: nuevoCorreo, - telefono: nuevoNumero, - curso_id: nuevoCurso, + nombre: data.nombre, + correo: data.correo, + telefono: data.telefono, + curso_id: data.cursoSeleccionado, }) - .eq("id", id); + .eq("id", alumnoEditando); if (error) { - console.error("Error actualizando alumno:", error.message); setModalMensaje("Error al actualizar el alumno"); } else { setModalMensaje("Alumno actualizado exitosamente"); @@ -111,7 +125,10 @@ export default function AlumnosVista() { // Eliminar alumno const eliminarAlumno = async () => { - const { error } = await supabaseClient.from("alumno").delete().eq("id", alumnoAEliminar); + const { error } = await supabaseClient + .from("alumno") + .delete() + .eq("id", alumnoAEliminar); if (error) { console.error("Error eliminando alumno:", error.message); setModalMensaje("Error al eliminar el alumno"); @@ -148,47 +165,61 @@ export default function AlumnosVista() { {alumno.id} - setNuevoNombre(e.target.value)} - /> + + {errors.nombre && ( + + {errors.nombre.message} + + )} - setNuevoCorreo(e.target.value)} - /> + + {errors.correo && ( + + {errors.correo.message} + + )} - setNuevoNumero(e.target.value)} - /> + + {errors.telefono && ( + + {errors.telefono.message} + + )} + {errors.cursoSeleccionado && ( + + {errors.cursoSeleccionado.message} + + )} @@ -206,7 +237,9 @@ export default function AlumnosVista() { {alumno.nombre} {alumno.correo} {alumno.telefono} - {alumno.curso?.nombre || "Sin curso"} + + {alumno.curso?.nombre || "Sin curso"} +