feat(client): Recréation des composants action-button-* avec ui:decorate + ui:define

- Recréation de action-button-edit.xhtml avec ui:define pour l'action
- Recréation de action-button-toggle.xhtml avec ui:define pour l'action
- Recréation de action-button-delete.xhtml avec ui:define pour l'action
- Recréation de action-button-view.xhtml (navigation simple)

Ces composants utilisent maintenant ui:decorate + ui:define au lieu de ui:param
pour passer les expressions de méthode actionListener.

Usage exemple:
ui:decorate template action-button-edit.xhtml
  ui:param name update value formEdit
  ui:param name dialogWidget value dlgEdit
  ui:define name action
    bean.editMethod(item)
  ui:define
ui:decorate
This commit is contained in:
dahoud
2025-11-29 21:04:29 +00:00
parent 5e34215390
commit fa6b9d3243
4 changed files with 110 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<!--
Composant bouton "Supprimer" avec confirmation réutilisable - DRY/WOU
Usage avec ui:decorate pour passer l'action via ui:define :
<ui:decorate template="/templates/components/buttons/action-button-delete.xhtml">
<ui:param name="update" value=":formList:dtItems :formList:messages"/>
<ui:param name="confirmMessage" value="Êtes-vous sûr de vouloir supprimer ?"/>
<ui:param name="styleClass" value=""/>
<ui:define name="action">
#{bean.deleteItem(item)}
</ui:define>
</ui:decorate>
-->
<p:commandButton icon="pi pi-trash"
title="Supprimer"
actionListener="#{action}"
update="#{update}"
styleClass="ui-button-rounded ui-button-danger #{not empty styleClass ? styleClass : ''}">
<p:confirm header="Confirmation"
message="#{empty confirmMessage ? 'Êtes-vous sûr de vouloir supprimer cet élément ?' : confirmMessage}"
icon="pi pi-exclamation-triangle"/>
</p:commandButton>
</ui:composition>

View File

@@ -0,0 +1,27 @@
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<!--
Composant bouton "Modifier" réutilisable - DRY/WOU
Usage avec ui:decorate pour passer l'action via ui:define :
<ui:decorate template="/templates/components/buttons/action-button-edit.xhtml">
<ui:param name="update" value=":formEdit"/>
<ui:param name="dialogWidget" value="dlgEdit"/>
<ui:param name="styleClass" value="mr-2"/>
<ui:define name="action">
#{bean.setItemSelected(item)}
</ui:define>
</ui:decorate>
-->
<p:commandButton icon="pi pi-pencil"
title="Modifier"
actionListener="#{action}"
oncomplete="PF('#{dialogWidget}').show();"
update="#{update}"
styleClass="ui-button-rounded ui-button-warning #{not empty styleClass ? styleClass : ''}"/>
</ui:composition>

View File

@@ -0,0 +1,31 @@
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<!--
Composant bouton "Activer/Désactiver" avec confirmation réutilisable - DRY/WOU
Usage avec ui:decorate pour passer l'action via ui:define :
<ui:decorate template="/templates/components/buttons/action-button-toggle.xhtml">
<ui:param name="update" value=":formList:dtItems :formList:messages"/>
<ui:param name="isActive" value="#{item.statut == 'ACTIVE'}"/>
<ui:param name="confirmMessage" value="Êtes-vous sûr ?"/>
<ui:param name="styleClass" value="mr-2"/>
<ui:define name="action">
#{bean.toggleItem(item)}
</ui:define>
</ui:decorate>
-->
<p:commandButton icon="#{isActive ? 'pi pi-ban' : 'pi pi-check'}"
title="#{isActive ? 'Désactiver' : 'Activer'}"
actionListener="#{action}"
update="#{update}"
styleClass="ui-button-rounded #{isActive ? 'ui-button-secondary' : 'ui-button-success'} #{not empty styleClass ? styleClass : ''}">
<p:confirm header="Confirmation"
message="#{empty confirmMessage ? 'Êtes-vous sûr de vouloir changer le statut ?' : confirmMessage}"
icon="pi pi-exclamation-triangle"/>
</p:commandButton>
</ui:composition>

View File

@@ -0,0 +1,22 @@
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<!--
Composant bouton "Consulter" réutilisable - DRY/WOU
Usage :
<ui:include src="/templates/components/buttons/action-button-view.xhtml">
<ui:param name="id" value="#{item.id}"/>
<ui:param name="detailPage" value="/pages/secure/organisation/detail.xhtml"/>
<ui:param name="styleClass" value="mr-2"/>
</ui:include>
-->
<p:commandButton icon="pi pi-search"
title="Consulter"
styleClass="ui-button-rounded ui-button-info #{not empty styleClass ? styleClass : ''}"
onclick="window.location='#{request.contextPath}#{detailPage}?id=#{id}';return false;"/>
</ui:composition>