From 0c908a21acbdf5264d8d3e98784dc23026577082 Mon Sep 17 00:00:00 2001 From: Pierre Date: Sun, 15 Feb 2026 15:37:31 +0100 Subject: [PATCH] Optimization on Calendar Page --- app/layout.tsx | 3 + components/BudgetContent.tsx | 172 ++++++++++--- components/CalendrierPageContent.tsx | 10 +- components/DashboardLayout.tsx | 8 +- components/ListeTrajets.tsx | 353 +++++++++++++++------------ 5 files changed, 354 insertions(+), 192 deletions(-) diff --git a/app/layout.tsx b/app/layout.tsx index 9acc474..5fb6551 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -14,6 +14,9 @@ const poppins = Poppins({ export const metadata: Metadata = { title: "Platform SaaS", description: "Plateforme SaaS", + icons: { + icon: "/logo.svg", + }, }; export default function RootLayout({ diff --git a/components/BudgetContent.tsx b/components/BudgetContent.tsx index 8902d18..e7f8598 100644 --- a/components/BudgetContent.tsx +++ b/components/BudgetContent.tsx @@ -145,7 +145,7 @@ export default function BudgetContent() { if (loading) { return ( -
+
Chargement...
); @@ -153,15 +153,15 @@ export default function BudgetContent() { if (!data || data.prescripteurs.length === 0) { return ( -
+
-

Aucun prescripteur configuré.

-

+

Aucun prescripteur configuré.

+

Ajoutez des prescripteurs dans la configuration pour pouvoir définir leurs budgets.

@@ -177,7 +177,7 @@ export default function BudgetContent() { const { global, prescripteurs } = data; return ( -
+
{/* Blocs budget global - style dashboard */}
@@ -225,26 +225,28 @@ export default function BudgetContent() { {/* Liste des budgets par prescripteur */}
-
-

Budget par prescripteur

-

- Cliquez sur un prescripteur pour voir l'historique des participations. Utilisez « Ajouter » pour créditer le budget. +

+

Budget par prescripteur

+

+ Cliquez sur un prescripteur pour voir l'historique. Utilisez « Ajouter » pour créditer le budget.

-
+ + {/* Vue desktop - Tableau */} +
- - - - @@ -257,7 +259,7 @@ export default function BudgetContent() { className="hover:bg-gray-50 cursor-pointer" onClick={() => setExpandedPrescripteur(expandedPrescripteur === item.value ? null : item.value)} > - - - - {expandedPrescripteur === item.value && item.historique.length > 0 && ( -
+ Prescripteur + Consommé + Restant + Actions
+
{item.value} {item.historique.length > 0 && ( @@ -274,10 +276,10 @@ export default function BudgetContent() { )}
+ {formatEuro(item.consommé)} + item.montant || (item.montant > 0 && item.restant < item.montant * 0.2) @@ -288,7 +290,7 @@ export default function BudgetContent() { {formatEuro(item.restant)} e.stopPropagation()}> + e.stopPropagation()}>
+

Historique des participations

-
+
@@ -362,7 +364,7 @@ export default function BudgetContent() { )} {expandedPrescripteur === item.value && item.historique.length === 0 && ( - @@ -373,7 +375,111 @@ export default function BudgetContent() {
+

Aucune participation enregistrée pour ce prescripteur.

-
+ {/* Vue mobile - Cartes */} +
+ {prescripteurs.map((item) => ( +
+ +
e.stopPropagation()}> + + +
+ {expandedPrescripteur === item.value && item.historique.length > 0 && ( +
+

Historique

+
+ {item.historique.map((h) => ( +
+
+

{h.adherentNom}

+

{formatDate(h.date)}

+
+
+ {formatEuro(h.montant)} + + Voir + +
+
+ ))} +
+
+ )} + {expandedPrescripteur === item.value && item.historique.length === 0 && ( +

+ Aucune participation enregistrée. +

+ )} +
+ ))} +
+ +

Les prescripteurs sont définis dans{' '} @@ -387,7 +493,7 @@ export default function BudgetContent() { {/* Modal Rectifier */} {rectifierModalPrescripteur && (

{ setRectifierModalPrescripteur(null); setRectifierBudget(''); @@ -395,7 +501,7 @@ export default function BudgetContent() { }} >
e.stopPropagation()} role="dialog" aria-modal="true" @@ -442,21 +548,21 @@ export default function BudgetContent() {
-
+
+ ))} +
+
+ + {/* Champs de date selon la période */} + {filterPeriod === 'jour' && ( +
+ + setFilterDate(e.target.value)} + className="block w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-lblue" + /> +
+ )} + {filterPeriod === 'mois' && ( +
+ + setFilterMonth(e.target.value)} + className="block w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-lblue" + /> +
+ )} + {filterPeriod === 'an' && ( +
+ + +
+ )} + {filterPeriod === 'personnalise' && ( +
+
+ + setStartDate(e.target.value)} + className="block w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-lblue" + /> +
+
+ + setEndDate(e.target.value)} + min={startDate || undefined} + className="block w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-lblue" + /> +
+
+ )} + {/* Actions */} -
+
- {/* Filtres */} + {/* Filtre par statut (replié par défaut) */} {showFilters && ( -
- {/* Filtre par plage de dates */} -
-
- - {(startDate || endDate) && ( - - )} -
-
-
- - setStartDate(e.target.value)} - className="block w-full px-3 py-2 text-sm sm:text-base border border-gray-300 rounded-lg bg-white text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-lblue transition-all max-w-full box-border" - /> -
-
- - setEndDate(e.target.value)} - min={startDate || undefined} - className="block w-full px-3 py-2 text-sm sm:text-base border border-gray-300 rounded-lg bg-white text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-lblue transition-all max-w-full box-border" - /> -
-
-
- - {/* Filtre par statut */} -
- -
+
+
+ {['', 'Planifié', 'En cours', 'Terminé', 'Annulé'].map((s) => ( - - - - -
+ ))}
)}
- {/* Liste des trajets */} -
-
-

- Derniers trajets créés + {/* Liste des trajets avec scrollbar */} +
+
+

+ {filterPeriod === 'derniers' ? 'Derniers trajets créés' : 'Trajets'}

{loading ? ( -
Chargement...
+
Chargement...
) : filteredTrajets.length === 0 ? ( -
+
{trajets.length === 0 - ? 'Aucun trajet créé récemment' + ? filterPeriod === 'derniers' + ? 'Aucun trajet créé récemment' + : 'Aucun trajet pour cette période' : 'Aucun trajet ne correspond à votre recherche'}
) : ( -
+
{filteredTrajets.map((trajet) => (
-
+
{/* Avatar adhérent */} -
+
{getInitials(trajet.adherent.nom, trajet.adherent.prenom)}