Files
btpxpress-frontend/target/classes/META-INF/resources/WEB-INF/config.xhtml
dahoud b749f2df37 feat: Migration complète vers Quarkus PrimeFaces Freya
Migration du frontend React/Next.js vers Quarkus + PrimeFaces Freya 5.0.0

Dashboard:
- Extension de BtpXpressApiClient avec tous les endpoints dashboard
- Création de DashboardService pour récupérer les données API
- Refactorisation DashboardView : uniquement données réelles de l'API
- Restructuration dashboard.xhtml avec tous les aspects métiers BTP
- Suppression complète de toutes les données fictives

Topbar:
- Amélioration du menu profil utilisateur avec header professionnel
- Ajout UserSessionBean pour gérer les informations utilisateur
- Styles CSS personnalisés pour une disposition raffinée
- Badges de notifications conditionnels

Configuration:
- Intégration du thème Freya 5.0.0-jakarta
- Configuration OIDC pour Keycloak (security.lions.dev)
- Gestion des erreurs HTTP 431 (headers size)
- Support du format Fcfa avec séparateurs d'espaces

Converters:
- Création de FcfaConverter pour formater les montants en Fcfa avec espaces (x xxx xxx format)

Code Quality:
- Code entièrement documenté en français avec Javadoc exemplaire
- Respect du principe Java 'Write once, use many times'
- Logging complet pour le débogage
- Gestion d'erreurs robuste
2025-11-01 19:55:30 +00:00

95 lines
5.4 KiB
HTML

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<a href="#" id="layout-config-button" class="layout-config-button">
<i class="pi pi-cog"/>
</a>
<div id="layout-config" class="layout-config">
<h:form id="config-form" styleClass="layout-config-form">
<h5 style="margin-top: 0">Type de Menu</h5>
<p:selectOneRadio value="#{guestPreferences.menuMode}" layout="pageDirection"
onchange="PrimeFaces.FreyaConfigurator.changeMenuMode(event.target.value)" >
<f:selectItem itemLabel="Horizontal" itemValue="layout-horizontal" />
<f:selectItem itemLabel="Sidebar" itemValue="layout-sidebar" />
<f:selectItem itemLabel="Slim" itemValue="layout-slim" />
<p:ajax listener="#{guestPreferences.onMenuTypeChange}" update="config-form" />
</p:selectOneRadio>
<hr/>
<h5>Schéma de Couleurs</h5>
<p:selectOneRadio value="#{guestPreferences.darkMode}" layout="pageDirection"
onchange="PrimeFaces.FreyaConfigurator.changeLayout('#{guestPreferences.componentTheme}', event.target.value)" >
<f:selectItem itemLabel="Clair" itemValue="light" />
<f:selectItem itemLabel="Sombre" itemValue="dark" />
<p:ajax onstart="PrimeFaces.FreyaConfigurator.beforeResourceChange()" update="config-form logolink"/>
</p:selectOneRadio>
<p:outputPanel rendered="#{guestPreferences.menuMode eq 'layout-horizontal'}">
<hr/>
<h5>Mode Topbar et Menu</h5>
<p:selectOneRadio value="#{guestPreferences.topbarTheme}" layout="pageDirection"
onchange="PrimeFaces.FreyaConfigurator.changeSectionTheme(event.target.value , 'layout-topbar');PrimeFaces.FreyaConfigurator.changeSectionTheme(event.target.value , 'layout-menu')" >
<f:selectItem itemLabel="Clair" itemValue="light" itemDisabled="#{guestPreferences.darkMode != 'light'}" />
<f:selectItem itemLabel="Sombre" itemValue="dark" itemDisabled="#{guestPreferences.darkMode != 'light'}"/>
<p:ajax update="logolink config-form"/>
</p:selectOneRadio>
</p:outputPanel>
<p:outputPanel rendered="#{guestPreferences.menuMode != 'layout-horizontal'}">
<hr/>
<h5>Mode Topbar</h5>
<p:selectOneRadio value="#{guestPreferences.topbarTheme}" layout="pageDirection"
onchange="PrimeFaces.FreyaConfigurator.changeSectionTheme(event.target.value , 'layout-topbar')" >
<f:selectItem itemLabel="Clair" itemValue="light" itemDisabled="#{guestPreferences.darkMode != 'light'}" />
<f:selectItem itemLabel="Sombre" itemValue="dark" itemDisabled="#{guestPreferences.darkMode != 'light'}"/>
<p:ajax update="logolink config-form"/>
</p:selectOneRadio>
</p:outputPanel>
<p:outputPanel rendered="#{guestPreferences.menuMode != 'layout-horizontal'}">
<hr/>
<h5>Mode Menu</h5>
<p:selectOneRadio value="#{guestPreferences.menuTheme}" layout="pageDirection"
onchange="PrimeFaces.FreyaConfigurator.changeSectionTheme(event.target.value , 'layout-menu')" >
<f:selectItem itemLabel="Clair" itemValue="light" itemDisabled="#{guestPreferences.darkMode != 'light'}" />
<f:selectItem itemLabel="Sombre" itemValue="dark" itemDisabled="#{guestPreferences.darkMode != 'light'}"/>
<p:ajax update="logolink config-form"/>
</p:selectOneRadio>
</p:outputPanel>
<hr/>
<h5>Style d'Input</h5>
<p:selectOneRadio value="#{guestPreferences.inputStyle}" layout="pageDirection"
onchange="PrimeFaces.FreyaConfigurator.updateInputStyle(event.target.value)">
<f:selectItem itemLabel="Outlined" itemValue="outlined" />
<f:selectItem itemLabel="Filled" itemValue="filled" />
<p:ajax />
</p:selectOneRadio>
<hr/>
<h5>Couleurs du Thème</h5>
<div class="layout-themes">
<ui:repeat value="#{guestPreferences.componentThemes}" var="componentTheme">
<div>
<p:commandLink actionListener="#{guestPreferences.setComponentTheme(componentTheme.file)}"
style="background-color: #{componentTheme.color};" title="#{componentTheme.name}"
process="@this"
update="config-form"
onstart="PrimeFaces.FreyaConfigurator.beforeResourceChange()"
oncomplete="PrimeFaces.FreyaConfigurator.changeComponentsTheme('#{componentTheme.file}', '#{guestPreferences.darkMode}')">
</p:commandLink>
</div>
</ui:repeat>
</div>
</h:form>
</div>
</ui:composition>