diff --git a/src/components/manageMember/ManageMember.jsx b/src/components/manageMember/ManageMember.jsx index 0f9e4a9..0485ad8 100644 --- a/src/components/manageMember/ManageMember.jsx +++ b/src/components/manageMember/ManageMember.jsx @@ -1,13 +1,29 @@ import Button from "../ui/button/button.jsx"; import Modal from "../ui/modal/modal.jsx"; -import { useState } from "react"; +import { useState, useEffect } 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"; 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 <> + + } \ No newline at end of file diff --git a/src/components/manageMember/manageMember.module.css b/src/components/manageMember/manageMember.module.css index ca9639d..6f59f30 100644 --- a/src/components/manageMember/manageMember.module.css +++ b/src/components/manageMember/manageMember.module.css @@ -16,4 +16,28 @@ .manageBlockContent { margin: 0.5em; +} + +.modifyRole { + display: flex; + flex-direction: row; + justify-content: space-evenly; + align-items: center; +} + +.select { + width: 70%; + padding: 10px 14px; + + font-size: 14px; + font-weight: 500; + color: #1d1d1f; + + background-color: #ffffff; + border: 1px solid #d2d2d7; + border-radius: 10px; + + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; } \ No newline at end of file diff --git a/src/utils/getRoles.js b/src/utils/getRoles.js new file mode 100644 index 0000000..5d6d3d6 --- /dev/null +++ b/src/utils/getRoles.js @@ -0,0 +1,21 @@ +export default async function getRoles() { + try { + const res = await fetch(`${import.meta.env.VITE_API_URL}/api/roles`, { + method: 'GET', + credentials: 'include', + headers: { + 'Accept': 'application/json' + } + }); + + if (!res.ok) { + throw new Error(`Erreur serveur : ${res.status}`); + } + + const data = await res.json(); + return data; + } catch (err) { + console.error('Erreur :', err); + return null; + } +} diff --git a/src/utils/users/modifyRole.js b/src/utils/users/modifyRole.js new file mode 100644 index 0000000..e95ac3f --- /dev/null +++ b/src/utils/users/modifyRole.js @@ -0,0 +1,30 @@ +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, + }) + }); + + if (!res.ok) { + throw new Error(`Erreur serveur : ${res.status}`); + } + + return await res.json(); + } catch (err) { + console.error('Erreur :', err); + return null; + } +} \ No newline at end of file