diff --git a/src/pages/Volunteers/VolunteerCard.jsx b/src/pages/Volunteers/VolunteerCard.jsx
new file mode 100644
index 0000000..c402971
--- /dev/null
+++ b/src/pages/Volunteers/VolunteerCard.jsx
@@ -0,0 +1,67 @@
+import React, {useEffect, useState} from "react";
+import styles from "./VolunteersPage.module.css";
+import getUserById from "../../utils/users/getUserById.js";
+import formatDate from "../../utils/date/formatDate.js";
+
+export default function VolunteerCard({ id }) {
+
+ const [isExpanded, setIsExpanded] = useState(false);
+ const [user, setUser] = useState({});
+
+ const toggleExpand = () => {
+ setIsExpanded(!isExpanded);
+ };
+
+ useEffect(() => {
+ (async () => {
+ const data = await getUserById(id);
+ setUser(data);
+ }) ()
+ }, []);
+
+ return (
+
+
+ {!isExpanded ? (
+
+
{user?.name}
+
Rôle : {user?.role}
+
Membre depuis : {user?.created_at && formatDate(user.created_at)}
+
+ ) : (
+
+
+

+
+
+
+
{user?.name}
+
Rôle : {user?.role}
+
Membre depuis : {user?.created_at && formatDate(user.created_at)}
+
+
+
Email : {user?.email}
+
+ {user?.phone && (
+
Téléphone : {user.phone}
+ )}
+
+
+
+ )}
+
+ {isExpanded && (
+
+ )}
+
+
+ );
+
+}
\ No newline at end of file
diff --git a/src/pages/Volunteers/VolunteersPage.jsx b/src/pages/Volunteers/VolunteersPage.jsx
index 782f2a3..0fa3d2c 100644
--- a/src/pages/Volunteers/VolunteersPage.jsx
+++ b/src/pages/Volunteers/VolunteersPage.jsx
@@ -1,106 +1,23 @@
-
-import React, { useState } from "react";
+import { useState, useEffect } from "react";
import styles from "./VolunteersPage.module.css";
+import VolunteerCard from "./VolunteerCard.jsx";
+import getAllUser from "../../utils/users/getAllUsers.js";
-function Volunteer({ name, role, since, email, phone, photo }) {
- const [isExpanded, setIsExpanded] = useState(false);
-
- const toggleExpand = () => {
- setIsExpanded(!isExpanded);
- };
-
- return (
-
-
- {!isExpanded ? (
-
-
{name}
-
Rôle : {role}
-
Membre depuis : {since}
-
- ) : (
-
-
-

-
-
-
-
{name}
-
Rôle : {role}
-
Membre depuis : {since}
-
-
-
Email : {email}
-
Téléphone : {phone}
-
-
-
- )}
-
- {isExpanded && (
-
- )}
-
-
- );
-}
function VolunteerPage() {
- const volunteers = [
- {
- name: "LEBLOND Malo",
- role: "Président",
- since: "2019",
- email: "malo.leblond@example.com",
- phone: "08 67 87 32 21",
- photo: "../src/assets/react.svg",
- },
- {
- name: "DUPONT Jean",
- role: "Bénévole",
- since: "2020",
- email: "jean.dupont@example.com",
- phone: "06 12 34 56 78",
- photo: "../src/assets/react.svg",
- },
- {
- name: "MARTIN Sophie",
- role: "Bénévole",
- since: "2021",
- email: "sophie.martin@example.com",
- phone: "06 87 65 43 21",
- photo: "../src/assets/react.svg",
- },
- {
- name: "MARTIN Sophie",
- role: "Bénévole",
- since: "2021",
- email: "sophie.martin@example.com",
- phone: "06 87 65 43 21",
- photo: "../src/assets/react.svg",
- },
- ];
+
+ const [users, setUsers] = useState([]);
+
+ useEffect(() => {
+ (async () => {
+ const data = await getAllUser();
+ setUsers(data);
+ }) ()
+ }, [])
return (
- {volunteers.map((volunteer, index) => (
-
- ))}
+ {users.map((user, index) => )}
);
}
diff --git a/src/utils/users/getAllUsers.js b/src/utils/users/getAllUsers.js
new file mode 100644
index 0000000..c9c383e
--- /dev/null
+++ b/src/utils/users/getAllUsers.js
@@ -0,0 +1,21 @@
+export default async function getAllUser() {
+ try {
+ const res = await fetch(`http://${import.meta.env.VITE_API_URL}/api/users`, {
+ 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/getUserById.js b/src/utils/users/getUserById.js
new file mode 100644
index 0000000..59af94a
--- /dev/null
+++ b/src/utils/users/getUserById.js
@@ -0,0 +1,20 @@
+export default async function getUserById (id) {
+ try {
+ const res = await fetch(`http://${import.meta.env.VITE_API_URL}/api/users/${id}`, {
+ method: 'GET',
+ credentials: 'include',
+ headers: {
+ 'Accept': 'application/json'
+ }
+ });
+
+ 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