From 906ab0b1b0c5e81c76f0881f0f53801c4ae3ddf6 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Mon, 19 Jan 2026 10:05:35 +0100 Subject: [PATCH 01/10] Create Event Context --- src/contexts/events/EventContext.js | 3 +++ src/contexts/events/EventProvider.jsx | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 src/contexts/events/EventContext.js create mode 100644 src/contexts/events/EventProvider.jsx diff --git a/src/contexts/events/EventContext.js b/src/contexts/events/EventContext.js new file mode 100644 index 0000000..24d62c2 --- /dev/null +++ b/src/contexts/events/EventContext.js @@ -0,0 +1,3 @@ +import { createContext } from "react"; + +export const EventContext = createContext(null); \ No newline at end of file diff --git a/src/contexts/events/EventProvider.jsx b/src/contexts/events/EventProvider.jsx new file mode 100644 index 0000000..6d97a9e --- /dev/null +++ b/src/contexts/events/EventProvider.jsx @@ -0,0 +1,26 @@ +import { useState } from 'react'; +import { EventContext } from "./EventContext"; +import getAllEvents from "../../utils/events/getAllEvents.js"; +import createEvent from "../../utils/events/createEvent.js"; + +export function EventProvider({ children }) { + + const [events, setEvents] = useState([]); + + const updateEvent = async () => { + const data = await getAllEvents(); + console.log(data.data); + setEvents(data.data); + } + + const addEvent = async (name, description, start, end) => { + await createEvent(name, description, start, end); + await updateEvent(); + } + + return ( + + {children} + + ); +} \ No newline at end of file From e0cf6aacd4d09514fab039f1ad93309311b31d8e Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Mon, 19 Jan 2026 10:05:37 +0100 Subject: [PATCH 02/10] Create Event Context --- src/main.jsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main.jsx b/src/main.jsx index 79f18b6..2653f1c 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -4,14 +4,15 @@ import './index.css' import { RouterProvider } from "react-router"; import router from './router'; import { AuthProvider } from "./contexts/auth/authProvider.jsx"; +import {EventProvider} from "./contexts/events/EventProvider.jsx"; createRoot(document.getElementById('root')).render( - {/* TODO: refaire l'arborescence du frontend */} - {/* TODO: refaire le docker du backend */} - + + + , ) From a4acd23b77a670c4c38d5fe1fc3cc202c454db20 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Mon, 19 Jan 2026 10:06:47 +0100 Subject: [PATCH 03/10] Remove console.log --- src/contexts/events/EventProvider.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/contexts/events/EventProvider.jsx b/src/contexts/events/EventProvider.jsx index 6d97a9e..b535ae7 100644 --- a/src/contexts/events/EventProvider.jsx +++ b/src/contexts/events/EventProvider.jsx @@ -9,7 +9,6 @@ export function EventProvider({ children }) { const updateEvent = async () => { const data = await getAllEvents(); - console.log(data.data); setEvents(data.data); } From ca8253a921032fcb578dc1440c4095a5c73fa222 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Mon, 19 Jan 2026 10:06:54 +0100 Subject: [PATCH 04/10] Use event Context --- .../createEventBtn/CreateEventBtn.jsx | 9 +++--- src/pages/Events/EventsPage.jsx | 30 ++++++++----------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/components/createEventBtn/CreateEventBtn.jsx b/src/components/createEventBtn/CreateEventBtn.jsx index fb60a1e..b821d1e 100644 --- a/src/components/createEventBtn/CreateEventBtn.jsx +++ b/src/components/createEventBtn/CreateEventBtn.jsx @@ -1,13 +1,15 @@ import styles from "./createEventBtn.module.css" -import { useState } from "react"; +import { useState, useContext } from "react"; import Modal from "../ui/modal/modal.jsx"; import Button from "../ui/button/button.jsx"; import TextInput from "../ui/input/input.jsx"; -import createEvent from "../../utils/events/createEvent.js" +import { EventContext } from "../../contexts/events/EventContext.js"; export default function CreateEventBtn() { + const { addEvent } = useContext(EventContext); + const [isOpen, setIsOpen] = useState(false); const [name, setName] = useState(""); const [description, setDescription] = useState(""); @@ -17,8 +19,7 @@ export default function CreateEventBtn() { const handleCreateEvent = async () => { if(name !== "" || description !== "" || start !== "" || end !== "") { - await createEvent(name, description, start, end); - console.log(start); + await addEvent(name, description, start, end); } setIsOpen(false); } diff --git a/src/pages/Events/EventsPage.jsx b/src/pages/Events/EventsPage.jsx index 670f9b5..790822e 100644 --- a/src/pages/Events/EventsPage.jsx +++ b/src/pages/Events/EventsPage.jsx @@ -1,33 +1,29 @@ -import { useEffect, useState } from "react"; +import { useEffect, useState, useContext } from "react"; import Event from "./components/Event/Event.jsx"; import styles from "./EventsPage.module.css"; import ToolBar from "../../components/ToolBar/ToolBar.jsx"; -import getAllEvents from "../../utils/events/getAllEvents.js"; import filter from "../../utils/filter.js"; +import { EventContext } from "../../contexts/events/EventContext.js"; function EventsPage(){ + + const { updateEvent, events } = useContext(EventContext); + + useEffect(() => { + (async () => { + updateEvent(); + }) () + }, []); + const [filters, setFilters] = useState({ alphabetical: "asc", yearOrder: "desc", }); - - - const [events, setEvents] = useState([]); - - - - useEffect(() => { - (async () => { - const data = await getAllEvents(); - setEvents(data.data); - }) () - }, []); - - + return (
- +
{filter(events, filters, "event").map((event, index) => ( From ce3b3fbaedc013e789357ed5415217fc4ab5c6b0 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Mon, 19 Jan 2026 16:39:02 +0100 Subject: [PATCH 05/10] Use event Context in EventList --- src/pages/Home/components/EventList/eventList.jsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pages/Home/components/EventList/eventList.jsx b/src/pages/Home/components/EventList/eventList.jsx index c03ccdd..975adf9 100644 --- a/src/pages/Home/components/EventList/eventList.jsx +++ b/src/pages/Home/components/EventList/eventList.jsx @@ -1,9 +1,13 @@ import { useMemo } from "react"; import styles from "./eventList.module.css"; import EventItem from "./eventItem.jsx"; +import { EventContext } from "../../../../contexts/events/EventContext.js"; +import { useContext } from "react"; -function EventList({ events }) { +function EventList() { + + const { events } = useContext(EventContext); const sortedEvents = useMemo(() => { return [...events].sort( From 31729986e1da4d3215bdd54465f64da0709d08da Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Mon, 19 Jan 2026 16:39:11 +0100 Subject: [PATCH 06/10] Update event in header --- src/components/Header/Header.jsx | 11 +++++++---- src/pages/Events/EventsPage.jsx | 10 ++-------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index 706775e..829c26e 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -1,10 +1,6 @@ import { Link, NavLink } from "react-router"; import {useContext, useEffect, useRef, useState} from "react"; - -import {AuthContext} from "../../contexts/auth/AuthContext.js"; - import styles from "./Header.module.css" - import getUserNotifications from "../../utils/notifications/getUserNotifications.js"; import deleteNotificationUser from "../../utils/notifications/deleteNotificationUser.js"; import initEcho from "../../utils/echo/initEcho.js" @@ -12,9 +8,13 @@ import readNotifications from "../../utils/notifications/readNotifications.js"; import { userCreatedListener } from "../../utils/echo/listeners/userCreatedListener"; import { userNotificationsListener } from "../../utils/echo/listeners/userNotificationsListener.js"; import NotificationCard from "../NotificationCard/NotificationCard.jsx"; +import { EventContext } from "../../contexts/events/EventContext.js"; +import {AuthContext} from "../../contexts/auth/AuthContext.js"; function Header() { + const { update, user } = useContext(AuthContext); + const { updateEvent } = useContext(EventContext); const [notificationMenu, setnotificationMenu] = useState(false); const [unreadNotification, setunreadNotification] = useState(false); const [mobileMenu, setMobileMenu] = useState(false); @@ -22,6 +22,9 @@ function Header() { const notificationRef = useRef(null); useEffect(() => { + + updateEvent(); + let echoInstance = null; let channelsToLeave = []; diff --git a/src/pages/Events/EventsPage.jsx b/src/pages/Events/EventsPage.jsx index 790822e..f63cb6d 100644 --- a/src/pages/Events/EventsPage.jsx +++ b/src/pages/Events/EventsPage.jsx @@ -1,4 +1,4 @@ -import { useEffect, useState, useContext } from "react"; +import { useState, useContext } from "react"; import Event from "./components/Event/Event.jsx"; import styles from "./EventsPage.module.css"; import ToolBar from "../../components/ToolBar/ToolBar.jsx"; @@ -8,13 +8,7 @@ import { EventContext } from "../../contexts/events/EventContext.js"; function EventsPage(){ - const { updateEvent, events } = useContext(EventContext); - - useEffect(() => { - (async () => { - updateEvent(); - }) () - }, []); + const { events } = useContext(EventContext); const [filters, setFilters] = useState({ alphabetical: "asc", From 7b84efde42b5e6e5d300e4decbd7a37e216e66b6 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Mon, 19 Jan 2026 16:42:20 +0100 Subject: [PATCH 07/10] use event context in calendar component --- src/pages/Home/HomePage.jsx | 15 ++------------- src/pages/Home/components/Calendar/calendar.jsx | 7 +++++-- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/pages/Home/HomePage.jsx b/src/pages/Home/HomePage.jsx index 2afe88c..645bd39 100644 --- a/src/pages/Home/HomePage.jsx +++ b/src/pages/Home/HomePage.jsx @@ -1,24 +1,13 @@ import styles from "./HomePage.module.css"; import Calendar from "./components/Calendar/calendar.jsx"; import EventList from "./components/EventList/eventList.jsx"; -import { useState, useEffect } from "react"; -import getAllEvents from "../../utils/events/getAllEvents.js"; function HomePage() { - const [events, setEvents] = useState([]); - - useEffect(() => { - (async () => { - const data = await getAllEvents(); - setEvents(data.data); - }) () - }, []) - return (
- - + +
); } diff --git a/src/pages/Home/components/Calendar/calendar.jsx b/src/pages/Home/components/Calendar/calendar.jsx index 2f6411e..556c099 100644 --- a/src/pages/Home/components/Calendar/calendar.jsx +++ b/src/pages/Home/components/Calendar/calendar.jsx @@ -1,8 +1,11 @@ -import { useState, useMemo, useEffect } from "react"; +import {useState, useMemo, useEffect, useContext} from "react"; import styles from "./calendar.module.css"; import { formatDateLetterJS } from "../../../../utils/date/formatDateLetter.js"; +import {EventContext} from "../../../../contexts/events/EventContext.js"; -function Calendar({ events = [] }) { +function Calendar() { + + const { events } = useContext(EventContext); const monthNames = [ "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", From 496b8535965d22960d41f757a9ae294574155afc Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Mon, 19 Jan 2026 16:58:17 +0100 Subject: [PATCH 08/10] use event context in IncompleteEvent component --- .../IncompleteEvent/IncompleteEvent.jsx | 74 +++++++------------ 1 file changed, 26 insertions(+), 48 deletions(-) diff --git a/src/pages/Admin/components/IncompleteEvent/IncompleteEvent.jsx b/src/pages/Admin/components/IncompleteEvent/IncompleteEvent.jsx index 40f3a69..5548ea6 100644 --- a/src/pages/Admin/components/IncompleteEvent/IncompleteEvent.jsx +++ b/src/pages/Admin/components/IncompleteEvent/IncompleteEvent.jsx @@ -1,59 +1,37 @@ -import React, { useState, useEffect } from "react"; +import React, { useContext } from "react"; import styles from "./IncompleteEvent.module.css"; -import getAllEvents from "../../../../utils/events/getAllEvents.js"; +import { EventContext } from "../../../../contexts/events/EventContext.js"; function IncompleteEvent() { - const [events, setEvents] = useState([]); - const [loading, setLoading] = useState(true); - useEffect(() => { - const fetchEvents = async () => { - const data = await getAllEvents(); - setEvents(data?.data || data || []); - setLoading(false); - }; - fetchEvents(); - }, []); + const { events } = useContext(EventContext); - if (loading) { return ( -
-

Derniers événements

-
-
-

Chargement des événements...

-
+
+

Derniers événements

+
+ {events.map((event) => ( +
+

{event.name}

+

+ {new Date(event.start).toLocaleDateString("fr-FR")} - {new Date(event.end).toLocaleDateString("fr-FR")} +

+

{event.description}

+

Tâches associées :

+
    + {event.tasks?.length ? ( + event.tasks.map((task, taskIndex) => ( +
  • {task.name}
  • + )) + ) : ( +
  • Aucune tâche associée.
  • + )} +
+
+ ))} +
-
); - } - - return ( -
-

Derniers événements

-
- {events.map((event) => ( -
-

{event.name}

-

- {new Date(event.start).toLocaleDateString("fr-FR")} - {new Date(event.end).toLocaleDateString("fr-FR")} -

-

{event.description}

-

Tâches associées :

-
    - {event.tasks?.length ? ( - event.tasks.map((task, taskIndex) => ( -
  • {task.name}
  • - )) - ) : ( -
  • Aucune tâche associée.
  • - )} -
-
- ))} -
-
- ); } export default IncompleteEvent; From dd1ce7f830571ea6e62b2901d0287fbb2a57fac6 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Mon, 19 Jan 2026 17:05:57 +0100 Subject: [PATCH 09/10] use event context to delete event --- src/contexts/events/EventProvider.jsx | 14 +++++++++++--- src/pages/eventDetail/eventDetail.jsx | 5 +++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/contexts/events/EventProvider.jsx b/src/contexts/events/EventProvider.jsx index b535ae7..bfcbcba 100644 --- a/src/contexts/events/EventProvider.jsx +++ b/src/contexts/events/EventProvider.jsx @@ -1,7 +1,9 @@ -import { useState } from 'react'; -import { EventContext } from "./EventContext"; +import {useState} from 'react'; +import {EventContext} from "./EventContext"; import getAllEvents from "../../utils/events/getAllEvents.js"; import createEvent from "../../utils/events/createEvent.js"; +import deleteEvent from "../../utils/events/deleteEvent.js"; + export function EventProvider({ children }) { @@ -17,8 +19,14 @@ export function EventProvider({ children }) { await updateEvent(); } + const removeEvent = async (eventId) => { + const result = await deleteEvent(eventId); + await updateEvent(); + return result; + } + return ( - + {children} ); diff --git a/src/pages/eventDetail/eventDetail.jsx b/src/pages/eventDetail/eventDetail.jsx index 3f0356a..18dd310 100644 --- a/src/pages/eventDetail/eventDetail.jsx +++ b/src/pages/eventDetail/eventDetail.jsx @@ -7,7 +7,7 @@ import EventTask from "./components/EventTask/EventTask.jsx"; import Button from "../../components/ui/button/button.jsx"; import Modal from "../../components/ui/modal/modal.jsx"; import { AuthContext } from "../../contexts/auth/AuthContext.js"; -import deleteEvent from "../../utils/events/deleteEvent.js"; +import { EventContext } from "../../contexts/events/EventContext.js"; import { useNavigate } from "react-router"; import TextInput from "../../components/ui/input/input.jsx"; import createTaskApi from "../../utils/tasks/createTask.js"; @@ -18,6 +18,7 @@ function EventDetail() { const params = useParams(); const id = params.id; const { user } = useContext(AuthContext) + const { removeEvent } = useContext(EventContext) const navigate = useNavigate(); const [open, setOpen] = useState(false); @@ -44,7 +45,7 @@ function EventDetail() { } const delEvent = async () => { - const result = await deleteEvent(id); + const result = await removeEvent(id); if (result.status === 200 || result.status === 204) { setOpen(false); From c479498dbed45d1e3ebe3c3fe84d55028697c8b2 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Tue, 27 Jan 2026 14:09:04 +0100 Subject: [PATCH 10/10] Fix input check --- src/components/createEventBtn/CreateEventBtn.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/createEventBtn/CreateEventBtn.jsx b/src/components/createEventBtn/CreateEventBtn.jsx index b821d1e..18877cd 100644 --- a/src/components/createEventBtn/CreateEventBtn.jsx +++ b/src/components/createEventBtn/CreateEventBtn.jsx @@ -18,7 +18,7 @@ export default function CreateEventBtn() { const handleCreateEvent = async () => { - if(name !== "" || description !== "" || start !== "" || end !== "") { + if (name !== "" && description !== "" && start !== "" && end !== "") { await addEvent(name, description, start, end); } setIsOpen(false);