diff --git a/src/contexts/eventDetail/eventDetail.js b/src/contexts/eventDetail/eventDetail.js
new file mode 100644
index 0000000..e59c12b
--- /dev/null
+++ b/src/contexts/eventDetail/eventDetail.js
@@ -0,0 +1,3 @@
+import { createContext } from "react";
+
+export const EventDetailContext = createContext(null);
\ No newline at end of file
diff --git a/src/contexts/eventDetail/eventDetailProvider.jsx b/src/contexts/eventDetail/eventDetailProvider.jsx
new file mode 100644
index 0000000..92117d3
--- /dev/null
+++ b/src/contexts/eventDetail/eventDetailProvider.jsx
@@ -0,0 +1,21 @@
+import {useState} from 'react';
+import { EventDetailContext } from "./eventDetail.js"
+import getEventById from "../../utils/events/getEventById.js";
+
+export function EventDetailProvider({ children }) {
+
+ const [tasks, setTasks] = useState([]);
+ const [eventInfo, setEventInfo] = useState([]);
+
+ const updateEventInfo = async (id) => {
+ const e = await getEventById(id);
+ setEventInfo(e);
+ setTasks(e.tasks)
+ }
+
+ return (
+
+ {children}
+
+ );
+}
\ No newline at end of file
diff --git a/src/main.jsx b/src/main.jsx
index 2653f1c..bd63d05 100644
--- a/src/main.jsx
+++ b/src/main.jsx
@@ -1,18 +1,21 @@
-import { StrictMode } from 'react'
-import { createRoot } from 'react-dom/client'
+import {StrictMode} from 'react'
+import {createRoot} from 'react-dom/client'
import './index.css'
-import { RouterProvider } from "react-router";
+import {RouterProvider} from "react-router";
import router from './router';
-import { AuthProvider } from "./contexts/auth/authProvider.jsx";
+import {AuthProvider} from "./contexts/auth/authProvider.jsx";
import {EventProvider} from "./contexts/events/EventProvider.jsx";
+import {EventDetailProvider} from "./contexts/eventDetail/eventDetailProvider.jsx";
createRoot(document.getElementById('root')).render(
-
+
-
+
+
+
- ,
+ ,
)
diff --git a/src/pages/eventDetail/components/createTaskBtn/createTaskBtn.jsx b/src/pages/eventDetail/components/createTaskBtn/createTaskBtn.jsx
new file mode 100644
index 0000000..fb6fac5
--- /dev/null
+++ b/src/pages/eventDetail/components/createTaskBtn/createTaskBtn.jsx
@@ -0,0 +1,116 @@
+import styles from "../../eventDetail.module.css";
+import Button from "../../../../components/ui/button/button.jsx";
+import {useContext, useState} from "react";
+import TextInput from "../../../../components/ui/input/input.jsx";
+import Modal from "../../../../components/ui/modal/modal.jsx";
+import createTaskApi from "../../../../utils/tasks/createTask.js";
+import {EventDetailContext} from "../../../../contexts/eventDetail/eventDetail.js";
+
+export default function CreateTaskBtn({ id }) {
+
+ const [openTaskModal, setOpenTaskModal] = useState(false);
+
+ const [taskName, setTaskName] = useState("");
+ const [taskDescription, setTaskDescription] = useState("");
+ const [taskLocation, setTaskLocation] = useState("");
+ const [maxParticipants, setMaxParticipants] = useState("");
+ const [startTime, setStartTime] = useState("");
+ const [endTime, setEndTime] = useState("");
+
+ const { updateEventInfo } = useContext(EventDetailContext)
+
+ const createTask = async () => {
+ const success = await createTaskApi({
+ eventId: id,
+ name: taskName,
+ description: taskDescription,
+ start: startTime,
+ end: endTime,
+ location: taskLocation,
+ maxParticipants,
+ });
+
+ if (success) {
+ setOpenTaskModal(false);
+ setTaskName("");
+ setTaskDescription("");
+ setTaskLocation("");
+ setMaxParticipants("");
+ setStartTime("");
+ setEndTime("");
+
+ updateEventInfo(id)
+ } else {
+ console.log("⚠️ Échec de la création de la task");
+ }
+ };
+
+ return <>
+
+
+
+ setOpenTaskModal(false)} title={"Créer tâche"}>
+
+
+
+
Nom de la tâche
+
setTaskName(e.target.value)}
+ placeholder="Nom de la tâche"
+ />
+
+
+
+
Description
+
setTaskDescription(e.target.value)}
+ placeholder="Description de la tâche"
+ />
+
+
+
+
Lieu
+
setTaskLocation(e.target.value)}
+ placeholder="Lieu"
+ />
+
+
+
+
Nombre maximum de participants
+
setMaxParticipants(e.target.value)}
+ placeholder="Participants max"
+ />
+
+
+
+
Heure de début
+
setStartTime(e.target.value)}
+ />
+
+
+
+
Heure de fin
+
setEndTime(e.target.value)}
+ />
+
+
+
+
+
+
+
+ >
+}
\ No newline at end of file
diff --git a/src/pages/eventDetail/components/deleteEventBtn/deleteEventBtn.jsx b/src/pages/eventDetail/components/deleteEventBtn/deleteEventBtn.jsx
new file mode 100644
index 0000000..813a995
--- /dev/null
+++ b/src/pages/eventDetail/components/deleteEventBtn/deleteEventBtn.jsx
@@ -0,0 +1,42 @@
+import styles from "../../eventDetail.module.css";
+import Button from "../../../../components/ui/button/button.jsx";
+import Modal from "../../../../components/ui/modal/modal.jsx";
+import { useContext, useState } from "react";
+import { EventDetailContext } from "../../../../contexts/eventDetail/eventDetail.js";
+import { EventContext } from "../../../../contexts/events/EventContext.js";
+import { useNavigate } from "react-router";
+
+export default function DeleteEventBtn({ id }) {
+
+ const { eventInfo } = useContext(EventDetailContext)
+ const { removeEvent } = useContext(EventContext)
+ const [open, setOpen] = useState(false);
+ const navigate = useNavigate();
+
+ const handleDelete = () => {
+ setOpen(true);
+ }
+
+ const delEvent = async () => {
+ const result = await removeEvent(id);
+
+ if (result.status === 200 || result.status === 204) {
+ setOpen(false);
+ navigate("/events");
+ }
+ }
+
+ return <>
+
+
+
+ setOpen(false)} title={"Suppression"}>
+
+
Etes-vous sur de vouloir supprimer l'événement {eventInfo?.name} ?
+
+
+
+
+
+ >
+}
\ No newline at end of file
diff --git a/src/pages/eventDetail/eventDetail.jsx b/src/pages/eventDetail/eventDetail.jsx
index 18dd310..69e1b59 100644
--- a/src/pages/eventDetail/eventDetail.jsx
+++ b/src/pages/eventDetail/eventDetail.jsx
@@ -1,82 +1,25 @@
-import { useState, useEffect, useContext } from "react";
+import {useEffect, useContext} from "react";
import styles from "./eventDetail.module.css";
-import { useParams } from "react-router";
-import getEventById from "../../utils/events/getEventById.js";
-import { formatDateLetter } from "../../utils/date/formatDateLetter.js";
+import {useParams} from "react-router";
+import {formatDateLetter} from "../../utils/date/formatDateLetter.js";
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 { 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";
+import {AuthContext} from "../../contexts/auth/AuthContext.js";
+import {EventDetailContext} from "../../contexts/eventDetail/eventDetail.js";
+import CreateTaskBtn from "./components/createTaskBtn/createTaskBtn.jsx";
+import DeleteEventBtn from "./components/deleteEventBtn/deleteEventBtn.jsx";
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);
- const [event, setEvent] = useState(null);
-
- const [openTaskModal, setOpenTaskModal] = useState(false);
- const [taskName, setTaskName] = useState("");
- const [taskDescription, setTaskDescription] = useState("");
- const [taskLocation, setTaskLocation] = useState("");
- const [maxParticipants, setMaxParticipants] = useState("");
- const [startTime, setStartTime] = useState("");
- const [endTime, setEndTime] = useState("");
-
+ const {user} = useContext(AuthContext)
+ const {tasks, updateEventInfo, eventInfo} = useContext(EventDetailContext)
useEffect(() => {
- (async () => {
- const e = await getEventById(id);
- setEvent(e);
- }) ()
+ updateEventInfo(id);
}, [])
- const handleDelete = () => {
- setOpen(true);
- }
-
- const delEvent = async () => {
- const result = await removeEvent(id);
-
- if (result.status === 200 || result.status === 204) {
- setOpen(false);
- navigate("/events");
- }
- }
-
- const createTask = async () => {
- const success = await createTaskApi({
- eventId: id,
- name: taskName,
- description: taskDescription,
- start: startTime,
- end: endTime,
- location: taskLocation,
- maxParticipants,
- });
-
- if (success) {
- setOpenTaskModal(false);
- setTaskName("");
- setTaskDescription("");
- setTaskLocation("");
- setMaxParticipants("");
- setStartTime("");
- setEndTime("");
- } else {
- console.log("⚠️ Échec de la création de la task");
- }
- };
-
return (
@@ -84,15 +27,15 @@ function EventDetail() {
-
{event?.name}
+
{eventInfo?.name}
-
{event && formatDateLetter(event.start)}
-
{event?.description}
+
{eventInfo && formatDateLetter(eventInfo.start)}
+
{eventInfo?.description}
{user?.isAdmin &&
-
-
+
+
}
@@ -100,83 +43,11 @@ function EventDetail() {
Tâches
- {event?.tasks?.map((task, index) => (
-
+ {tasks?.map((task, index) => (
+
))}
-
-
setOpen(false)} title={"Suppression"}>
-
-
Etes-vous sur de vouloir supprimer l'événement {event?.name} ?
-
-
-
-
-
-
setOpenTaskModal(false)} title={"Créer tâche"}>
-
-
-
-
Nom de la tâche
-
setTaskName(e.target.value)}
- placeholder="Nom de la tâche"
- />
-
-
-
-
Description
-
setTaskDescription(e.target.value)}
- placeholder="Description de la tâche"
- />
-
-
-
-
Lieu
-
setTaskLocation(e.target.value)}
- placeholder="Lieu"
- />
-
-
-
-
Nombre maximum de participants
-
setMaxParticipants(e.target.value)}
- placeholder="Participants max"
- />
-
-
-
-
Heure de début
-
setStartTime(e.target.value)}
- />
-
-
-
-
Heure de fin
-
setEndTime(e.target.value)}
- />
-
-
-
-
-
-
-
);
}