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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

Encapsuler un composant dans un wrapper léger permet de traduire l’API et d’isoler les changements. Avantages : facilite mises à jour, réduit duplication. Inconvénients : overhead initial d’abstraction.

Si vous travaillez dans plusieurs projets, centraliser les composants dans un module partagé ou bibliothèque permet des mises à jour centralisées. Avantages : cohérence, maintenance simplifiée. Inconvénients : nécessite une gouvernance et versionning.

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.