diff --git a/src/components/manageMember/ManageMember.jsx b/src/components/manageMember/ManageMember.jsx index 2f240b0..33d73ca 100644 --- a/src/components/manageMember/ManageMember.jsx +++ b/src/components/manageMember/ManageMember.jsx @@ -2,6 +2,7 @@ import Button from "../ui/button/button.jsx"; import Modal from "../ui/modal/modal.jsx"; import { useState } from "react"; import styles from "./manageMember.module.css" +import DeleteMemberBtn from "./deleteMember/deleteMemberBtn.jsx"; export default function ManageMember({ user }) { @@ -16,6 +17,10 @@ export default function ManageMember({ user }) { setOpen(false)} title={`Gestion de l'utilisateur ${user.name}`}> +
+

Supprimer le compte

+ +
} \ No newline at end of file diff --git a/src/components/manageMember/deleteMember/deleteMemberBtn.jsx b/src/components/manageMember/deleteMember/deleteMemberBtn.jsx new file mode 100644 index 0000000..26561a2 --- /dev/null +++ b/src/components/manageMember/deleteMember/deleteMemberBtn.jsx @@ -0,0 +1,31 @@ +import Button from "../../ui/button/button.jsx"; +import Modal from "../../ui/modal/modal.jsx"; +import { useState } from "react"; +import deleteUser from "../../../utils/users/deleteUser.js" +import { useNavigate } from "react-router"; + +export default function DeleteMemberBtn({ name, id }) { + + const [open, setOpen] = useState(false); + const navigate = useNavigate(); + + const delMember = async () => { + const result = await deleteUser(id); + + if (result.status === 200 || result.status === 204) { + setOpen(false); + navigate("/volunteers"); + } + } + + return <> + + + setOpen(false)} title={"Supprimer"}> +
+

Etes-vous sur de vouloir supprimer le compte {name} ?

+ +
+
+ +} \ No newline at end of file diff --git a/src/components/manageMember/manageMember.module.css b/src/components/manageMember/manageMember.module.css index d97bfd5..9fb20df 100644 --- a/src/components/manageMember/manageMember.module.css +++ b/src/components/manageMember/manageMember.module.css @@ -5,4 +5,11 @@ .manageBtn { display: flex; flex-direction: row; +} + +.manageSection { + display: flex; + flex-direction: column; + gap: 8px; + margin: 1.5em; } \ No newline at end of file diff --git a/src/utils/users/deleteUser.js b/src/utils/users/deleteUser.js new file mode 100644 index 0000000..4e3f24d --- /dev/null +++ b/src/utils/users/deleteUser.js @@ -0,0 +1,34 @@ +import getXSRFToken from "../getXSRF.js"; + +export default async function deleteUser(userId) { + const csrfToken = await getXSRFToken(); + + try { + const response = await fetch(`${import.meta.env.VITE_API_URL}/api/users/${userId}`, { + method: 'DELETE', + credentials: 'include', + headers: { + 'Content-Type': 'application/json', + 'X-XSRF-TOKEN': csrfToken, + 'Accept': 'application/json' + }, + body: JSON.stringify({ + id: userId + }) + }); + + const data = await response.json(); + + if (!response.ok) { + return { + status: response.status, + errors: data.errors || data.message + }; + } + + return { status: response.status, data }; + + } catch (error) { + return { status: 500, error }; + } +}