diff --git a/src/pages/EventDetail/EventDetailPage.jsx b/src/pages/EventDetail/EventDetailPage.jsx
deleted file mode 100644
index ee31c39..0000000
--- a/src/pages/EventDetail/EventDetailPage.jsx
+++ /dev/null
@@ -1,55 +0,0 @@
-import {useEffect, useContext} from "react";
-import styles from "./EventDetailPage.module.css";
-import {useParams} from "react-router";
-import {formatDateLetter} from "../../utils/date/formatDateLetter.js";
-import EventTask from "./components/EventTask/EventTask.jsx";
-import {AuthContext} from "../../contexts/Auth/AuthContext.js";
-import {EventDetailContext} from "../../contexts/EventDetail/EventDetailContext.js";
-import CreateTaskBtn from "./components/CreateTaskBtn/CreateTaskBtn.jsx";
-import DeleteEventBtn from "./components/DeleteEventBtn/DeleteEventBtn.jsx";
-
-
-function EventDetailPage() {
-
- const params = useParams();
- const id = params.id;
- const {user} = useContext(AuthContext)
- const {tasks, updateEventInfo, eventInfo} = useContext(EventDetailContext)
-
- useEffect(() => {
- updateEventInfo(id);
- }, [])
-
-
- return (
-
-
-
-
-
-
{eventInfo?.name}
-
-
-
{eventInfo && formatDateLetter(eventInfo.start)}
-
{eventInfo?.description}
-
- {user?.isAdmin &&
-
-
-
}
-
-
-
-
-
Tâches
-
- {tasks?.map((task, index) => (
-
- ))}
-
-
-
- );
-}
-
-export default EventDetailPage;
\ No newline at end of file
diff --git a/src/pages/EventDetail/EventDetailPage.tsx b/src/pages/EventDetail/EventDetailPage.tsx
new file mode 100644
index 0000000..9c76e8e
--- /dev/null
+++ b/src/pages/EventDetail/EventDetailPage.tsx
@@ -0,0 +1,65 @@
+import { useEffect, useContext } from "react";
+import styles from "./EventDetailPage.module.css";
+import { useParams } from "react-router";
+import { formatDateLetter } from "../../utils/date/formatDateLetter";
+import EventTask from "./components/EventTask/EventTask";
+import { AuthContext } from "../../contexts/Auth/AuthContext";
+import { EventDetailContext } from "../../contexts/EventDetail/EventDetailContext";
+import CreateTaskBtn from "./components/CreateTaskBtn/CreateTaskBtn";
+import DeleteEventBtn from "./components/DeleteEventBtn/DeleteEventBtn";
+
+function EventDetailPage() {
+ const params = useParams();
+ const id = params.id as string;
+
+ const { user } = useContext(AuthContext) as any;
+ const { tasks, updateEventInfo, eventInfo } = useContext(EventDetailContext) as any;
+
+ useEffect(() => {
+ if (id) {
+ updateEventInfo(id);
+ }
+ }, []);
+
+ return (
+
+
+
+
+
+
+
{eventInfo?.name}
+
+
+
+
{eventInfo && formatDateLetter(eventInfo.start)}
+
{eventInfo?.description}
+
+
+ {user?.isAdmin && (
+
+
+
+
+ )}
+
+
+
+
+
Tâches
+
+
+ {tasks?.map((task: any, index: number) => (
+
+ ))}
+
+
+
+ );
+}
+
+export default EventDetailPage;
\ No newline at end of file
diff --git a/src/pages/EventDetail/components/CreateTaskBtn/CreateTaskBtn.jsx b/src/pages/EventDetail/components/CreateTaskBtn/CreateTaskBtn.jsx
deleted file mode 100644
index 4a0f47b..0000000
--- a/src/pages/EventDetail/components/CreateTaskBtn/CreateTaskBtn.jsx
+++ /dev/null
@@ -1,116 +0,0 @@
-import styles from "../../EventDetailPage.module.css";
-import Button from "../../../../components/ui/Button/Button";
-import {useContext, useState} from "react";
-import TextInput from "../../../../components/ui/Input/Input";
-import Modal from "../../../../components/ui/Modal/Modal";
-import createTaskApi from "../../../../utils/tasks/createTask.js";
-import {EventDetailContext} from "../../../../contexts/EventDetail/EventDetailContext.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 data = await createTaskApi({
- eventId: id,
- name: taskName,
- description: taskDescription,
- start: startTime,
- end: endTime,
- location: taskLocation,
- maxParticipants,
- });
-
- if (data?.status === 200) {
- setOpenTaskModal(false);
- setTaskName("");
- setTaskDescription("");
- setTaskLocation("");
- setMaxParticipants("");
- setStartTime("");
- setEndTime("");
-
- updateEventInfo(id)
- } else {
- console.log("⚠️ Échec de la création de la task");
- }
- };
-
- return <>
-
- setOpenTaskModal(true)}>Créer tâche
-
- 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)}
- />
-
-
-
Créer la tâche
-
-
-
-
- >
-}
\ No newline at end of file
diff --git a/src/pages/EventDetail/components/CreateTaskBtn/CreateTaskBtn.tsx b/src/pages/EventDetail/components/CreateTaskBtn/CreateTaskBtn.tsx
new file mode 100644
index 0000000..9b228c3
--- /dev/null
+++ b/src/pages/EventDetail/components/CreateTaskBtn/CreateTaskBtn.tsx
@@ -0,0 +1,129 @@
+import styles from "../../EventDetailPage.module.css";
+import Button from "../../../../components/ui/Button/Button";
+import { useContext, useState } from "react";
+import TextInput from "../../../../components/ui/Input/Input";
+import Modal from "../../../../components/ui/Modal/Modal";
+import createTaskApi from "../../../../utils/tasks/createTask";
+import { EventDetailContext } from "../../../../contexts/EventDetail/EventDetailContext";
+
+type CreateTaskBtnProps = {
+ id: string | number;
+};
+
+export default function CreateTaskBtn({ id }: CreateTaskBtnProps) {
+ 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) as any;
+
+ const createTask = async () => {
+ const data = await createTaskApi({
+ eventId: id,
+ name: taskName,
+ description: taskDescription,
+ start: startTime,
+ end: endTime,
+ location: taskLocation,
+ maxParticipants,
+ });
+
+ if (data?.status === 200) {
+ setOpenTaskModal(false);
+ setTaskName("");
+ setTaskDescription("");
+ setTaskLocation("");
+ setMaxParticipants("");
+ setStartTime("");
+ setEndTime("");
+
+ updateEventInfo(id);
+ } else {
+ console.log("⚠️ Échec de la création de la task");
+ }
+ };
+
+ return (
+ <>
+ setOpenTaskModal(true)}
+ >
+ Créer tâche
+
+
+ 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)}
+ />
+
+
+
+ Créer la tâche
+
+
+
+ >
+ );
+}
\ No newline at end of file
diff --git a/src/pages/EventDetail/components/DeleteEventBtn/DeleteEventBtn.jsx b/src/pages/EventDetail/components/DeleteEventBtn/DeleteEventBtn.jsx
deleted file mode 100644
index 5309450..0000000
--- a/src/pages/EventDetail/components/DeleteEventBtn/DeleteEventBtn.jsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import styles from "../../EventDetailPage.module.css";
-import Button from "../../../../components/ui/Button/Button";
-import Modal from "../../../../components/ui/Modal/Modal";
-import { useContext, useState } from "react";
-import { EventDetailContext } from "../../../../contexts/EventDetail/EventDetailContext.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 <>
-
- Supprimer
-
- setOpen(false)} title={"Suppression"}>
-
-
Etes-vous sur de vouloir supprimer l'événement {eventInfo?.name} ?
-
-
Confirmer
-
-
-
- >
-}
\ No newline at end of file
diff --git a/src/pages/EventDetail/components/DeleteEventBtn/DeleteEventBtn.tsx b/src/pages/EventDetail/components/DeleteEventBtn/DeleteEventBtn.tsx
new file mode 100644
index 0000000..9a79467
--- /dev/null
+++ b/src/pages/EventDetail/components/DeleteEventBtn/DeleteEventBtn.tsx
@@ -0,0 +1,56 @@
+import styles from "../../EventDetailPage.module.css";
+import Button from "../../../../components/ui/Button/Button";
+import Modal from "../../../../components/ui/Modal/Modal";
+import { useContext, useState } from "react";
+import { EventDetailContext } from "../../../../contexts/EventDetail/EventDetailContext";
+import { EventContext } from "../../../../contexts/Events/EventContext";
+import { useNavigate } from "react-router";
+
+type DeleteEventBtnProps = {
+ id: string | number;
+};
+
+export default function DeleteEventBtn({ id }: DeleteEventBtnProps) {
+ const { eventInfo } = useContext(EventDetailContext) as any;
+ const { removeEvent } = useContext(EventContext) as any;
+
+ 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 (
+ <>
+
+ Supprimer
+
+
+ setOpen(false)} title={"Suppression"}>
+
+
+ Etes-vous sur de vouloir supprimer l'événement {eventInfo?.name} ?
+
+
+
+ Confirmer
+
+
+
+ >
+ );
+}
\ No newline at end of file
diff --git a/src/pages/EventDetail/components/DeleteTaskBtn/DeleteTaskBtn.jsx b/src/pages/EventDetail/components/DeleteTaskBtn/DeleteTaskBtn.jsx
deleted file mode 100644
index af6e3d0..0000000
--- a/src/pages/EventDetail/components/DeleteTaskBtn/DeleteTaskBtn.jsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import { useContext } from "react";
-import { AuthContext } from "../../../../contexts/Auth/AuthContext.js";
-import { EventDetailContext } from "../../../../contexts/EventDetail/EventDetailContext.js";
-import Button from "../../../../components/ui/Button/Button";
-import { useState } from "react";
-import Modal from "../../../../components/ui/Modal/Modal";
-import styles from "../../EventDetailPage.module.css";
-
-export default function DeleteTaskBtn({ taskId, eventId, taskName }) {
-
- const { user } = useContext(AuthContext)
- const { deleteTask } = useContext(EventDetailContext)
-
- const [openModal, setOpenModal] = useState(false);
-
- if(!user?.isAdmin) return null;
-
- return <>
- setOpenModal(true)}> Supprimer
-
-
-
-
Etes-vous sur de vouloir supprimer la tâche {taskName} ?
-
{ deleteTask(taskId, eventId); setOpenModal(false) }}> Confirmer
-
-
- >
-}
\ No newline at end of file
diff --git a/src/pages/EventDetail/components/DeleteTaskBtn/DeleteTaskBtn.tsx b/src/pages/EventDetail/components/DeleteTaskBtn/DeleteTaskBtn.tsx
new file mode 100644
index 0000000..6c16221
--- /dev/null
+++ b/src/pages/EventDetail/components/DeleteTaskBtn/DeleteTaskBtn.tsx
@@ -0,0 +1,48 @@
+import { useContext, useState } from "react";
+import { AuthContext } from "../../../../contexts/Auth/AuthContext";
+import { EventDetailContext } from "../../../../contexts/EventDetail/EventDetailContext";
+import Button from "../../../../components/ui/Button/Button";
+import Modal from "../../../../components/ui/Modal/Modal";
+import styles from "../../EventDetailPage.module.css";
+
+type DeleteTaskBtnProps = {
+ taskId: string | number;
+ eventId: string | number;
+ taskName: string;
+};
+
+export default function DeleteTaskBtn({ taskId, eventId, taskName }: DeleteTaskBtnProps) {
+
+ const { user } = useContext(AuthContext) as any;
+ const { deleteTask } = useContext(EventDetailContext) as any;
+
+ const [openModal, setOpenModal] = useState(false);
+
+ if (!user?.isAdmin) return null;
+
+ return (
+ <>
+ setOpenModal(true)}>
+ Supprimer
+
+
+ setOpenModal(false)} title={"Suppression"}>
+
+
+ Etes-vous sur de vouloir supprimer la tâche {taskName} ?
+
+
+
{
+ deleteTask(taskId, eventId);
+ setOpenModal(false);
+ }}
+ >
+ Confirmer
+
+
+
+ >
+ );
+}
\ No newline at end of file
diff --git a/src/pages/EventDetail/components/EventTask/EventTask.jsx b/src/pages/EventDetail/components/EventTask/EventTask.jsx
deleted file mode 100644
index 41e6429..0000000
--- a/src/pages/EventDetail/components/EventTask/EventTask.jsx
+++ /dev/null
@@ -1,98 +0,0 @@
-import styles from "./EventTask.module.css";
-import { formatDateLetter } from "../../../../utils/date/formatDateLetter.js";
-import Button from "../../../../components/ui/Button/Button";
-import assign from "../../../../utils/tasks/assign.js";
-import unAssign from "../../../../utils/tasks/unAssign.js";
-import { useContext, useEffect, useState } from "react";
-import isAssigned from "../../../../utils/tasks/isAssigned.js";
-import Modal from "../../../../components/ui/Modal/Modal";
-import { AuthContext } from "../../../../contexts/Auth/AuthContext.js";
-import DeleteTaskBtn from "../DeleteTaskBtn/DeleteTaskBtn.jsx";
-
-export default function EventTask({ task, index, eventId }) {
-
- const { update } = useContext(AuthContext)
-
- const [assigned, setAssigned] = useState(false);
- const [open, setOpen] = useState(false);
- const [title, setTitle] = useState("");
- const [message, setMessage] = useState("");
-
- async function checkAssign() {
- const data = await isAssigned(task.id);
- setAssigned(data?.data.assigned);
- }
-
- useEffect(() => {
- checkAssign();
- }, [])
-
-
- const handleRegisterBtn = async () => {
- const res = await assign(task.id);
-
- switch (res.status) {
- case 200:
- update()
- setTitle("Inscription réussie")
- setMessage(`Vous êtes maintenant inscrit à la tâche ${task.name}`);
- setOpen(true);
- setAssigned(true);
- break;
-
- case 409:
- setTitle("Erreur lors de l'inscription")
- setMessage("Vous êtes déjà inscrit à cette tâche")
- setOpen(true);
- break;
-
- case 403:
- setTitle("Erreur lors de l'inscription")
- setMessage("Le nombre maximum d'inscription pour cette tâche à été atteint")
- setOpen(true);
- break;
- }
- };
-
- const handleUnassign = async () => {
- const res = await unAssign(task.id);
-
- switch (res.status) {
- case 200:
- update()
- setTitle("Désinscription réussie")
- setMessage(`Vous n'êtes plus inscrit à la tâche ${task.name}`);
- setOpen(true);
- setAssigned(false);
- break;
-
- case 409:
- setTitle("Erreur lors de la désinscription")
- setMessage(`Vous n'êtes pas inscrit à cette tâche`);
- setOpen(true);
- break;
- }
- };
-
- return
-
-
-
{task.name}
-
{formatDateLetter(task.start)} - {formatDateLetter(task.end)}
-
{task.description}
-
-
- {assigned ?
- handleUnassign()}> Se désinscrire
- :
- handleRegisterBtn()}> S’inscrire
- }
-
-
-
-
-
- {message}
-
-
-}
\ No newline at end of file
diff --git a/src/pages/EventDetail/components/EventTask/EventTask.tsx b/src/pages/EventDetail/components/EventTask/EventTask.tsx
new file mode 100644
index 0000000..bebc62d
--- /dev/null
+++ b/src/pages/EventDetail/components/EventTask/EventTask.tsx
@@ -0,0 +1,119 @@
+import styles from "./EventTask.module.css";
+import { formatDateLetter } from "../../../../utils/date/formatDateLetter";
+import Button from "../../../../components/ui/Button/Button";
+import assign from "../../../../utils/tasks/assign";
+import unAssign from "../../../../utils/tasks/unAssign";
+import { useContext, useEffect, useState } from "react";
+import isAssigned from "../../../../utils/tasks/isAssigned";
+import Modal from "../../../../components/ui/Modal/Modal";
+import { AuthContext } from "../../../../contexts/Auth/AuthContext";
+import DeleteTaskBtn from "../DeleteTaskBtn/DeleteTaskBtn";
+
+type EventTaskProps = {
+ task: any;
+ index: number;
+ eventId: string | number;
+};
+
+export default function EventTask({ task, index, eventId }: EventTaskProps) {
+
+ const { update } = useContext(AuthContext) as any;
+
+ const [assigned, setAssigned] = useState(false);
+ const [open, setOpen] = useState(false);
+ const [title, setTitle] = useState("");
+ const [message, setMessage] = useState("");
+
+ async function checkAssign() {
+ const data = await isAssigned(task.id);
+ setAssigned(data?.data.assigned);
+ }
+
+ useEffect(() => {
+ checkAssign();
+ }, []);
+
+ const handleRegisterBtn = async () => {
+ const res = await assign(task.id);
+
+ switch (res.status) {
+ case 200:
+ update();
+ setTitle("Inscription réussie");
+ setMessage(`Vous êtes maintenant inscrit à la tâche ${task.name}`);
+ setOpen(true);
+ setAssigned(true);
+ break;
+
+ case 409:
+ setTitle("Erreur lors de l'inscription");
+ setMessage("Vous êtes déjà inscrit à cette tâche");
+ setOpen(true);
+ break;
+
+ case 403:
+ setTitle("Erreur lors de l'inscription");
+ setMessage("Le nombre maximum d'inscription pour cette tâche à été atteint");
+ setOpen(true);
+ break;
+ }
+ };
+
+ const handleUnassign = async () => {
+ const res = await unAssign(task.id);
+
+ switch (res.status) {
+ case 200:
+ update();
+ setTitle("Désinscription réussie");
+ setMessage(`Vous n'êtes plus inscrit à la tâche ${task.name}`);
+ setOpen(true);
+ setAssigned(false);
+ break;
+
+ case 409:
+ setTitle("Erreur lors de la désinscription");
+ setMessage(`Vous n'êtes pas inscrit à cette tâche`);
+ setOpen(true);
+ break;
+ }
+ };
+
+ return (
+
+
+
+
+ {task.name}
+
+
+ {formatDateLetter(task.start)} - {formatDateLetter(task.end)}
+
+
{task.description}
+
+
+
+ {assigned ? (
+ handleUnassign()}>
+ Se désinscrire
+
+ ) : (
+ handleRegisterBtn()}>
+ S’inscrire
+
+ )}
+
+
+
+
+
+
setOpen(false)} title={title}>
+ {message}
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/router.js b/src/router.js
index 75d0bd6..11c3bb8 100644
--- a/src/router.js
+++ b/src/router.js
@@ -9,7 +9,7 @@ import EventsPage from "./pages/Events/EventsPage.jsx";
import AdminPage from "./pages/Admin/AdminPage.jsx";
import WaitValidationPage from "./pages/WaitValidation/WaitValidationPage.jsx";
import PageNotFoundPage from "./pages/PageNotFound/PageNotFoundPage.jsx";
-import eventDetail from "./pages/EventDetail/EventDetailPage.jsx";
+import eventDetail from "./pages/EventDetail/EventDetailPage.tsx";
import legalNotices from "./pages/LegalNotices/LegalNoticesPage.jsx";
import RGPDPage from "./pages/RGPD/RGPDPage.jsx";