Files
front-AT/app/Components/Alta/registerAlta.tsx
T
2026-02-24 18:29:42 -06:00

212 lines
5.2 KiB
TypeScript

"use client";
import { useEffect, useState } from "react";
import apiClient from "@/app/lib/apiClient";
import "./registerAlta.css";
import { useRouter } from "next/navigation";
import Swal from "sweetalert2";
type Carrera = {
id_carrera: number;
carrera: string;
};
interface urlProp {
numCount: string | null;
}
export default function RegisterAlta(props: urlProp) {
const router = useRouter();
const [listMajor, setListMajor] = useState<Carrera[]>([]);
const [saved, setSaved] = useState(false);
const [form, setForm] = useState({
cuenta: String(props.numCount),
nombre: "",
apellidoP: "",
apellidoM: "",
email: `${props.numCount}@pcpuma.acatlan.unam.mx`,
genero: "",
carrera: "",
});
useEffect(() => {
const fetchCarreras = async () => {
try {
const response = await apiClient.get("/carrera");
const sorted = response.data.sort((a: Carrera, b: Carrera) =>
a.carrera.localeCompare(b.carrera),
);
setListMajor(sorted);
} catch (error) {
console.error("Error al obtener carreras:", error);
}
};
fetchCarreras();
}, []);
const handleChange = (
e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>,
) => {
const { name, value } = e.target;
setForm((prev) => ({ ...prev, [name]: value }));
};
const isFormComplete = Object.values(form).every(
(value) => value.trim() !== "",
);
const handleSave = async (e: React.MouseEvent) => {
e.preventDefault();
try {
const payload = {
id_cuenta: Number(form.cuenta),
nombre: `${form.apellidoP} ${form.apellidoM} ${form.nombre}`.trim(),
correo: form.email || undefined,
id_carrera: Number(form.carrera),
genero: form.genero || undefined,
};
await apiClient.post("/student", payload);
setSaved(true);
Swal.fire({
title: "Alumno registrado correctamente!",
icon: "success",
draggable: true,
});
} catch (error) {
console.error("Error al guardar alumno:", error);
Swal.fire({
title: "Error al guardar alumno:!",
icon: "error",
draggable: true,
});
}
};
const handleInscripcion = (e: React.MouseEvent) => {
e.preventDefault();
router.push(`/Inscripcion?numAcount=${form.cuenta}`);
};
return (
<form className="containerAlta gap gridAlta">
<div className="containerForm">
<label className="label">No. Cuenta</label>
<input
type="text"
name="cuenta"
value={form.cuenta}
onChange={handleChange}
placeholder="Coloca un número de cuenta..."
required
/>
</div>
<div className="containerForm">
<label className="label">Nombre</label>
<input
type="text"
name="nombre"
value={form.nombre}
onChange={handleChange}
placeholder="Coloca el nombre"
required
/>
</div>
<div className="containerForm">
<label className="label">Apellido Paterno</label>
<input
type="text"
name="apellidoP"
value={form.apellidoP}
onChange={handleChange}
placeholder="Coloca el apellido paterno"
required
/>
</div>
<div className="containerForm">
<label className="label">Apellido Materno</label>
<input
type="text"
name="apellidoM"
value={form.apellidoM}
onChange={handleChange}
placeholder="Coloca el apellido materno"
required
/>
</div>
<div className="containerForm">
<label className="label">Email</label>
<input
type="email"
name="email"
value={form.email}
onChange={handleChange}
placeholder="Coloca el email"
/>
</div>
<div className="containerForm">
<label className="label">Género</label>
<select
name="genero"
value={form.genero}
onChange={handleChange}
required
>
<option value="">Selecciona género</option>
<option value="Femenino">Femenino</option>
<option value="Masculino">Masculino</option>
<option value="Otro">Otro</option>
</select>
</div>
<div className="containerForm">
<label className="label">Carrera</label>
<select
name="carrera"
value={form.carrera}
onChange={handleChange}
required
>
<option value="">Selecciona la carrera</option>
{listMajor.map((c) => (
<option key={c.id_carrera} value={c.id_carrera}>
{c.carrera}
</option>
))}
</select>
</div>
<div className="altaContainerButton">
<button
className="button buttonSave"
disabled={!isFormComplete}
onClick={handleSave}
>
Guardar
</button>
<button
className="button buttonInscription"
disabled={!saved}
onClick={handleInscripcion}
>
Inscripción
</button>
</div>
</form>
);
}