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
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;
+ }
+}