Merge branch 'dev' into features/adminImplement

This commit is contained in:
p2405951
2026-01-13 12:10:33 +01:00
51 changed files with 874 additions and 283 deletions
+18 -4
View File
@@ -1,8 +1,22 @@
export default function formatDateLetter(d) {
export function formatDateLetter(d) {
const monthNames = [
"Janvier", "Février", "Mars", "Avril", "Mai", "Juin",
"Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"
];
const [year, month, day] = d.split('-');
return `${day} ${monthNames[parseInt(month) - 1]} ${year}`;
};
const [datePart, timePart] = d.split(' ');
const [year, month, day] = datePart.split('-');
const [hours, minutes] = timePart.split(':');
return `${day} ${monthNames[parseInt(month, 10) - 1]} ${year} à ${hours}:${minutes}`;
}
export function formatDateLetterJS(d) {
const monthNames = [
"Janvier", "Février", "Mars", "Avril", "Mai", "Juin",
"Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"
];
const [year, month, day] = d.split('-');
return `${day} ${monthNames[parseInt(month) - 1]} ${year}`;
}
+8
View File
@@ -0,0 +1,8 @@
export default function formatTime(d) {
const date = new Date(d);
const hh = String(date.getUTCHours()).padStart(2, '0');
const min = String(date.getUTCMinutes()).padStart(2, '0');
return `${hh}:${min}`;
}
+21
View File
@@ -0,0 +1,21 @@
import Echo from "laravel-echo";
import Pusher from "pusher-js";
window.Pusher = Pusher;
export default function initEcho() {
const echoInstance = new Echo({
broadcaster: import.meta.env.VITE_BROADCASTER,
key: import.meta.env.VITE_REVERB_KEY,
wsHost: import.meta.env.VITE_REVERB_HOST,
wsPort: Number(import.meta.env.VITE_REVERB_PORT),
forceTLS: import.meta.env.VITE_FORCE_TLS === 'true',
disableStats: import.meta.env.VITE_DISABLE_STATS === 'true',
encrypted: import.meta.env.VITE_ENCRYPTED === 'true',
cluster: import.meta.env.VITE_CLUSTER,
enabledTransports: ['ws', 'wss'],
});
window.Echo = echoInstance;
return echoInstance;
}
@@ -0,0 +1,18 @@
export const userCreatedListener = (echo, userData, setNotifications, setunreadNotification) => {
if (userData.isAdmin || userData.role === "Gérant") {
const channelName = "users.registration";
echo.private(channelName)
.listen(".users.registration", (event) => {
const newNotification = {
id: Date.now(),
content: `Nouvelle demande d'inscription : ${event.user.name} ${event.user.lastname}`,
created_at: Date.now(),
pivot: { unread: 1 }
};
setNotifications(prev => [newNotification, ...prev]);
setunreadNotification(true);
});
return channelName;
}
return null;
};
@@ -0,0 +1,47 @@
export const userNotificationsListener = (echo, userData, setNotifications, setunreadNotification) => {
if (!userData?.id) return null;
const channelName = `user.${userData.id}`;
return echo.private(channelName)
.listen('.event.participation.cancelled', (event) => {
const newNotification = {
id: Date.now(),
content: `L'événement ${event.event.name} a été supprimé ! Vous n'y participez donc plus.`,
created_at: Date.now(),
pivot: { unread: 1 }
};
setNotifications(prev => [newNotification, ...prev]);
setunreadNotification(true);
})
.listen(`.task.participation.cancelled`, (event) => {
const newNotification = {
id: Date.now(),
content: `La tâche ${event.task.name} de l'événement ${event.event.name} a été supprimé ! Vous n'y participez donc plus.`,
created_at: Date.now(),
pivot: { unread: 1 }
};
setNotifications(prev => [newNotification, ...prev]);
setunreadNotification(true);
})
.listen('.volunteer.assigned.to.task', (event) => {
const newNotification = {
id: Date.now(),
content: `Vous avez été assigné à la tâche ${event.task.name} de l'événement ${event.event.name}`,
created_at: Date.now(),
pivot: { unread: 1 }
};
setNotifications(prev => [newNotification, ...prev]);
setunreadNotification(true);
})
.listen('.volunteer.unassigned.to.task', (event) => {
const newNotification = {
id: Date.now(),
content: `Vous avez été désassigné de la tâche ${event.task.name} de l'événement ${event.event.name}`,
created_at: Date.now(),
pivot: { unread: 1 }
};
setNotifications(prev => [newNotification, ...prev]);
setunreadNotification(true);
});
};
@@ -1,6 +1,6 @@
import getXSRFToken from "../getXSRF.js";
export default async function createEvent(name, description) {
export default async function createEvent(name, description, start, end) {
const csrfToken = await getXSRFToken();
try {
@@ -12,7 +12,7 @@ export default async function createEvent(name, description) {
'X-XSRF-TOKEN': csrfToken,
'Accept': 'application/json'
},
body: JSON.stringify({ name, description }),
body: JSON.stringify({ name, description, start, end }),
});
const data = await response.json();
+2 -2
View File
@@ -4,9 +4,9 @@ function filter(elements, filters, type) {
const dB = new Date(dateB);
if (filters.yearOrder === "asc") {
return dA - dB; // plus ancien -> plus récent
return dA - dB;
} else {
return dB - dA; // plus récent -> plus ancien
return dB - dA;
}
};
@@ -0,0 +1,26 @@
import getXSRFToken from "../getXSRF.js";
export default async function deleteNotificationUser(notificationId) {
const csrfToken = await getXSRFToken();
try {
const res = await fetch(`http://${import.meta.env.VITE_API_URL}/api/users/delete/notification/${notificationId}`, {
method: 'DELETE',
credentials: 'include',
headers: {
'Accept': 'application/json',
'X-XSRF-TOKEN': csrfToken
}
});
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;
}
}
@@ -1,7 +1,7 @@
export default async function getUserNotifications() {
try {
const response = await fetch(
'http://localhost:80/api/users/1/notifications',
`http://${import.meta.env.VITE_API_URL}/api/users/notifications`,
{
method: 'GET',
credentials: 'include',
@@ -0,0 +1,27 @@
import getXSRFToken from "../getXSRF.js";
export default async function readNotifications() {
const csrfToken = await getXSRFToken();
try {
const res = await fetch(`http://${import.meta.env.VITE_API_URL}/api/users/notifications/read`, {
method: 'POST',
credentials: 'include',
headers: {
'Accept': 'application/json',
'X-XSRF-TOKEN': csrfToken,
'Content-Type': 'application/json',
},
});
if (!res.ok) {
throw new Error(`Erreur serveur : ${res.status}`);
}
return await res.json();
} catch (err) {
console.error('Erreur :', err);
return null;
}
}