Move eventDetailPage components

This commit is contained in:
T'JAMPENS QUENTIN p2406187 committed 2026-01-19 09:02:31 +01:00
1 parent 8eea6075f0
commit 929f042aa5
3 files changed
+7 -7

No files matched your search

@@ -0,0 +1,88 @@
import styles from "./eventTask.module.css";
import { formatDateLetter } from "../../../../utils/date/formatDateLetter.js";
import Button from "../../../../components/ui/button/button.jsx";
import assign from "../../../../utils/tasks/assign.js";
import unAssign from "../../../../utils/tasks/unAssign.js";
import { useEffect, useState } from "react";
import isAssigned from "../../../../utils/tasks/isAssigned.js";
import Modal from "../../../../components/ui/modal/modal.jsx";
export default function EventTask({ task, index }) {
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);
switch (res.status) {
case 200:
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:
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 <div style={{"--i": index}} key={index} className={styles.content}>
<div className={styles.task}>
<div>
<span><strong>{task.name}</strong></span>
<p className={styles.taskDate}> {formatDateLetter(task.start)} - {formatDateLetter(task.end)} </p>
<p>{task.description}</p>
</div>
{assigned ?
<Button variant={"danger"} onClick={() => handleUnassign()}> Se désinscrire </Button>
:
<Button onClick={() => handleRegisterBtn()}> S’inscrire </Button>
}
</div>
<Modal open={open} onClose={setOpen} title={title}>
<p className={styles.modalContent}>{message}</p>
</Modal>
</div>
}
@@ -0,0 +1,48 @@
.task {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
}
.taskDate {
opacity: 0.5;
}
.content {
margin: 16px 0px 16px 0px;
padding: 10px 20px 10px 20px;
border-radius: 20px;
border: none;
background: transparent;
box-shadow:
inset 1.25px 1.25px 1px rgba(255, 255, 255, 1),
inset -1.25px -1.25px 1px rgba(255, 255, 255, 1),
inset -0.25px 0.25px 1px rgba(0, 0, 0, 0.2),
inset 0.25px -0.25px 1px rgba(0, 0, 0, 0.2);
opacity: 0;
animation: fadeInUp 0.6s ease-out forwards;
animation-delay: calc(var(--i) * 0.1s);
}
.modalContent {
text-align: center;
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@media screen and (max-width: 768px) {
.task {
flex-direction: column;
}
}
+1 -1
View File
@@ -3,7 +3,7 @@ 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 EventTask from "../../components/eventTask/EventTask.jsx";
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";