From e93ee747fc7c0990e82d165651c2d638152bf13b Mon Sep 17 00:00:00 2001 From: Arthur Dodin Date: Tue, 18 Aug 2026 21:39:42 +0200 Subject: [PATCH] feat: allergens link --- backend/src/middlewares/multer.middleware.ts | 1 + .../components/Admin/adminExportImport.tsx | 1 + .../components/Plannings/planningSection.tsx | 4 +- .../components/WEI_SDI_Food/foodSection.tsx | 90 ++++++++++--------- frontend/src/utils/utils.ts | 19 +++- 5 files changed, 68 insertions(+), 47 deletions(-) diff --git a/backend/src/middlewares/multer.middleware.ts b/backend/src/middlewares/multer.middleware.ts index 1d42489..29533cf 100644 --- a/backend/src/middlewares/multer.middleware.ts +++ b/backend/src/middlewares/multer.middleware.ts @@ -14,6 +14,7 @@ export enum MIMEType { const acceptedMIMETypesByItem: Record> = { foodmenu: { menu: [MIMEType.PDF], + allergens: [MIMEType.PDF], }, news: {}, notebooks: { diff --git a/frontend/src/components/Admin/adminExportImport.tsx b/frontend/src/components/Admin/adminExportImport.tsx index 33a01e5..03757cc 100644 --- a/frontend/src/components/Admin/adminExportImport.tsx +++ b/frontend/src/components/Admin/adminExportImport.tsx @@ -89,6 +89,7 @@ export const AdminImportFoodMenu = () => { + ); diff --git a/frontend/src/components/Plannings/planningSection.tsx b/frontend/src/components/Plannings/planningSection.tsx index 2845626..f49aa41 100644 --- a/frontend/src/components/Plannings/planningSection.tsx +++ b/frontend/src/components/Plannings/planningSection.tsx @@ -1,5 +1,6 @@ import { useEffect, useState } from 'react'; +import { checkUploadAvailability } from '../../utils/utils'; import { Card, CardContent, CardHeader, CardTitle } from '../ui/card'; type Planning = { @@ -42,8 +43,7 @@ export const PlanningSection = () => { const availability: Record = {}; for (const planning of plannings) { try { - const response = await fetch(planning.url, { method: 'HEAD' }); - availability[planning.name] = response.ok; + availability[planning.name] = await checkUploadAvailability(planning.url); } catch { availability[planning.name] = false; } diff --git a/frontend/src/components/WEI_SDI_Food/foodSection.tsx b/frontend/src/components/WEI_SDI_Food/foodSection.tsx index 44ee840..6c11a73 100644 --- a/frontend/src/components/WEI_SDI_Food/foodSection.tsx +++ b/frontend/src/components/WEI_SDI_Food/foodSection.tsx @@ -1,19 +1,22 @@ -import { useEffect, useState } from "react"; +import { useEffect, useState } from 'react'; -import { checkFoodStatus } from "../../services/requests/event.service"; -import { getPermission } from "../../services/requests/user.service"; -import { Card, CardContent, CardHeader, CardTitle } from "../ui/card"; +import { checkFoodStatus } from '../../services/requests/event.service'; +import { getPermission } from '../../services/requests/user.service'; +import { checkUploadAvailability } from '../../utils/utils'; +import { Card, CardContent, CardHeader, CardTitle } from '../ui/card'; export const FoodSection = () => { const [isFoodOpen, setIsFoodOpen] = useState(false); const [isMenuAvailable, setIsMenuAvailable] = useState(false); + const [isAllergensAvailable, setIsAllergensAvailable] = useState(false); const permission = getPermission(); const menuUrl = `${import.meta.env.VITE_API_URL}/uploads/foodmenu/menu.pdf`; + const allergensUrl = `${import.meta.env.VITE_API_URL}/uploads/foodmenu/allergens.pdf`; useEffect(() => { - const script = document.createElement("script"); - script.src = "https://www.billetweb.fr/js/export.js"; + const script = document.createElement('script'); + script.src = 'https://www.billetweb.fr/js/export.js'; script.async = true; document.body.appendChild(script); @@ -22,25 +25,14 @@ export const FoodSection = () => { const status = await checkFoodStatus(); setIsFoodOpen(status); } catch { - alert("Erreur lors de la récupération du statut de la nourriture."); - } - }; - - const checkMenuAvailability = async () => { - try { - const response = await fetch(menuUrl, { method: "HEAD" }); - if (response.ok) { - setIsMenuAvailable(true); - } - } catch { - // Ne rien faire si le fichier n'est pas disponible + alert('Erreur lors de la récupération du statut de la nourriture.'); } }; void fetchStatus(); - void checkMenuAvailability(); - }, [menuUrl]); - + checkUploadAvailability(menuUrl, () => setIsMenuAvailable(true)); + checkUploadAvailability(allergensUrl, () => setIsAllergensAvailable(true)); + }, [menuUrl, allergensUrl]); return ( @@ -58,9 +50,7 @@ export const FoodSection = () => {

🚫 Les menus de la semaine ne sont pas encore disponibles.

-

- Reste connecté, ils seront bientôt publiés ! -

+

Reste connecté, ils seront bientôt publiés !

) : ( @@ -70,19 +60,34 @@ export const FoodSection = () => { -