Aller au contenu

Carte des composants Frontend

Hiérarchie des composants React après la refactorisation Phase 1. L'ancien monolithe app-client.tsx (814 lignes) a été décomposé en ~20 composants SRP.

Arborescence

app/page.tsx
  └── DataSourceProvider (lib/data-provider.tsx)
        └── App (components/app-client.tsx) ← Shell mince (~19 lignes)
              ├── ToastContainer (shared/)
              ├── NavBar (layout/)
              │     ├── WsIndicator (shared/)
              │     ├── HealthIndicator (shared/)
              │     ├── DataModeToggle (layout/)
              │     └── NavBtn (layout/)
              ├── Dashboard (dashboard/) ← si view === "dashboard"
              │     ├── DashboardSkeleton (shared/Skeleton.tsx)
              │     ├── ConnectionStatus (shared/) ← si mode API
              │     ├── StatsCards (dashboard/)
              │     ├── DeviceSelector (dashboard/)
              │     ├── MetricsChart (dashboard/)
              │     └── AlertsPanel (dashboard/)
              ├── Converter (converter/) ← si view === "converter"
              │     ├── EncodingPipeline (converter/)
              │     │     ├── PipelineStep (converter/)
              │     │     ├── SectionTitle (shared/)
              │     │     ├── Arrow (shared/)
              │     │     ├── Row (shared/)
              │     │     └── BinaryDisplay (shared/)
              │     ├── DecoderTool (converter/)
              │     ├── BitManipulator (converter/)
              │     ├── CorruptionDemo (converter/)
              │     ├── ProtocolOverhead (converter/)
              │     └── NegativeTemperatureDemo (converter/)
              └── Pipeline (pipeline/) ← si view === "pipeline"
                    ├── PipelineProvider (lib/pipeline-context.tsx)
                    │     └── PipelineContent
                    │           ├── PipelineModeTabs (pipeline/)
                    │           ├── ConnectionStatus (shared/)
                    │           ├── SystemDiagram (pipeline/)
                    │           │     ├── DiagramNode (pipeline/)
                    │           │     └── DataPacketAnimation (pipeline/)
                    │           ├── StepByStepControls (pipeline/) ← si mode step-by-step
                    │           ├── StepExplanation (pipeline/) ← si mode step-by-step
                    │           ├── ProtocolInspector (pipeline/) ← si mode inspector
                    │           │     ├── InspectorMqttTab (pipeline/)
                    │           │     ├── InspectorWsTab (pipeline/)
                    │           │     └── InspectorHttpTab (pipeline/)
                    │           ├── DataTransformPanel (pipeline/)
                    │           ├── MessageTimeline (pipeline/)
                    │           │     └── MessageTimelineItem (pipeline/)
                    │           └── StageDetailPanel (pipeline/)
                    │                 ├── StageDataView (pipeline/)
                    │                 └── StageCodeSnippet (pipeline/)

Composants par répertoire

components/shared/ — Composants réutilisables

Composant Props Description
ToastContainer — (via Context) Affiche les notifications toast (info, warning, error)
WsIndicator — (via Context) Pastille verte/jaune indiquant l'état WebSocket
HealthIndicator — (via Context) Indicateur de santé système (API + DB)
Skeleton className? Placeholder de chargement animé
DashboardSkeleton Placeholder complet pour le dashboard
SectionTitle children Titre de section standardisé
Arrow Flèche descendante entre les étapes du pipeline
Row label, value, color? Ligne label/valeur dans le pipeline
BinaryDisplay value, color Affichage binaire 16 bits avec séparateur
Term id, children Tooltip avec définition du glossaire au survol/clic
ErrorBoundary children Capteur d'erreurs avec bouton "Réessayer" pour rétablir l'interface

components/layout/ — Navigation

Composant Props Description
NavBar view, setView Barre de navigation responsive (desktop + hamburger mobile)
DataModeToggle mode, setMode Toggle Mock / API
NavBtn active, onClick, children Bouton de navigation stylisé

components/atoms/ — Composants atomiques réutilisables

