refactor: Réutilisation filter-bar.xhtml dans membre/liste.xhtml (DRY/WOU)

This commit is contained in:
dahoud
2025-11-30 12:02:45 +00:00
parent 3e22c02921
commit 7d7e5c48a7

View File

@@ -40,74 +40,117 @@
<h:form id="formMembres"> <h:form id="formMembres">
<h5>Tous les Membres</h5> <h5>Tous les Membres</h5>
<!-- Filtres --> <!-- Filtres et recherche (DRY/WOU: filter-bar) -->
<p:toolbar> <ui:decorate template="/templates/components/cards/filter-bar.xhtml">
<p:toolbarGroup> <ui:param name="title" value="Filtres" />
<div class="flex align-items-center gap-2"> <ui:param name="styleClass" value="mb-3" />
<span class="p-input-icon-left"> <ui:define name="filters">
<i class="pi pi-search"></i> <div class="col-12 md:col-3">
<p:inputText placeholder="Rechercher..." <div class="field">
value="#{membreListeBean.searchFilter}"> <p:outputLabel for="searchFilter" value="Rechercher" />
<p:ajax event="keyup" update="dtMembres" /> <span class="p-input-icon-left w-full">
</p:inputText> <i class="pi pi-search"></i>
</span> <p:inputText id="searchFilter"
placeholder="Nom, prénom, email..."
<p:selectOneMenu value="#{membreListeBean.statutFilter}"> value="#{membreListeBean.searchFilter}"
<f:selectItem itemLabel="Tous les statuts" itemValue="" /> styleClass="w-full">
<f:selectItem itemLabel="Actif" itemValue="ACTIF" /> <p:ajax event="keyup" update="dtMembres" delay="500"/>
<f:selectItem itemLabel="Inactif" itemValue="INACTIF" /> </p:inputText>
<f:selectItem itemLabel="Suspendu" itemValue="SUSPENDU" /> </span>
<f:selectItem itemLabel="Radié" itemValue="RADIE" /> </div>
<p:ajax update="dtMembres" />
</p:selectOneMenu>
<p:selectOneMenu value="#{membreListeBean.typeFilter}">
<f:selectItem itemLabel="Tous les types" itemValue="" />
<f:selectItem itemLabel="Actif" itemValue="ACTIF" />
<f:selectItem itemLabel="Associé" itemValue="ASSOCIE" />
<f:selectItem itemLabel="Bienfaiteur" itemValue="BIENFAITEUR" />
<f:selectItem itemLabel="Honoraire" itemValue="HONORAIRE" />
<p:ajax update="dtMembres" />
</p:selectOneMenu>
<p:selectOneMenu value="#{membreListeBean.cotisationFilter}">
<f:selectItem itemLabel="Toutes cotisations" itemValue="" />
<f:selectItem itemLabel="À jour" itemValue="A_JOUR" />
<f:selectItem itemLabel="En retard" itemValue="EN_RETARD" />
<f:selectItem itemLabel="Jamais payé" itemValue="JAMAIS_PAYE" />
<p:ajax update="dtMembres" />
</p:selectOneMenu>
<p:selectOneMenu value="#{membreListeBean.entiteFilter}">
<f:selectItem itemLabel="Toutes entités" itemValue="" />
<f:selectItems value="#{membreListeBean.entitesDisponibles}"
var="entite"
itemLabel="#{entite.nom}"
itemValue="#{entite.id}" />
<p:ajax update="dtMembres" />
</p:selectOneMenu>
</div> </div>
</p:toolbarGroup> <div class="col-12 md:col-2">
<div class="field">
<p:toolbarGroup align="right"> <p:outputLabel for="statutFilter" value="Statut" />
<ui:include src="/templates/components/buttons/button-secondary.xhtml"> <p:selectOneMenu id="statutFilter"
<ui:param name="value" value="Filtres avancés" /> value="#{membreListeBean.statutFilter}"
<ui:param name="icon" value="pi pi-filter" /> styleClass="w-full">
<ui:param name="onclick" value="PF('dlgFiltresAvances').show();" /> <f:selectItem itemLabel="Tous les statuts" itemValue="" />
<ui:param name="outlined" value="true" /> <f:selectItem itemLabel="Actif" itemValue="ACTIF" />
<ui:param name="styleClass" value="mr-2" /> <f:selectItem itemLabel="Inactif" itemValue="INACTIF" />
</ui:include> <f:selectItem itemLabel="Suspendu" itemValue="SUSPENDU" />
<ui:include src="/templates/components/buttons/button-icon.xhtml"> <f:selectItem itemLabel="Radié" itemValue="RADIE" />
<ui:param name="icon" value="pi pi-refresh" /> <p:ajax event="change" update="dtMembres" />
<ui:param name="action" value="#{membreListeBean.actualiser}" /> </p:selectOneMenu>
<ui:param name="update" value="@form" /> </div>
<ui:param name="title" value="Actualiser" /> </div>
<ui:param name="rounded" value="false" /> <div class="col-12 md:col-2">
<ui:param name="text" value="false" /> <div class="field">
<ui:param name="styleClass" value="ui-button-outlined ui-button-secondary" /> <p:outputLabel for="typeFilter" value="Type" />
</ui:include> <p:selectOneMenu id="typeFilter"
</p:toolbarGroup> value="#{membreListeBean.typeFilter}"
</p:toolbar> styleClass="w-full">
<f:selectItem itemLabel="Tous les types" itemValue="" />
<f:selectItem itemLabel="Actif" itemValue="ACTIF" />
<f:selectItem itemLabel="Associé" itemValue="ASSOCIE" />
<f:selectItem itemLabel="Bienfaiteur" itemValue="BIENFAITEUR" />
<f:selectItem itemLabel="Honoraire" itemValue="HONORAIRE" />
<p:ajax event="change" update="dtMembres" />
</p:selectOneMenu>
</div>
</div>
<div class="col-12 md:col-2">
<div class="field">
<p:outputLabel for="cotisationFilter" value="Cotisation" />
<p:selectOneMenu id="cotisationFilter"
value="#{membreListeBean.cotisationFilter}"
styleClass="w-full">
<f:selectItem itemLabel="Toutes cotisations" itemValue="" />
<f:selectItem itemLabel="À jour" itemValue="A_JOUR" />
<f:selectItem itemLabel="En retard" itemValue="EN_RETARD" />
<f:selectItem itemLabel="Jamais payé" itemValue="JAMAIS_PAYE" />
<p:ajax event="change" update="dtMembres" />
</p:selectOneMenu>
</div>
</div>
<div class="col-12 md:col-2">
<div class="field">
<p:outputLabel for="entiteFilter" value="Entité" />
<p:selectOneMenu id="entiteFilter"
value="#{membreListeBean.entiteFilter}"
styleClass="w-full">
<f:selectItem itemLabel="Toutes entités" itemValue="" />
<f:selectItems value="#{membreListeBean.entitesDisponibles}"
var="entite"
itemLabel="#{entite.nom}"
itemValue="#{entite.id}" />
<p:ajax event="change" update="dtMembres" />
</p:selectOneMenu>
</div>
</div>
</ui:define>
<ui:define name="actions">
<div class="col-12 md:col-1">
<div class="field">
<label class="invisible">Actions</label>
<p:commandButton value="Filtres avancés"
icon="pi pi-filter"
onclick="PF('dlgFiltresAvances').show();"
styleClass="ui-button-secondary w-full" />
</div>
</div>
<div class="col-12 md:col-1">
<div class="field">
<label class="invisible">Actualiser</label>
<p:commandButton icon="pi pi-refresh"
action="#{membreListeBean.actualiser}"
update="@form"
title="Actualiser"
styleClass="ui-button-outlined ui-button-secondary w-full" />
</div>
</div>
<div class="col-12 md:col-1">
<div class="field">
<label class="invisible">Réinitialiser</label>
<p:commandButton value="Réinitialiser"
icon="pi pi-filter-slash"
action="#{membreListeBean.reinitialiserFiltres}"
update="dtMembres searchFilter statutFilter typeFilter cotisationFilter entiteFilter"
styleClass="ui-button-secondary w-full" />
</div>
</div>
</ui:define>
</ui:decorate>
<!-- DataTable --> <!-- DataTable -->
<p:dataTable id="dtMembres" <p:dataTable id="dtMembres"