Merge branch 'dev' into 'features/manageMember'

# Conflicts:
#   src/utils/users/deleteUser.js
This commit is contained in:
T'JAMPENS QUENTIN p2406187
2026-01-13 22:40:56 +00:00
13 changed files with 582 additions and 181 deletions
+15 -5
View File
@@ -1,14 +1,23 @@
export function formatDateLetter(d) {
if (!d) return "Date inconnue";
const dateObj = new Date(d);
if (isNaN(dateObj.getTime())) return "Date invalide";
const monthNames = [
"Janvier", "Février", "Mars", "Avril", "Mai", "Juin",
"Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"
];
const [datePart, timePart] = d.split(' ');
const [year, month, day] = datePart.split('-');
const [hours, minutes] = timePart.split(':');
const day = dateObj.getDate().toString().padStart(2, "0");
const month = monthNames[dateObj.getMonth()];
const year = dateObj.getFullYear();
const hours = dateObj.getHours().toString().padStart(2, "0");
const minutes = dateObj.getMinutes().toString().padStart(2, "0");
return `${day} ${monthNames[parseInt(month, 10) - 1]} ${year} à ${hours}:${minutes}`;
return `${day} ${month} ${year} à ${hours}:${minutes}`;
}
@@ -19,4 +28,5 @@ export function formatDateLetterJS(d) {
];
const [year, month, day] = d.split('-');
return `${day} ${monthNames[parseInt(month) - 1]} ${year}`;
}
}
+28
View File
@@ -0,0 +1,28 @@
import { useEffect, useState } from "react";
import getAllEvents from "../../utils/events/getAllEvents";
function EventsCounter() {
const [eventsCount, setEventsCount] = useState(0);
const [loading, setLoading] = useState(true);
useEffect(() => {
const fetchEvents = async () => {
try {
const events = await getAllEvents();
if (Array.isArray(events)) {
setEventsCount(events.length);
} else {
setEventsCount(0);
}
} catch (err) {
console.error(err);
setEventsCount(0);
} finally {
setLoading(false);
}
};
fetchEvents();
}, []);
if (loading) return <p>Chargement...</p>;
return <p>Nombre dévénements : {eventsCount}</p>;
}
export default EventsCounter;
+49
View File
@@ -0,0 +1,49 @@
import getXSRFToken from "../getXSRF.js";
export default async function createTask({
eventId,
name,
description,
start,
end,
location,
maxParticipants,
}) {
const csrfToken = await getXSRFToken();
try {
const res = await fetch(
`${import.meta.env.VITE_API_URL}/api/events/task`,
{
method: "POST",
credentials: "include",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
"X-XSRF-TOKEN": csrfToken,
},
body: JSON.stringify({
event_id: eventId,
name,
description,
start,
end,
location,
max_participants: maxParticipants,
}),
}
);
if (!res.ok) {
const errorData = await res.json();
return false;
}
const data = await res.json();
return true;
} catch (err) {
console.log("❌ Erreur réseau :", err);
return false;
}
}
+21
View File
@@ -0,0 +1,21 @@
export default async function getUserToValidate() {
try {
const res = await fetch(`${import.meta.env.VITE_API_URL}/api/users/invalid`, {
method: 'GET',
credentials: 'include',
headers: {
'Accept': 'application/json'
}
});
if (!res.ok) {
throw new Error(`Erreur serveur : ${res.status}`);
}
const data = await res.json();
return data;
} catch (err) {
console.error('Erreur :', err);
return null;
}
}
+27
View File
@@ -0,0 +1,27 @@
import getXSRFToken from "../getXSRF.js";
export default async function validateUser(userId) {
const csrfToken = await getXSRFToken();
try {
const res = await fetch(
`${import.meta.env.VITE_API_URL}/api/users/${userId}/validate`,
{
method: "POST",
credentials: "include",
headers: {
Accept: "application/json",
'X-XSRF-TOKEN': csrfToken,
},
}
);
if (!res.ok) {
const errorData = await res.json();
console.error("Erreur backend:", errorData);
return false;
}
return true;
} catch (err) {
console.error("Erreur réseau:", err);
return false;
}
}