Composant Props Description
Card children, className? Conteneur de carte réutilisable avec styling
StatusDot status Indicateur de statut (couleur selon l'état)

components/shared/ — Composants réutilisables (suite)

Composant Props Description
ConnectionStatus — (via Context) Panneau dépliant avec 5 cartes de statut services (API, DB, MQTT, WS, Publisher)

components/dashboard/ — Vue Dashboard

Composant Props Description
Dashboard — (via Context) Orchestrateur — charge stats, devices, metrics, alertes
StatsCards stats, alertCount, flash 4 cartes statistiques avec animation (React.memo)
DeviceSelector devices, selectedDevice, onSelect Liste cliquable des capteurs avec stats (React.memo)
MetricsChart metrics, selectedName, onExportCSV, onExportPDF Graphique Recharts (température + humidité) (React.memo)
AlertsPanel alertes Liste des alertes actives (React.memo)

components/pipeline/ — Vue Pipeline IoT

Composant Props Description
Pipeline Orchestrateur — wraps PipelineProvider, auto-génère des données en mode live
PipelineModeTabs — (via Context) Sélecteur de mode : Live, Pas à pas, Inspecteur
SystemDiagram — (via Context) Diagramme horizontal des 8 étapes avec animation de packet
DiagramNode stage, active, onClick Noeud cliquable avec icône, label, pulse animation
DataPacketAnimation active Point animé traversant le diagramme
StageDetailPanel — (via Context) Panneau latéral : description, format, snippet de code
StageDataView message, stageIndex Données au stage sélectionné pour un message donné
StageCodeSnippet code, language Bloc pre/code avec coloration syntaxique
MessageTimeline — (via Context) Liste scrollable des 50 derniers messages
MessageTimelineItem message, selected, onClick Ligne individuelle d'un message
DataTransformPanel — (via Context) Vue côte-à-côte de la transformation à chaque étape
StepByStepControls — (via Context) Boutons Générer/Suivant/Reset avec barre de progression
StepExplanation — (via Context) Contenu pédagogique pour chaque étape
ProtocolInspector — (via Context) Conteneur avec sous-onglets MQTT/WebSocket/HTTP
InspectorMqttTab — (via Context) Messages MQTT avec payloads Chirpstack v4 complets
InspectorWsTab — (via Context) Frames WebSocket (new_mesure, ping/pong)
InspectorHttpTab — (via Context) Requêtes HTTP (GET /stats, /devices, etc.)
InspectorMessage message Ligne extensible : protocole, topic, timestamp, JSON

components/converter/ — Vue Convertisseur

Composant Props Description
Converter Orchestrateur — sliders température/humidité + pipeline
EncodingPipeline frame Pipeline 6 étapes (valeurs → binaire → hex → base64 → décodage)
PipelineStep num, title, color, comment, children Conteneur d'une étape du pipeline
DecoderTool Décodeur Base64 inverse interactif
BitManipulator Grille 16 bits interactive : toggle bits, affiche décimal/hex/valeur physique
CorruptionDemo Flip aléatoire de bit, comparaison valide vs corrompu
ProtocolOverhead Visualisation en barres de l'overhead : 4 octets → 130 octets TCP/IP
NegativeTemperatureDemo Slider -40 à +85°C avec visualisation complément à 2

Source de données

Module Rôle
lib/types.ts Types partagés — re-exporte Stats, Mesure, DeviceStats, Alerte, View
lib/device-registry.ts Source unique des IDs et noms de capteurs (élimine la duplication)
lib/data-provider.tsx React Context — abstrait Mock vs API, gère WebSocket et reconnexion
lib/constants.ts Constantes UI — intervalles polling, couleurs, hauteur graphique
lib/pipeline-context.tsx React Context Pipeline — gère modes (live/step-by-step/inspector), messages, étape active
lib/pipeline-stages.ts 8 définitions d'étapes du pipeline avec description, code, couleur
lib/glossary.ts 15 entrées de glossaire IoT/LoRaWAN avec définitions et termes reliés

Hooks réutilisables

Hook Description
usePolling Gère les polls périodiques (stats, devices, etc.)
useToasts Accès au système de notifications toast
useLocalStorage Persistance locale avec synchronisation état
useWebSocket Gère la connexion WebSocket et les reconnexions automatiques
useDataLoading Gère l'état de chargement des données avec states pending/error/success

Optimisation React 19

Dashboard.tsx

Utilise queueMicrotask pour l'effet flash afin de respecter les contraintes d'impureté des fonctions de rendu React 19 — évite les setState dans le render principal.

pipeline-context.tsx

Utilise queueMicrotask pour les mises à jour d'état différées (deferred setState) dans le contexte Pipeline, assurant la stabilité du rendu et l'absence de warnings React 19.