Composants UI réutilisables
Composants UI réutilisables
Dialogs, Loaders et ThemeToggle — comment les utiliser, réutiliser et intégrer dans une SPA (SSR désactivé)
Guide complet et bonnes pratiques pour tirer parti des composants front fournis : comment les utiliser pour créer des projets/repos/agents, les cloner/copier en toute sécurité et les intégrer proprement dans une application single-page.
Couverture
Dialogs
Utilisez les boîtes de dialogue pour interactions modales : création d’objets, confirmations, formulaires étape par étape. Patrons d’ouverture, gestion de l’état et accessibilité.
Loaders
Indicateurs visuels pour opérations asynchrones : intégration dans les listes, pages et formulaires. Bonnes pratiques pour éviter les états bloqués.
ThemeToggle
Basculer l’apparence (clair/sombre) et persistance de préférence utilisateur. Conseils d’initialisation côté client dans une SPA.
Contexte important
Les composants présentés sont conçus pour fonctionner dans une application SPA avec le rendu côté serveur désactivé. Si votre application utilise le SSR, suivez les recommandations d’intégration côté client décrites ci-dessous pour éviter des problèmes d’hydratation.
Introduction
Cette page explique, pas à pas, comment utiliser et réutiliser trois composants clé : Dialogs (modales), Loaders (indicateurs de chargement) et ThemeToggle (bascule thème). Vous trouverez des workflows détaillés, des conseils pratiques, des erreurs courantes à éviter et des options pour cloner ou copier les composants dans d’autres projets ou modules.
Workflow 1 — Utiliser les Dialogs pour créer projets / repos / agents
1. Choisir l'emplacement de la dialogue
Décidez où la modale doit apparaître : page de liste (ex. tableau de projets) ou page détaillée. Privilégiez une position logique proche du bouton d’action (ex. “Nouveau projet”).
2. Gérer l'état d'ouverture
Créez un état local qui contrôle si la modale est ouverte ou fermée. Ce contrôle se lie au composant Dialog pour l’ouverture/fermeture (par exemple via une variable d’état ou une propriété d’interface).
3. Pré-remplir le formulaire selon le contexte
Avant d’ouvrir la modale, préparez les valeurs par défaut : si l’utilisateur clone un repo ou reprend une configuration, passez ces valeurs pour éviter la ressaisie.
4. Afficher un Loader pendant les actions
Dans la modale, utilisez un Loader lorsque vous lancez des actions asynchrones (création, import, validation). Le Loader doit couvrir uniquement la partie en cours pour éviter de bloquer la modale entière si vous avez des sections indépendantes.
5. Gérer la validation et les erreurs
Affichez les erreurs près des champs concernés et, en cas d’erreur serveur, montrez un message global. Si l’opération échoue, laissez la modale ouverte pour que l’utilisateur corrige.
6. Fermeture et nettoyage
Quand la création réussit, fermez la modale et mettez à jour la liste principale (rafraîchissement local). N’oubliez pas de réinitialiser les valeurs du formulaire pour la prochaine ouverture.
7. Accessibilité
Assurez-vous que le focus entre dans la modale à l’ouverture, qu’il est piégé à l’intérieur et qu’il revient au contrôle déclencheur à la fermeture. Proposez raccourcis clavier (Esc pour fermer) et libellés clairs pour les lecteurs d’écran.
8. Cas avancés : dialogues imbriqués et confirmations
Pour les dialogues en chaîne (ex. création puis configuration), fermez la modale initiale uniquement si l’action est complète, ou ouvrez une modale secondaire depuis la principale en conservant l’état de la première.
Réutilisation d'une même Dialog pour plusieurs actions
Plutôt que de dupliquer plusieurs modales similaires, créez une modale paramétrable (mode = créer / éditer / cloner). Passez simplement les labels, le schéma de champs et les valeurs par défaut.
Garder l'utilisateur informé
Lors d’opérations longues, combinez Loader + message de progression + option d’annuler. L’utilisateur doit comprendre que le traitement est en cours et combien de temps il reste approximativement.
Ne laissez pas de modale ouverte sans feedback
Une modale qui reste ouverte sans message ou loader peut être interprétée comme un blocage. Toujours afficher une action en cours ou une erreur explicite.
Workflow 2 — Copier/cloner des composants et réutiliser les utilitaires fournis
1. Choisir la stratégie : copier ou cloner
Déterminez si vous souhaitez copier un composant pour l’adapter localement (copy) ou maintenir une relation avec l’origine (fork/clone). Copier est simple mais entraîne une duplication de maintenance ; cloner/fork permet des mises à jour centralisées.
2. Inventaire des dépendances
Avant de copier un composant, listez ses dépendances : styles globaux, utilitaires (ex. gestion thème, gestion d’état), et ressources (icônes, traductions). Rassemblez-les pour éviter les erreurs manquantes.
3. Isoler le composant
Si vous copiez, extrayez uniquement le markup et les assets nécessaires. Supprimez ou remplacez les liaisons spécifiques au projet d’origine (noms d’état, appels directs à services).
4. Créer un wrapper d'adaptation
Au lieu de modifier le composant copié, créez un petit “wrapper” qui traduit les props et évènements entre votre application et le composant externe. Cela facilite les mises à jour ultérieures.
5. Mettre à jour les styles et thèmes
Vérifiez que le composant utilise les variables de thème et classes CSS de votre projet. Uniformisez les couleurs, espacements et typographies pour une intégration homogène.
6. Documenter les modifications
Notez les changements effectués lors de la copie (champs modifiés, dépendances ajoutées) pour faciliter la maintenance et d’éventuels retours au dépôt d’origine.
7. Tester en contexte
Testez le composant dans les cas d’usage réels : dans une liste, en mobile, avec thèmes sombres/clairs. Vérifiez accessibilité, performance et comportements asynchrones.
8. Plan de mise à jour
Si vous clonez un composant depuis un projet partagé, définissez une process pour appliquer les mises à jour : validation, tests d’intégration et éventuelle adaptation des breaking changes.
Attention aux collisions d'identifiants et d'état
Lors de la copie, renommez les identifiants globaux (ex. clés locales, noms d’état partagés) pour éviter conflits avec d’autres composants du projet.
Workflow 3 — Intégration des composants dans une SPA (SSR désactivé)
1. Vérifier le contexte d'exécution
Confirmez que votre application fonctionne comme SPA (rendu côté client). Ces composants attendent de manipuler le DOM côté client (ex. lecture/écriture de préférence thème).
2. Initialiser le ThemeToggle côté client
Au chargement de l’application, restaurez la préférence de thème depuis le stockage local utilisateur et appliquez-la. Assurez-vous que cette initialisation s’effectue uniquement côté client pour éviter des différences d’état à l’affichage.
3. Charger les composants de façon performante
Pour réduire le poids initial, chargez les dialogues et composants lourds au moment où l’utilisateur peut en avoir besoin (ex. au clic sur “Nouveau projet”) plutôt que systématiquement au chargement.
4. Gérer la navigation et l'état
Si votre SPA navigue entre routes, conservez les états essentiels (ex. préférences thème) de façon persistante. Pour les dialogues, utilisez un état local par page ou un gestionnaire partagé si la modale doit survivre à la navigation.
5. Contrôler la cohérence visuelle
Testez les composants dans différents écrans : mobile, tablette, desktop. Vérifiez que les modales s’adaptent et que les Loaders n’empêchent pas l’interaction (ex. bouton Annuler accessible).
6. Scénarios hors-ligne et erreurs
Anticipez les pertes de réseau : permettez d’annuler, de réessayer et de conserver les données du formulaire temporairement (sauvegarde locale) pour éviter perte d’entrée utilisateur.
7. Tests d'acceptation
Validez les scénarios de bout en bout avec des tests utilisateur ou scénarios manuels : ouvrir/fermer modale, soumission réussie/échouée, bascule thème et rechargement de la page.
Ne pas activer le SSR pour ces composants sans adaptation
Si vous activez le rendu côté serveur, des différences entre l’affichage serveur et client peuvent produire des erreurs de synchronisation visuelle (hydratation). Si vous devez utiliser SSR, encapsulez l’initialisation en mode strictement client.
Copier un composant vous donne liberté de l’ajuster. Avantages : adaptation rapide, pas de dépendance externe. Inconvénients : maintenance manuelle à long terme.
Avant : duplication complète d’un composant (styles et logique mélangés), risques de divergence et de bugs.
Après : wrapper léger + adaptation locale des styles ; centralisation des utilitaires (thème, loaders) ; tests et documentation.
Cas d’usage concrets et patterns
- Utiliser une seule Dialog paramétrable pour “Créer / Éditer / Cloner” : changez uniquement le titre, les labels et la payload.
- Placer un Loader local dans une zone (bouton, section) plutôt qu’un overlay global quand seule une partie est en attente.
- ThemeToggle : sauvegarder la préférence dans le stockage local et appliquer immédiatement lors du chargement côté client pour éviter un flash d’apparence inversée.
Faire des versions 'contrôlées' de vos composants
Lorsqu’un composant est réutilisé dans plusieurs contextes, proposez deux modes : contrôlé (l’état est géré par le parent) et non-contrôlé (l’état interne). Cela rend l’intégration flexible pour diverses architectures.
Surveiller la taille du bundle
Multiplier copies et dépendances peut alourdir le bundle client. Regroupez les utilitaires partagés et préférez le chargement différé pour les composants rares.
Frequently Asked Questions
3
Composants principaux
SPA
Conçu pour
Accessibility
Priorité
Checklist rapide avant mise en production
- Tester dialogues sur mobile et desktop.
- S’assurer que ThemeToggle restaure le thème côté client.
- Vérifier que tous les Loaders ont une issue de timeout / retry.
- Documenter les composants copiés et leurs adaptations.
Besoin d'aide pour intégrer ces composants ?
Si vous souhaitez une revue d’intégration ou une aide pour transformer ces composants en un module réutilisable, sollicitez une session d’accompagnement.