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/components/createEventBtn/CreateEventBtn.jsx b/src/components/createEventBtn/CreateEventBtn.jsx
index fb60a1e..18877cd 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("");
@@ -16,9 +18,8 @@ export default function CreateEventBtn() {
const handleCreateEvent = async () => {
- if(name !== "" || description !== "" || start !== "" || end !== "") {
- await createEvent(name, description, start, end);
- console.log(start);
+ if (name !== "" && description !== "" && start !== "" && end !== "") {
+ await addEvent(name, description, start, end);
}
setIsOpen(false);
}
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..bfcbcba
--- /dev/null
+++ b/src/contexts/events/EventProvider.jsx
@@ -0,0 +1,33 @@
+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 }) {
+
+ const [events, setEvents] = useState([]);
+
+ const updateEvent = async () => {
+ const data = await getAllEvents();
+ setEvents(data.data);
+ }
+
+ const addEvent = async (name, description, start, end) => {
+ await createEvent(name, description, start, end);
+ await updateEvent();
+ }
+
+ const removeEvent = async (eventId) => {
+ const result = await deleteEvent(eventId);
+ await updateEvent();
+ return result;
+ }
+
+ return (
+
+ {children}
+
+ );
+}
\ No newline at end of file
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 */}
-
+
+
+
,
)
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;
diff --git a/src/pages/Events/EventsPage.jsx b/src/pages/Events/EventsPage.jsx
index 670f9b5..f63cb6d 100644
--- a/src/pages/Events/EventsPage.jsx
+++ b/src/pages/Events/EventsPage.jsx
@@ -1,33 +1,23 @@
-import { useEffect, useState } 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";
-import getAllEvents from "../../utils/events/getAllEvents.js";
import filter from "../../utils/filter.js";
+import { EventContext } from "../../contexts/events/EventContext.js";
function EventsPage(){
+
+ const { events } = useContext(EventContext);
+
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) => (
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",
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(
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);