6.4 KiB
6.4 KiB
Skeleton Loaders et Toast Notifications
Auteur : Équipe 4NK Date : 2025-01-27
Objectif
Implémenter les deux premières améliorations UX de priorité haute :
- Skeleton loaders - Remplacer les messages "Loading..." par des skeleton loaders
- Toast notifications - Intégrer le système de toast pour les confirmations visuelles
Impacts
Skeleton loaders
- Expérience utilisateur : Amélioration de la perception de performance en affichant la structure du contenu pendant le chargement
- Cohérence visuelle : Remplacement des messages textuels par des éléments visuels cohérents avec le design system
- Feedback visuel : Animation subtile pour indiquer le chargement actif
Toast notifications
- Feedback utilisateur : Confirmations visuelles immédiates après les actions importantes
- Accessibilité : Toasts avec
role="alert"etaria-live="polite"pour les screen readers - Expérience utilisateur : Retour visuel clair et non intrusif pour les actions réussies
Modifications
Skeleton loaders
-
components/ArticlesList.tsx:- Ajout de
ArticleCardSkeletonqui reproduit la structure d'une carte d'article - Remplacement de
LoadingStatepar un affichage de 3 skeletons
- Ajout de
-
components/AuthorsList.tsx:- Ajout de
AuthorCardSkeletonqui reproduit la structure d'une carte d'auteur - Remplacement de
LoadingStatepar un affichage de 4 skeletons en grille
- Ajout de
-
components/UserArticlesList.tsx:- Ajout de
ArticleCardSkeleton(identique à ArticlesList) - Remplacement de
ArticlesLoadingpar un affichage de 3 skeletons - Ajout de l'import
Skeleton
- Ajout de
-
components/authorPage/AuthorPageContent.tsx:- Extraction de
AuthorPageLoadingSkeleton,AuthorPageError,AuthorPageNotFoundpour respectermax-lines-per-function - Remplacement du message de chargement par des skeletons représentant la structure de la page auteur
- Extraction de
-
components/authorPresentationEditor/AuthorPresentationEditor.tsx:- Remplacement de
LoadingNoticepar des skeletons représentant la structure du formulaire - Ajout de l'import
Skeleton
- Remplacement de
-
components/DocsContent.tsx:- Remplacement du message de chargement par des skeletons représentant la structure du contenu markdown
- Suppression de l'import
tnon utilisé
-
components/FundingGauge.tsx:- Remplacement de
FundingGaugeLoadingpar des skeletons représentant la structure du gauge - Ajout de l'import
Skeleton
- Remplacement de
Toast notifications
-
components/ui/ToastContainer.tsx(nouveau) :- Création du système de gestion des toasts avec
ToastProvideretuseToasthook - Gestion d'une pile de toasts avec suppression automatique après durée configurable
- Affichage des toasts en position fixe (top-right) avec z-index élevé
- Création du système de gestion des toasts avec
-
pages/_app.tsx:- Intégration du
ToastProviderdans l'application pour rendre les toasts disponibles globalement
- Intégration du
-
components/ArticleCard.tsx:- Ajout d'un toast de succès après déblocage réussi d'un article
- Extraction de
useArticleCardStatepour respectermax-lines-per-function - Extraction de
ArticleCardContentpour réduire le nombre de lignes deArticleCard
-
components/ArticleEditor.tsx:- Ajout d'un toast de succès après publication réussie via
useEffect - Extraction de
usePublishSuccessToastpour respectermax-lines-per-function
- Ajout d'un toast de succès après publication réussie via
-
components/PaymentModal.tsx:- Ajout d'un toast de succès après copie d'invoice dans
copyInvoiceToClipboard - Ajout d'un toast de succès après initiation du paiement dans
openWalletForInvoice - Mise à jour de
usePaymentModalStatepour acceptershowToastoptionnel
- Ajout d'un toast de succès après copie d'invoice dans
-
hooks/useArticlePayment.ts:- Refactoring pour accepter un objet de paramètres au lieu de paramètres individuels (respect de
max-params) - Ajout du support
showToastoptionnel pour afficher des toasts après paiement réussi - Propagation de
showToastà traverscheckPaymentAndUnlocketstartArticlePaymentFlow
- Refactoring pour accepter un objet de paramètres au lieu de paramètres individuels (respect de
-
locales/fr.txtetlocales/en.txt:- Ajout des clés de traduction pour les toasts :
article.unlock.success: "Article débloqué avec succès!" / "Article unlocked successfully!"article.publish.success: "Article publié avec succès!" / "Article published successfully!"payment.modal.copySuccess: "Facture copiée dans le presse-papiers" / "Invoice copied to clipboard"payment.modal.paymentInitiated: "Paiement initié avec succès" / "Payment initiated successfully"
- Ajout des clés de traduction manquantes pour
payment.modal.*déjà utilisées dans le code
- Ajout des clés de traduction pour les toasts :
Modalités de déploiement
-
Vérification :
npm run type-check: Aucune erreur TypeScriptnpm run lint: Aucune erreur de linting (4 warnings acceptables sur l'utilisation de l'index dans les keys pour les skeletons)
-
Déploiement :
- Utiliser les scripts de déploiement existants (
deploy.sh,update-from-git.sh,update-remote-git.sh) - Validation explicite requise avant déploiement
- Utiliser les scripts de déploiement existants (
Modalités d'analyse
-
Skeleton loaders :
- Vérifier visuellement que les skeletons apparaissent pendant le chargement des listes
- Vérifier que les animations de pulse sont fluides
- Vérifier que les skeletons disparaissent correctement une fois les données chargées
-
Toast notifications :
- Vérifier que les toasts apparaissent après :
- Déblocage réussi d'un article
- Publication réussie d'un article
- Copie d'invoice dans le presse-papiers
- Initiation du paiement avec Alby
- Vérifier que les toasts disparaissent automatiquement après 5 secondes (2 secondes pour la copie)
- Vérifier que les toasts peuvent être fermés manuellement via le bouton ×
- Vérifier l'accessibilité avec un screen reader (toasts annoncés via
aria-live="polite")
- Vérifier que les toasts apparaissent après :
Pages affectées
components/ArticlesList.tsxcomponents/AuthorsList.tsxcomponents/UserArticlesList.tsxcomponents/authorPage/AuthorPageContent.tsxcomponents/authorPresentationEditor/AuthorPresentationEditor.tsxcomponents/DocsContent.tsxcomponents/FundingGauge.tsxcomponents/ui/ToastContainer.tsx(nouveau)components/ArticleCard.tsxcomponents/ArticleEditor.tsxcomponents/PaymentModal.tsxhooks/useArticlePayment.tspages/_app.tsxlocales/fr.txtlocales/en.txtcomponents/ui/index.tsdocs/migration-status.md