7.4 KiB
📊 Composants KPI Réutilisables - Écosystème LionsDev
Version: 2.0.0
Date: 2025-01-29
Pattern: WOU/DRY (Write Once Use / Don't Repeat Yourself)
🎯 Vue d'Ensemble
Ces composants KPI (Indicateurs de Performance) sont conçus pour être 100% réutilisables dans tous les projets de l'écosystème lionsdev. Ils suivent les meilleures pratiques de PrimeFaces Freya et offrent une expérience utilisateur cohérente.
📦 Composants Disponibles
1. kpi-card.xhtml - Carte KPI Individuelle
Composant principal pour afficher un indicateur de performance unique.
Localisation: /templates/components/shared/cards/kpi-card.xhtml
Paramètres principaux:
title(requis) - Titre du KPIvalue(requis) - Valeur à affichericon(requis) - Icône PrimeIconsiconColor(requis) - Couleur de l'icônegrowthValue(optionnel) - Valeur de croissancegrowthLabel(optionnel) - Libellé de croissanceprogressValue(optionnel) - Barre de progression 0-100statusIcon,statusLabel,statusValue(optionnel) - Mode statutclickable(défaut: false) - Rendre cliquableclickOutcome(optionnel) - Redirection au clic
Exemple simple:
<ui:include src="/templates/components/shared/cards/kpi-card.xhtml">
<ui:param name="title" value="Total Utilisateurs" />
<ui:param name="value" value="#{bean.totalUsers}" />
<ui:param name="icon" value="pi-users" />
<ui:param name="iconColor" value="blue-600" />
</ui:include>
Exemple avec croissance:
<ui:include src="/templates/components/shared/cards/kpi-card.xhtml">
<ui:param name="title" value="Utilisateurs Actifs" />
<ui:param name="value" value="#{bean.activeUsers}" />
<ui:param name="icon" value="pi-user-check" />
<ui:param name="iconColor" value="green-600" />
<ui:param name="growthValue" value="#{bean.growthPercent}" />
<ui:param name="growthLabel" value="ce mois" />
<ui:param name="progressValue" value="#{bean.progressPercent}" />
</ui:include>
Exemple avec statut:
<ui:include src="/templates/components/shared/cards/kpi-card.xhtml">
<ui:param name="title" value="Sessions Actives" />
<ui:param name="value" value="#{bean.activeSessions}" />
<ui:param name="icon" value="pi-sign-in" />
<ui:param name="iconColor" value="purple-600" />
<ui:param name="statusIcon" value="pi-check-circle" />
<ui:param name="statusLabel" value="En ligne" />
<ui:param name="statusValue" value="#{bean.onlineUsers} actifs" />
</ui:include>
2. kpi-group.xhtml - Groupe de KPI
Composant composite pour organiser plusieurs KPI dans une grille.
Localisation: /templates/components/shared/dashboard/kpi-group.xhtml
Paramètres:
title(optionnel) - Titre de la sectioncolumns(défaut: 4) - Nombre de colonnes (1-6)colSize(optionnel) - Taille personnalisée
Exemple:
<ui:include src="/templates/components/shared/dashboard/kpi-group.xhtml">
<ui:param name="title" value="Statistiques Utilisateurs" />
<ui:param name="columns" value="4" />
<ui:define name="kpi-content">
<!-- KPI 1 -->
<ui:include src="/templates/components/shared/cards/kpi-card.xhtml">
<ui:param name="title" value="Total" />
<ui:param name="value" value="#{bean.total}" />
<ui:param name="icon" value="pi-users" />
<ui:param name="iconColor" value="blue-600" />
</ui:include>
<!-- KPI 2, 3, 4... -->
</ui:define>
</ui:include>
3. dashboard-section.xhtml - Section Dashboard
Composant composite pour créer des sections de dashboard réutilisables.
Localisation: /templates/components/shared/dashboard/dashboard-section.xhtml
Paramètres:
title(requis) - Titre de la sectiondescription(optionnel) - Descriptionicon(optionnel) - IcônecolSize(défaut: "col-12") - Taille de colonneshowCard(défaut: true) - Envelopper dans une carte
Exemple:
<ui:include src="/templates/components/shared/dashboard/dashboard-section.xhtml">
<ui:param name="title" value="Actions Rapides" />
<ui:param name="icon" value="pi-bolt" />
<ui:param name="colSize" value="col-12 lg:col-6" />
<ui:define name="section-content">
<!-- Contenu de la section -->
<div class="grid">
<div class="col-12 md:col-6">
<p:commandButton value="Action 1" />
</div>
</div>
</ui:define>
</ui:include>
4. user-stat-card.xhtml - Wrapper de Compatibilité
Wrapper de compatibilité ascendante qui délègue à kpi-card.xhtml.
Note: Pour de nouvelles implémentations, utilisez directement kpi-card.xhtml.
🎨 Couleurs Disponibles
Utilisez les couleurs PrimeFlex pour iconColor:
blue-600,blue-500,blue-400green-600,green-500,green-400purple-600,purple-500,purple-400orange-600,orange-500,orange-400red-600,red-500,red-400cyan-600,cyan-500,cyan-400pink-600,pink-500,pink-400
📐 Tailles de Colonnes
Utilisez les classes PrimeFlex pour colSize:
col-12- Pleine largeurcol-12 md:col-6- 2 colonnes sur tablette+col-12 md:col-6 lg:col-3- 4 colonnes sur desktop (défaut)col-12 md:col-4- 3 colonnescol-12 md:col-6 lg:col-2- 6 colonnes
🔄 Réutilisabilité dans l'Écosystème LionsDev
Ces composants peuvent être utilisés dans:
- ✅ lions-user-manager (module actuel)
- ✅ unionflow (via dépendance Maven)
- ✅ btpxpress (via dépendance Maven)
- ✅ Tout autre projet lionsdev (via dépendance Maven)
Avantages:
- Code DRY (Don't Repeat Yourself)
- Interface utilisateur cohérente
- Maintenance centralisée
- Évolutivité garantie
📝 Bonnes Pratiques
- Toujours utiliser
kpi-card.xhtmlpour de nouveaux KPI - Utiliser
kpi-group.xhtmlpour organiser plusieurs KPI - Utiliser
dashboard-section.xhtmlpour structurer les dashboards - Respecter les conventions de couleurs PrimeFlex
- Documenter les paramètres personnalisés dans votre code
🚀 Exemple Complet de Dashboard
<div class="grid">
<!-- En-tête -->
<div class="col-12">
<ui:include src="/templates/components/layout/page-header.xhtml">
<ui:param name="title" value="Tableau de Bord" />
</ui:include>
</div>
<!-- KPIs -->
<div class="col-12">
<div class="grid">
<ui:include src="/templates/components/shared/cards/kpi-card.xhtml">
<ui:param name="title" value="Total" />
<ui:param name="value" value="#{bean.total}" />
<ui:param name="icon" value="pi-users" />
<ui:param name="iconColor" value="blue-600" />
</ui:include>
<!-- Autres KPI... -->
</div>
</div>
<!-- Sections -->
<ui:include src="/templates/components/shared/dashboard/dashboard-section.xhtml">
<ui:param name="title" value="Actions Rapides" />
<ui:define name="section-content">
<!-- Contenu -->
</ui:define>
</ui:include>
</div>
📚 Documentation Complète
Pour plus de détails, consultez:
/templates/components/README.md- Documentation générale- Code source des composants avec commentaires JSDoc
Auteur: Lions User Manager Team
Licence: Écosystème LionsDev