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)}

+
+ ) : ( +
+
+ {`profile +
+
+
+

{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 && ( +
+ VOIR PLUS +
+ )} +
+
+ ); + +} \ 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}'s -
-
-
-

{name}

-

Rôle : {role}

-

Membre depuis : {since}

-
-
-

Email : {email}

-

Téléphone : {phone}

-
-
-
- )} - - {isExpanded && ( -
- VOIR PLUS -
- )} -
-
- ); -} 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