Skip to content
Snippets Groups Projects

candidater avec l'id de l'étudiant dans la session

Merged Fatima Ezzahra Majidi requested to merge master into main
4 files
+ 179
11
Compare changes
  • Side-by-side
  • Inline
Files
4
 
import React, { useState, useEffect } from "react";
 
import { Navigate } from "react-router-dom";
 
 
const CandidacyFormPrerempli = () => {
 
const [students, setStudents] = useState([]);
 
const [stages, setStages] = useState([]);
 
const [supervisors, setSupervisors] = useState([]);
 
 
// ✅ Initialise formData avec un studentId vide (sera mis à jour ensuite)
 
const [formData, setFormData] = useState({
 
studentId: "",
 
stageId: "",
 
univSupervisorId: "",
 
});
 
 
/** 🔹 Charge le studentId à partir du localStorage */
 
useEffect(() => {
 
const storedUser = JSON.parse(localStorage.getItem("user"));
 
if (storedUser && storedUser.username && storedUser.familyname) {
 
setFormData((prevFormData) => ({
 
...prevFormData,
 
studentId: storedUser.id || "", // ✅ Vérifie que l'ID existe
 
}));
 
}
 
}, []);
 
 
/** 🔹 Charge les étudiants avec rôle ETUDIANT (si besoin) */
 
useEffect(() => {
 
fetch("http://localhost:8080/api/students/with-role")
 
.then((res) => res.json())
 
.then((data) => setStudents(data))
 
.catch((err) => console.error("❌ Erreur lors du chargement des étudiants :", err));
 
}, []);
 
 
/** 🔹 Charge les stages */
 
useEffect(() => {
 
fetch("http://localhost:8080/api/stages")
 
.then((res) => res.json())
 
.then((data) => setStages(data));
 
}, []);
 
 
/** 🔹 Charge les superviseurs */
 
useEffect(() => {
 
fetch("http://localhost:8080/api/univsupervisors")
 
.then((res) => res.json())
 
.then((data) => setSupervisors(data));
 
}, []);
 
 
const handleChange = (e) => {
 
setFormData({ ...formData, [e.target.name]: e.target.value });
 
};
 
 
const handleSubmit = (e) => {
 
e.preventDefault();
 
 
const candidacyData = {
 
student: { id: formData.studentId },
 
stage: { id: formData.stageId },
 
univSupervisor: { id: formData.univSupervisorId },
 
};
 
 
console.log("📌 Sending Candidacy Data:", JSON.stringify(candidacyData, null, 2));
 
 
fetch("http://localhost:8080/api/candidacies/add", {
 
method: "POST",
 
headers: { "Content-Type": "application/json" },
 
credentials: "include",
 
body: JSON.stringify(candidacyData),
 
})
 
.then((res) => {
 
console.log("📌 Response status:", res.status);
 
return res.json();
 
})
 
.then((data) => {
 
console.log("✅ Candidacy added successfully:", data);
 
alert("Candidature ajoutée avec succès !");
 
})
 
.catch((err) => console.error("❌ Error:", err.message));
 
};
 
 
return (
 
<div className="container mt-4">
 
<h2>Ajouter ma Candidature</h2>
 
<form onSubmit={handleSubmit}>
 
{/* ✅ Student (prérempli, non modifiable) */}
 
<div className="mb-3">
 
<label className="form-label">Étudiant:</label>
 
<input
 
type="text"
 
className="form-control"
 
value={`${localStorage.getItem("username") || ""} ${localStorage.getItem("familyname") || ""}`}
 
disabled
 
/>
 
</div>
 
 
{/* Select Stage */}
 
<div className="mb-3">
 
<label className="form-label">Stage:</label>
 
<select className="form-control" name="stageId" value={formData.stageId} onChange={handleChange} required>
 
<option value="">Sélectionnez un stage</option>
 
{stages.map((stage) => (
 
<option key={stage.id} value={stage.id}>
 
{stage.name} - {stage.description}
 
</option>
 
))}
 
</select>
 
</div>
 
 
{/* Select UnivSupervisor */}
 
<div className="mb-3">
 
<label className="form-label">Superviseur Universitaire:</label>
 
<select
 
className="form-control"
 
name="univSupervisorId"
 
value={formData.univSupervisorId}
 
onChange={handleChange}
 
required
 
>
 
<option value="">Sélectionnez un superviseur</option>
 
{supervisors.map((supervisor) => (
 
<option key={supervisor.id} value={supervisor.id}>
 
{supervisor.name}
 
</option>
 
))}
 
</select>
 
</div>
 
 
<div className="d-flex gap-2">
 
<button type="submit" className="btn btn-primary">Ajouter Candidature</button>
 
<button type="button" className="btn btn-secondary" onClick={() => Navigate("/candidatures")}>Annuler</button>
 
</div>
 
</form>
 
</div>
 
);
 
};
 
 
export default CandidacyFormPrerempli;
Loading