This commit is contained in:
Mathis 2025-04-13 15:18:32 +02:00
commit 76d5e02d4c

View File

@ -9,8 +9,14 @@ const th = `${thTd} bg-gray-100`;
function User() { function User() {
const [users, setUsers] = useState([]); const [users, setUsers] = useState([]);
const [logs, setLogs] = useState([]); const [logs, setLogs] = useState([]);
const [name, setname] = useState(""); const [name, setname] = useState("");
const [surname, setSurname] = useState("");
const [pseudo, setPseudo] = useState("");
const [email, setEmail] = useState(""); const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
const [gender, setGender] = useState("Homme");
const [pointsInput, setPointsInput] = useState({}); const [pointsInput, setPointsInput] = useState({});
const handleAddUser = (e) => { const handleAddUser = (e) => {
@ -18,20 +24,32 @@ function User() {
const newUser = { const newUser = {
id: Date.now(), id: Date.now(),
name, name,
surname,
pseudo,
email, email,
password,
gender,
accessLevel: "User", accessLevel: "User",
points: 0, points: 0,
}; };
setUsers([...users, newUser]); setUsers([...users, newUser]);
logAction(name, "Utilisateur ajouté"); logAction(name, "Utilisateur ajouté");
// Réinitialisation du formulaire
setname(""); setname("");
setSurname("");
setPseudo("");
setEmail(""); setEmail("");
setPassword("");
setGender("Homme");
}; };
useEffect(() => { useEffect(() => {
axios.get(`${API_BASE_URL}/users`).then((response) => { axios.get(`${API_BASE_URL}/users`).then((response) => {
setUsers(response.data); setUsers(response.data);
}); });
}, []); }, []);
const handleDeleteUser = (userId) => { const handleDeleteUser = (userId) => {
const user = users.find((u) => u.id === userId); const user = users.find((u) => u.id === userId);
@ -50,10 +68,7 @@ function User() {
window.location.reload(); window.location.reload();
}) })
.catch((error) => { .catch((error) => {
console.error( console.error("Erreur lors de la suppression de l'utilisateur :", error);
"Erreur lors de la suppression de l'utilisateur :",
error
);
}); });
logAction(user.name, "Utilisateur supprimé"); logAction(user.name, "Utilisateur supprimé");
@ -68,7 +83,7 @@ function User() {
const handleChangeAccessLevel = (userId, newLevel) => { const handleChangeAccessLevel = (userId, newLevel) => {
setUsers( setUsers(
users.map((user) => { users.map((user) => {
if (user.id === userId && newLevel != user.role) { if (user.id === userId && newLevel !== user.role) {
const oldLevel = user.role; const oldLevel = user.role;
user.role = newLevel; user.role = newLevel;
if (user.role === "user") { if (user.role === "user") {
@ -91,10 +106,7 @@ function User() {
alert("Il y a eu une erreur dans le changement de niveau !"); alert("Il y a eu une erreur dans le changement de niveau !");
console.error("Erreur lors du changement de niveau :", error); console.error("Erreur lors du changement de niveau :", error);
}); });
logAction( logAction(user.name, `Niveau d'accès changé de ${oldLevel} à ${newLevel}`);
user.name,
`Niveau d'accés changé de ${oldLevel} à ${newLevel}`
);
} }
return user; return user;
}) })
@ -113,14 +125,14 @@ function User() {
points: user.points, points: user.points,
}) })
.then((response) => { .then((response) => {
alert("Les points ont bien été enregistré !"); alert("Les points ont bien été enregistrés !");
console.log("Ajout des points réussit :", response.data); console.log("Ajout des points réussi :", response.data);
}) })
.catch((error) => { .catch((error) => {
alert("Il y a eu une erreur dans l'ajout des points!"); alert("Il y a eu une erreur dans l'ajout des points !");
console.error("Erreur lors de l'ajout des points :", error); console.error("Erreur lors de l'ajout des points :", error);
}); });
logAction(user.name, `Points ajustés par ${pointsToAdd}`); logAction(user.name, `Points ajustés à ${pointsToAdd}`);
} }
return user; return user;
}) })
@ -157,29 +169,60 @@ function User() {
<p>Gérez les utilisateurs à partir de ce panneau.</p> <p>Gérez les utilisateurs à partir de ce panneau.</p>
<form <form
className="gap-3 mb-5 grid grid-cols-[1fr_1fr_auto]" className="gap-3 mb-5 grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6"
onSubmit={handleAddUser} onSubmit={handleAddUser}
> >
<input <input
className="p-3 border rounded-md" className="p-3 border rounded-md"
type="text" type="text"
id="name" placeholder="Nom"
placeholder="name"
value={name} value={name}
onChange={(e) => setname(e.target.value)} onChange={(e) => setname(e.target.value)}
required required
/> />
<input
className="p-3 border rounded-md"
type="text"
placeholder="Prénom"
value={surname}
onChange={(e) => setSurname(e.target.value)}
required
/>
<input
className="p-3 border rounded-md"
type="text"
placeholder="Pseudo"
value={pseudo}
onChange={(e) => setPseudo(e.target.value)}
required
/>
<input <input
className="p-3 border rounded-md" className="p-3 border rounded-md"
type="email" type="email"
id="email"
placeholder="Email" placeholder="Email"
value={email} value={email}
onChange={(e) => setEmail(e.target.value)} onChange={(e) => setEmail(e.target.value)}
required required
/> />
<input
className="p-3 border rounded-md"
type="password"
placeholder="Mot de passe"
value={password}
onChange={(e) => setPassword(e.target.value)}
required
/>
<select
className="p-3 border rounded-md"
value={gender}
onChange={(e) => setGender(e.target.value)}
>
<option value="Homme">Homme</option>
<option value="Femme">Femme</option>
<option value="Autre">Autre</option>
</select>
<button <button
className="p-3 bg-green-600 text-white border-none rounded-md " className="p-3 bg-green-600 text-white border-none rounded-md col-span-full md:col-span-1"
type="submit" type="submit"
> >
Ajouter utilisateur Ajouter utilisateur
@ -189,19 +232,25 @@ function User() {
<table className="w-full"> <table className="w-full">
<thead> <thead>
<tr> <tr>
<th className={`${th}`}>Nom</th> <th className={th}>Nom</th>
<th className={`${th}`}>Email</th> <th className={th}>Prénom</th>
<th className={`${th}`}>Niveau d'accès</th> <th className={th}>Pseudo</th>
<th className={`${th}`}>Points</th> <th className={th}>Email</th>
<th className={`${th}`}>Actions</th> <th className={th}>Genre</th>
<th className={th}>Niveau d'accès</th>
<th className={th}>Points</th>
<th className={th}>Actions</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{users.map((user) => ( {users.map((user) => (
<tr key={user.id}> <tr key={user.id}>
<td className={`${thTd}`}>{user.name}</td> <td className={thTd}>{user.name}</td>
<td className={`${thTd}`}>{user.email}</td> <td className={thTd}>{user.surname}</td>
<td className={`${thTd}`}> <td className={thTd}>{user.pseudo}</td>
<td className={thTd}>{user.email}</td>
<td className={thTd}>{user.gender}</td>
<td className={thTd}>
<select <select
value={user.role} value={user.role}
onChange={(e) => onChange={(e) =>
@ -214,7 +263,7 @@ function User() {
<option value="complexe">Complexe</option> <option value="complexe">Complexe</option>
</select> </select>
</td> </td>
<td className={`${thTd}`}> <td className={thTd}>
<input <input
className="border ml-4 w-16" className="border ml-4 w-16"
type="number" type="number"
@ -234,7 +283,7 @@ function User() {
Changer Changer
</button> </button>
</td> </td>
<td className={`${thTd}`}> <td className={thTd}>
<button <button
className="p-2 bg-red-600 text-white border-none rounded-md" className="p-2 bg-red-600 text-white border-none rounded-md"
onClick={() => handleDeleteUser(user.id)} onClick={() => handleDeleteUser(user.id)}
@ -255,17 +304,17 @@ function User() {
<table className="w-full"> <table className="w-full">
<thead> <thead>
<tr> <tr>
<th className={`${th}`}>Nom</th> <th className={th}>Nom</th>
<th className={`${th}`}>Action</th> <th className={th}>Action</th>
<th className={`${th}`}>Timestamp</th> <th className={th}>Timestamp</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{logs.map((log) => ( {logs.map((log) => (
<tr key={log.id}> <tr key={log.id}>
<td className={`${thTd}`}>{log.name}</td> <td className={thTd}>{log.name}</td>
<td className={`${thTd}`}>{log.action}</td> <td className={thTd}>{log.action}</td>
<td className={`${thTd}`}>{log.timestamp}</td> <td className={thTd}>{log.timestamp}</td>
</tr> </tr>
))} ))}
</tbody> </tbody>