From fe1948e632c24678093969920bb233b6123a0fd6 Mon Sep 17 00:00:00 2001 From: Giovanni-Josserand Date: Sun, 22 Feb 2026 16:20:25 +0100 Subject: [PATCH 1/4] create pendingMembers context --- .../pendingMembers/PendingMembersContext.js | 3 ++ .../pendingMembers/PendingMembersProvider.jsx | 37 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/contexts/pendingMembers/PendingMembersContext.js create mode 100644 src/contexts/pendingMembers/PendingMembersProvider.jsx diff --git a/src/contexts/pendingMembers/PendingMembersContext.js b/src/contexts/pendingMembers/PendingMembersContext.js new file mode 100644 index 0000000..1941409 --- /dev/null +++ b/src/contexts/pendingMembers/PendingMembersContext.js @@ -0,0 +1,3 @@ +import { createContext } from "react"; + +export const PendingMembersContext = createContext(null); \ No newline at end of file diff --git a/src/contexts/pendingMembers/PendingMembersProvider.jsx b/src/contexts/pendingMembers/PendingMembersProvider.jsx new file mode 100644 index 0000000..48ff64d --- /dev/null +++ b/src/contexts/pendingMembers/PendingMembersProvider.jsx @@ -0,0 +1,37 @@ +import { useState } from "react"; +import { PendingMembersContext } from "./PendingMembersContext"; + +import getUserToValidate from "../../utils/users/getUserToValidate"; +import getUserById from "../../utils/users/getUserById"; + +export function PendingMembersProvider({ children }) { + + const [pendingMembers, setPendingMembers] = useState([]); + + const updatePendingMembers = async () => { + const result = await getUserToValidate(); + const userIds = result.data; + + if (!userIds || userIds.length === 0) { + setPendingMembers([]); + return; + } + + const users = await Promise.all( + userIds.map(id => getUserById(id)) + ); + + setPendingMembers(users.map(u => u.data)); + }; + + return ( + + {children} + + ); +} \ No newline at end of file From c95f8cfae7c49cc2ec1b59041b7b488bccb3cab8 Mon Sep 17 00:00:00 2001 From: Giovanni-Josserand Date: Sun, 22 Feb 2026 16:20:31 +0100 Subject: [PATCH 2/4] use pendingMembers context --- src/components/Header/Header.jsx | 6 ++-- .../pendingMembers/PendingMembers.jsx | 30 +++++-------------- .../echo/listeners/userCreatedListener.js | 6 +++- 3 files changed, 16 insertions(+), 26 deletions(-) diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index 829c26e..314943b 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -10,6 +10,7 @@ import { userNotificationsListener } from "../../utils/echo/listeners/userNotifi import NotificationCard from "../NotificationCard/NotificationCard.jsx"; import { EventContext } from "../../contexts/events/EventContext.js"; import {AuthContext} from "../../contexts/auth/AuthContext.js"; +import { PendingMembersContext } from "../../contexts/pendingMembers/PendingMembersContext"; function Header() { @@ -20,6 +21,7 @@ function Header() { const [mobileMenu, setMobileMenu] = useState(false); const [notifications, setNotifications] = useState([]); const notificationRef = useRef(null); + const { updatePendingMembers } = useContext(PendingMembersContext); useEffect(() => { @@ -41,7 +43,7 @@ function Header() { echoInstance = echo; const activeChannels = [ - userCreatedListener(echo, user, setNotifications, setunreadNotification), + userCreatedListener(echo, user, setNotifications, setunreadNotification, updatePendingMembers), userNotificationsListener(echo, user, setNotifications, setunreadNotification), ]; channelsToLeave = activeChannels.filter(name => name !== null); @@ -86,7 +88,7 @@ function Header() { } } } catch (err) { - console.error('Erreur suppression notification :', err); + console.error('Erreur pour ouvrir/fermer le menu de notifications :', err); } } diff --git a/src/pages/Admin/components/pendingMembers/PendingMembers.jsx b/src/pages/Admin/components/pendingMembers/PendingMembers.jsx index 19b1a1a..f8280f6 100644 --- a/src/pages/Admin/components/pendingMembers/PendingMembers.jsx +++ b/src/pages/Admin/components/pendingMembers/PendingMembers.jsx @@ -1,11 +1,10 @@ -import React, {useState, useEffect} from "react"; +import React, {useState, useEffect, useContext} from "react"; import Button from "../../../../components/ui/button/button.tsx"; import styles from "./PendingMembers.module.css"; import Modal from "../../../../components/ui/modal/modal.tsx"; -import getUserToValidate from "../../../../utils/users/getUserToValidate.js"; -import getUserById from "../../../../utils/users/getUserById.js"; import validateUser from "../../../../utils/users/validateUser.js"; import deleteOtherUser from "../../../../utils/users/deleteOtherUser.js"; +import { PendingMembersContext } from "../../../../contexts/pendingMembers/PendingMembersContext"; function PendingMembers() { @@ -13,23 +12,10 @@ function PendingMembers() { const [open, setOpen] = useState(false); const [message, setMessage] = useState(""); const [title, setTitle] = useState(""); - - const [pendingMembers, setPendingMembers] = useState([]); - - const fetchUsers = async () => { - - const result = await getUserToValidate(); - const userIds = result.data; - - if (userIds && userIds.length > 0) { - const users = await Promise.all(userIds.map(id => getUserById(id))); - const usersData = users.map(u => u.data); - setPendingMembers(usersData); - } else setPendingMembers([]); - } + const { pendingMembers, updatePendingMembers } = useContext(PendingMembersContext); useEffect(() => { - fetchUsers(); + updatePendingMembers(); }, []); const handleValidate = async (id, name) => { @@ -38,14 +24,12 @@ function PendingMembers() { if(result.status === 200) { setTitle("Utilisateur accepté avec succès") setMessage(`L'utilisateur ${name} a été accepté avec succès`) - setOpen(true); } else { setTitle("Erreur") setMessage(`Une erreur est survenue durant l'acceptation de l'utilisateur ${name}`) - setOpen(true); } - - fetchUsers(); + setOpen(true); + updatePendingMembers(); } const handleRefuse = async (id, name) => { @@ -61,7 +45,7 @@ function PendingMembers() { setOpen(true); } - fetchUsers(); + updatePendingMembers(); } return ( diff --git a/src/utils/echo/listeners/userCreatedListener.js b/src/utils/echo/listeners/userCreatedListener.js index e2bb017..ef550b7 100644 --- a/src/utils/echo/listeners/userCreatedListener.js +++ b/src/utils/echo/listeners/userCreatedListener.js @@ -1,4 +1,4 @@ -export const userCreatedListener = (echo, userData, setNotifications, setunreadNotification) => { +export const userCreatedListener = (echo, userData, setNotifications, setunreadNotification, updatePendingMembers) => { if (userData.isAdmin) { const channelName = "users.registration"; echo.private(channelName) @@ -11,6 +11,10 @@ export const userCreatedListener = (echo, userData, setNotifications, setunreadN }; setNotifications(prev => [newNotification, ...prev]); setunreadNotification(true); + + if (typeof updatePendingMembers === "function") { + updatePendingMembers(); + } }); return channelName; } From 17ca3a9e954ce3317c2e1e34c743afd683870597 Mon Sep 17 00:00:00 2001 From: Giovanni-Josserand Date: Sun, 22 Feb 2026 16:23:16 +0100 Subject: [PATCH 3/4] use pendingMembers context --- src/main.jsx | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main.jsx b/src/main.jsx index bd63d05..b742534 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -6,16 +6,19 @@ import router from './router'; import {AuthProvider} from "./contexts/auth/authProvider.jsx"; import {EventProvider} from "./contexts/events/EventProvider.jsx"; import {EventDetailProvider} from "./contexts/eventDetail/eventDetailProvider.jsx"; +import {PendingMembersProvider} from "./contexts/pendingMembers/PendingMembersProvider.jsx"; createRoot(document.getElementById('root')).render( - - - - - + + + + + + + , ) From 258170d4d823f40abbc2312e8d4b9a99f81233e1 Mon Sep 17 00:00:00 2001 From: Giovanni-Josserand Date: Sun, 22 Feb 2026 16:31:24 +0100 Subject: [PATCH 4/4] use pendingMembers context --- src/utils/echo/listeners/userCreatedListener.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/utils/echo/listeners/userCreatedListener.js b/src/utils/echo/listeners/userCreatedListener.js index ef550b7..a4a36c4 100644 --- a/src/utils/echo/listeners/userCreatedListener.js +++ b/src/utils/echo/listeners/userCreatedListener.js @@ -11,10 +11,7 @@ export const userCreatedListener = (echo, userData, setNotifications, setunreadN }; setNotifications(prev => [newNotification, ...prev]); setunreadNotification(true); - - if (typeof updatePendingMembers === "function") { - updatePendingMembers(); - } + updatePendingMembers(); }); return channelName; }