From c11bb849c5fcaee5f4a87e569b47f41b250cfd09 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Fri, 30 Jan 2026 14:37:41 +0100 Subject: [PATCH] use fetchWrapper for getUserById.js --- .../VolunteerProfile/VolunteerProfilePage.jsx | 108 ++++++++++-------- src/pages/Volunteers/VolunteersPage.jsx | 44 ++++--- src/utils/users/getUserById.js | 24 +--- 3 files changed, 92 insertions(+), 84 deletions(-) diff --git a/src/pages/VolunteerProfile/VolunteerProfilePage.jsx b/src/pages/VolunteerProfile/VolunteerProfilePage.jsx index 62d467a..763b7f7 100644 --- a/src/pages/VolunteerProfile/VolunteerProfilePage.jsx +++ b/src/pages/VolunteerProfile/VolunteerProfilePage.jsx @@ -1,74 +1,84 @@ -import styles from "./VolunteerProfilePage.module.css" -import { useParams } from "react-router"; +import styles from "./VolunteerProfilePage.module.css"; +import { useParams, useNavigate } from "react-router"; import { useEffect, useState, useContext } from "react"; import getUserById from "../../utils/users/getUserById.js"; import formatDate from "../../utils/date/formatDate.js"; import Task from "../../components/Task/Task.jsx"; -import { useNavigate } from "react-router"; import ManageMember from "./components/manageMember/ManageMember.jsx"; import { AuthContext } from "../../contexts/auth/AuthContext.js"; export default function VolunteerProfilePage() { - - const params = useParams(); - const id = params.id; - + const { id } = useParams(); const navigate = useNavigate(); - const { user: currentUser } = useContext(AuthContext); - const [user, setUser] = useState({}); + const [user, setUser] = useState(null); useEffect(() => { (async () => { - const result = await getUserById(id); - if (result?.error === 'not_found') { + const res = await getUserById(id); + + if (res.status === 404) { navigate("/404"); - } else { - setUser(result); + return; } + + if (res.status !== 200) { + console.error("Erreur lors du chargement du profil", res); + return; + } + + setUser(res.data); })(); - }, [id]); + }, [id, navigate]); + if (!user) return null; - - return
-
-
-
- Photo de profil -
-
-
-

{user.name} {user.lastname}

- {currentUser?.isAdmin && } -
-
-
-

Role : {user.role}

-

Membre depuis : {formatDate(user.created_at)}

-
-
-

Mail : {user.email}

-

Téléphone : {user.phone === null ? "Pas de numéro enregistré" : user.phone}

-
+ return ( +
+
+
+
+ Photo de profil
-

Tâches :

- {user.tasks && user.tasks.length > 0 ? ( - user.tasks.map((task, index) => ( - - )) - ) : ( -

Aucune tâche pour le moment.

- )} +
+
+

{user.name} {user.lastname}

+ {currentUser?.isAdmin && ( + + )} +
+
+
+

Role : {user.role}

+

Membre depuis : {formatDate(user.created_at)}

+
+
+

Mail : {user.email}

+

+ Téléphone :{" "} + {user.phone ?? "Pas de numéro enregistré"} +

+
+
+ +

Tâches :

+ {user.tasks?.length > 0 ? ( + user.tasks.map((task, index) => ( + + )) + ) : ( +

Aucune tâche pour le moment.

+ )} +
-
-} \ No newline at end of file + ); +} diff --git a/src/pages/Volunteers/VolunteersPage.jsx b/src/pages/Volunteers/VolunteersPage.jsx index a98a647..169275a 100644 --- a/src/pages/Volunteers/VolunteersPage.jsx +++ b/src/pages/Volunteers/VolunteersPage.jsx @@ -6,7 +6,6 @@ import ToolBar from "../../components/ToolBar/ToolBar.jsx"; import filter from "../../utils/filter.js"; import getUserById from "../../utils/users/getUserById.js"; - function VolunteerPage() { const [filters, setFilters] = useState({ alphabetical: "asc", @@ -17,21 +16,38 @@ function VolunteerPage() { useEffect(() => { (async () => { const result = await getAllUser(); - const usersData = await Promise.all(result.data.map(id => getUserById(id))); - setUsers(usersData); - })() - }, []) - return ( -
- -
- {filter(users, filters, "user").map((user, index) => ( - - ))} + if (result.status !== 200 || !Array.isArray(result.data)) { + console.error("Erreur lors du chargement des utilisateurs", result); + return; + } + + const usersData = await Promise.all( + result.data.map(async (id) => { + const res = await getUserById(id); + + if (res.status === 200) { + return res.data; + } + console.warn(`Utilisateur ${id} non récupéré`, res.status); + return null; + }) + ); + + setUsers(usersData.filter(Boolean)); + })(); + }, []); + + return ( +
+ +
+ {filter(users, filters, "user").map((user, index) => ( + + ))} +
-
- ); + ); } export default VolunteerPage; diff --git a/src/utils/users/getUserById.js b/src/utils/users/getUserById.js index 5abbbc3..e9a2c75 100644 --- a/src/utils/users/getUserById.js +++ b/src/utils/users/getUserById.js @@ -1,23 +1,5 @@ +import fetchWrapper from "../fetchWrapper.js"; + export default async function getUserById(id) { - try { - const res = await fetch(`${import.meta.env.VITE_API_URL}/api/users/${id}`, { - method: 'GET', - credentials: 'include', - headers: { - 'Accept': 'application/json' - } - }); - - if (!res.ok) { - if (res.status === 404) { - return { error: 'not_found' }; - } - throw new Error(`Erreur serveur : ${res.status}`); - } - - return await res.json(); - } catch (err) { - console.error('Erreur :', err); - return { error: 'server_error' }; - } + return fetchWrapper(`/api/users/${id}`); }