diff --git a/src/components/eventTask/EventTask.jsx b/src/components/eventTask/EventTask.jsx index e6b2a32..a4b9eb6 100644 --- a/src/components/eventTask/EventTask.jsx +++ b/src/components/eventTask/EventTask.jsx @@ -2,14 +2,51 @@ import styles from "./eventTask.module.css"; import { formatDateLetter } from "../../utils/date/formatDateLetter.js"; import Button from "../ui/button/button.jsx"; import assign from "../../utils/tasks/assign.js"; +import { useEffect, useState } from "react"; +import isAssigned from "../../utils/tasks/isAssigned.js"; +import Modal from "../ui/modal/modal.jsx"; export default function EventTask({ task, index }) { - const handleRegisterBtn = async (eventId) => { - console.log(eventId); - await assign(eventId); + 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?.assigned); } + useEffect(() => { + checkAssign(); + }, []) + + const handleRegisterBtn = async () => { + const res = await assign(task.id); + checkAssign(); + + switch (res.status) { + case 200: + setTitle("Inscription réussie") + setMessage(`Vous êtes maintenant inscrit à la tâche ${task.name}`); + setOpen(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; + } + }; + return
@@ -17,7 +54,15 @@ export default function EventTask({ task, index }) {

{formatDateLetter(task.start)} - {formatDateLetter(task.end)}

{task.description}

- + {assigned ? + + : + + }
+ + +

{message}

+
} \ No newline at end of file diff --git a/src/components/eventTask/eventTask.module.css b/src/components/eventTask/eventTask.module.css index 47fd24a..10d2fa7 100644 --- a/src/components/eventTask/eventTask.module.css +++ b/src/components/eventTask/eventTask.module.css @@ -25,6 +25,10 @@ animation-delay: calc(var(--i) * 0.1s); } +.modalContent { + text-align: center; +} + @keyframes fadeInUp { from { opacity: 0; diff --git a/src/pages/eventDetail/eventDetail.jsx b/src/pages/eventDetail/eventDetail.jsx index b93bdb3..acaddaa 100644 --- a/src/pages/eventDetail/eventDetail.jsx +++ b/src/pages/eventDetail/eventDetail.jsx @@ -3,8 +3,6 @@ import styles from "./eventDetail.module.css"; import { useParams } from "react-router"; import getEventById from "../../utils/event/getEventById.js"; import { formatDateLetter } from "../../utils/date/formatDateLetter.js"; -import Button from "../../components/ui/button/button.jsx"; -import assign from "../../utils/tasks/assign.js"; import EventTask from "../../components/eventTask/EventTask.jsx"; @@ -22,11 +20,6 @@ function EventDetail() { }) () }, []) - const handleRegisterBtn = async (eventId) => { - console.log(eventId); - await assign(eventId); - } - return (
diff --git a/src/utils/tasks/assign.js b/src/utils/tasks/assign.js index 413dc71..88f1ba8 100644 --- a/src/utils/tasks/assign.js +++ b/src/utils/tasks/assign.js @@ -1,32 +1,37 @@ import getXSRFToken from "../getXSRF.js"; - export default async function assign(taskId) { - const csrfToken = await getXSRFToken(); try { - const res = await fetch(`http://${import.meta.env.VITE_API_URL}/api/events/task/assign`, { - method: 'POST', - credentials: 'include', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'X-XSRF-TOKEN': csrfToken, - }, - body: JSON.stringify({ - task_id: taskId - }), - }); - - if (!res.ok) { - throw new Error(`Erreur serveur : ${res.status}`); - } + const res = await fetch( + `http://${import.meta.env.VITE_API_URL}/api/events/task/assign`, + { + method: 'POST', + credentials: 'include', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'X-XSRF-TOKEN': csrfToken, + }, + body: JSON.stringify({ + task_id: taskId + }), + } + ); const data = await res.json(); - return data; + + return { + status: res.status, + message: data?.message ?? null, + }; + } catch (err) { - console.error('Erreur :', err); - return null; + console.error("❌ Erreur réseau :", err); + return { + status: 0, + message: "Network error", + }; } -} \ No newline at end of file +} diff --git a/src/utils/tasks/isAssigned.js b/src/utils/tasks/isAssigned.js new file mode 100644 index 0000000..3b938a1 --- /dev/null +++ b/src/utils/tasks/isAssigned.js @@ -0,0 +1,24 @@ +export default async function isAssigned(taskId) { + try { + const res = await fetch( + `http://${import.meta.env.VITE_API_URL}/api/events/tasks/${taskId}/assigned`, + { + method: 'GET', + credentials: 'include', + headers: { + 'Accept': 'application/json', + }, + } + ); + + if (!res.ok) { + throw new Error(`Erreur serveur : ${res.status}`); + } + + return await res.json(); + + } catch (err) { + console.error('Erreur :', err); + return null; + } +}