From a8afaffc0ecc0a7e3b3e192d0522922268b76736 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Sun, 31 May 2026 09:15:12 -0400 Subject: [PATCH] =?UTF-8?q?Refactoriser=20les=20pages=20d'assembl=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extrait les utilitaires et composants UI propres aux assemblées pour alléger la page principale sans changer le comportement. Centralise l'usage de estExecutif depuis le store dans les pages Assemblées, Rencontres, Événements et Décisions afin d'éviter les règles d'accès dupliquées côté frontend. --- .../src/features/assemblees/assembleeUi.jsx | 87 ++++++++++ .../src/features/assemblees/assembleeUtils.js | 29 ++++ frontend/src/pages/AssembleeAffaires.jsx | 148 +----------------- frontend/src/pages/Decisions.jsx | 6 +- frontend/src/pages/Evenements.jsx | 6 +- frontend/src/pages/ReunionHebdomadaire.jsx | 3 +- 6 files changed, 123 insertions(+), 156 deletions(-) create mode 100644 frontend/src/features/assemblees/assembleeUi.jsx create mode 100644 frontend/src/features/assemblees/assembleeUtils.js diff --git a/frontend/src/features/assemblees/assembleeUi.jsx b/frontend/src/features/assemblees/assembleeUi.jsx new file mode 100644 index 0000000..0431ac3 --- /dev/null +++ b/frontend/src/features/assemblees/assembleeUi.jsx @@ -0,0 +1,87 @@ +import React from 'react'; +import { labelDateReunion } from '../../utils/datesReunion'; + +export const INPUT = 'w-full p-3 bg-gray-50 rounded-xl border-0 focus:ring-2 focus:ring-aa-blue'; + +const STATUTS = { + proposee: ['À seconder', 'bg-yellow-100 text-yellow-700'], + secondee: ['Secondée', 'bg-blue-100 text-blue-700'], + rejetee: ['Rejetée', 'bg-red-100 text-red-700'], +}; + +export function boutonAction(actif) { + return `p-3 rounded-xl text-sm font-bold ${actif ? 'bg-aa-blue text-white' : 'bg-gray-50 text-gray-700'}`; +} + +export function Card({ titre, children }) { + return

{titre}

{children}
; +} + +export function Champ({ label, children }) { + return ; +} + +export function SelectDate({ value, onChange, dates }) { + if (!dates.length) { + return
Configurez le jour de réunion dans les paramètres du groupe.
; + } + return ( + + ); +} + +export function MembreSelect({ label, value, onChange, membres }) { + return ( + + ); +} + +export function DecisionItem({ p, membres, estExecutif, form, setForm, seconderPour, setSeconderPour, seconder, voter }) { + const [label, cls] = STATUTS[p.statut] || STATUTS.proposee; + const motif = (form.etant_donne_que || '').trim(); + const decision = (form.groupe_a_decide_de || '').trim(); + return ( +
+
+
+

{p.sujet}

+ {p.description &&

{p.description}

} +

Proposée par {p.proposeur_prenom}{p.secondeur_prenom ? ` · Secondée par ${p.secondeur_prenom}` : ''}

+
+ {label} +
+ + {p.statut === 'proposee' && ( +
+ {estExecutif &&