From 33430ca04e3ee0c1dac868737448ccad4921806e Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Tue, 13 Jan 2026 22:51:10 +0100 Subject: [PATCH] Show modal on modify + split component --- src/components/manageMember/ManageMember.jsx | 38 +----------- .../manageMember/manageMember.module.css | 4 ++ .../manageMember/modifyrole/ModifyRole.jsx | 59 +++++++++++++++++++ src/utils/users/modifyRole.js | 43 +++++++------- 4 files changed, 89 insertions(+), 55 deletions(-) create mode 100644 src/components/manageMember/modifyrole/ModifyRole.jsx diff --git a/src/components/manageMember/ManageMember.jsx b/src/components/manageMember/ManageMember.jsx index 0485ad8..04bef13 100644 --- a/src/components/manageMember/ManageMember.jsx +++ b/src/components/manageMember/ManageMember.jsx @@ -1,29 +1,14 @@ import Button from "../ui/button/button.jsx"; import Modal from "../ui/modal/modal.jsx"; -import { useState, useEffect } from "react"; +import { useState } from "react"; import styles from "./manageMember.module.css" import DeleteMemberBtn from "./deleteMember/deleteMemberBtn.jsx"; -import getRoles from "../../utils/getRoles.js" -import modifyRole from "../../utils/users/modifyRole.js"; +import ModifyRole from "./modifyrole/ModifyRole.jsx"; export default function ManageMember({ user }) { const [open, setOpen] = useState(false); - const [roles, setRoles] = useState([]); - const [selectedRole, setSelectedRole] = useState(3); - useEffect(() => { - if (!open) return; - - getRoles().then(data => { - if (data) setRoles(data); - }); - }, [open]); - - const handleRoleUpdate = async () => { - const res = await modifyRole(selectedRole, user.id); - console.log(res); - }; return <> - + diff --git a/src/components/manageMember/manageMember.module.css b/src/components/manageMember/manageMember.module.css index 6f59f30..fc250ad 100644 --- a/src/components/manageMember/manageMember.module.css +++ b/src/components/manageMember/manageMember.module.css @@ -40,4 +40,8 @@ appearance: none; -webkit-appearance: none; -moz-appearance: none; +} + +.modalContent { + text-align: center; } \ No newline at end of file diff --git a/src/components/manageMember/modifyrole/ModifyRole.jsx b/src/components/manageMember/modifyrole/ModifyRole.jsx new file mode 100644 index 0000000..11ecdf3 --- /dev/null +++ b/src/components/manageMember/modifyrole/ModifyRole.jsx @@ -0,0 +1,59 @@ +import styles from "../manageMember.module.css"; +import Button from "../../ui/button/button.jsx"; +import modifyRole from "../../../utils/users/modifyRole.js"; +import { useState, useEffect } from "react"; +import getRoles from "../../../utils/getRoles.js"; +import Modal from "../../ui/modal/modal.jsx"; + +export default function ModifyRole({ user }) { + + const [roles, setRoles] = useState([]); + const [selectedRole, setSelectedRole] = useState(3); + const [open, setOpen] = useState(false); + const [title, setTitle] = useState(""); + const [description, setDescription] = useState(""); + + useEffect(() => { + getRoles().then(data => { + if (data) setRoles(data); + }); + }, []) + + + const handleRoleUpdate = async () => { + const res = await modifyRole(selectedRole, user.id); + + if (res.success) { + setDescription("Rôle modifié avec succès"); + setTitle("Modification") + setOpen(true); + } else { + setDescription("Erreur lors de la modification du rôle"); + setTitle("Erreur") + setOpen(true); + } + }; + + + return
+ + + + + setOpen(false)} title={title}> +

{description}

+
+
+} \ No newline at end of file diff --git a/src/utils/users/modifyRole.js b/src/utils/users/modifyRole.js index e95ac3f..e0c9ae8 100644 --- a/src/utils/users/modifyRole.js +++ b/src/utils/users/modifyRole.js @@ -1,30 +1,33 @@ import getXSRFToken from "../getXSRF.js"; + export default async function modifyRole(role, userId) { - - const csrfToken = await getXSRFToken(); - try { - const res = await fetch(`${import.meta.env.VITE_API_URL}/api/users/${userId}/role`, { - method: 'POST', - credentials: 'include', - headers: { - 'Accept': 'application/json', - 'X-XSRF-TOKEN': csrfToken, - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - role: role, - }) - }); + const csrfToken = await getXSRFToken(); + + const res = await fetch( + `${import.meta.env.VITE_API_URL}/api/users/${userId}/role`, + { + method: 'POST', + credentials: 'include', + headers: { + 'Accept': 'application/json', + 'X-XSRF-TOKEN': csrfToken, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ role }), + } + ); + + const data = await res.json(); if (!res.ok) { - throw new Error(`Erreur serveur : ${res.status}`); + return { success: false, error: data.message ?? "Erreur serveur" }; } - return await res.json(); + return { success: true, data }; } catch (err) { - console.error('Erreur :', err); - return null; + console.error(err); + return { success: false, error: "Erreur réseau" }; } -} \ No newline at end of file +}