Il s'agit d'une version statique de l'intranet d'A. Jonquet, certaines fonctionnalités sont donc potentiellement non fonctionnelles.
Rejoindre la version dynamique 🔒
React
Navigation

Ajout de notifications

Vous allez poursuivre le TP précédent en ajoutant une bibliothèque de gestion des données de l'application. Avec comme cadre d'utilisation la mise en place de notifications, permettant à l'utilisateur d'être informé des actions réalisées en arrière-plan.

Remarque importante

Les notes des TP seront obtenues à partir de vos dépôts Git, vous devrez donc prendre grand soin de la qualité de ces dépôts et de leurs « commits ».

De manière similaire, les descriptions de vos « commits » devront être claires et informatives, afin de permettre l'évaluation de la progression de votre travail.

Objectifs de la séance

  • Mise en place de Redux
  • Utilisation de Redux Toolkit
  • Découverte des bonnes pratiques de gestion des données
  • Approfondissement de l'utilisation de MUI

Installation de Redux Toolkit

Redux est une solution largement utilisée dans l'écosystème React, cependant sa mise en place peut être un peu complexe de prime abord. Et elle nécessite de nombreux choix sur l'organisation et la gestion des données. De plus Redux permet d'ajouter des greffons permettant de simplifier certains aspects de son utilisation et il n'est pas toujours évident de faire les choix techniques d'utiliser des modules tiers.

Pour simplifier la mise en place, les créateurs de Redux proposent une boîte à outil fournissant des outils simplifiant l'écriture du gestionnaire de données et fournissant un ensemble de greffons communément reconnus pour simplifier le travail des développeurs.

Vous installerez donc la boîte à outils Redux Toolkit (RTK) conjointement au paquet permettant l'intégration de Redux dans React.

Travail à réaliser
  • Installation de RTK et react-redux.

Ajout d'un magasin de données

Afin d'améliorer les performances de l'application et simplifier la gestion des gros magasins de données, RTK propose d'organiser le magasin de données en tranches indépendantes.

Vous aller donc mettre en place une tranche de données, dans le fichier « src/store/slices/notifications.js », permettant de gérer les notifications de l'application.

RTK vous laisse assez de liberté pour l'organisation du code des magasins de données. Cependant, la base de code peu rapidement devenir compliquée si elle n'est pas un peu organisée. Dans le cadre du TP vous définirez toutes les tranches de données dans un sous répertoire « src/store/slices » et ces tranches de données seront ensuite agréger dans un magasin unique exposé dans le fichier « src/store/index.js ».

Vous commencerez donc par créer la tranche de données à l'aide de la fonction createSlice dans le fichier « src/store/slices/notifications.js » qui exposera par défaut la tranche de données généré.

Celle-ci contiendra deux informations :

  • La liste des notifications, un tableau des données des notifications, une notification étant définie par les propriétés suivantes :
    • un identifiant, un nombre, obligatoire,
    • le contenu de la notification, une chaîne de caractères, obligatoire,
    • un type de notification, une chaîne de caractères, correspondant aux types d'affichage des messages de la bibliothèque MUI
    • et un drapeau identifiant si la notification est affichée, un booléen, une notification est créée visible.
  • Le dernier (ou prochain) identifiant utilisé lors de la création d'une notification.

Le « reducer » permet de définir les actions supportées pour intéragir avec le magasin de données. Dans un premier temps, vous ne proposerez qu'une action permettant de créer une notification.

Le principe des « reducers » impose de faire attention à l'immuabilité du magasin de données afin de garantir l'intégrité des données, en effet les « reducers » doivent être des fonctions pures. Pour simplifier la gestion des magasins de données, par défaut, RTK utilise Immer comme outil permettant de prendre soin de l'immuabilité des données à votre place. Vous pouvez donc l'utilisé pour simplifier l'écriture de vos « reducers ».

Vous penserez à exporter votre tranche de données par défaut afin de pouvoir l'utiliser dans le magasin de données, ainsi que l'action générée par la fonction createSlice afin de pouvoir les utiliser dans les composants de l'application.

Travail à réaliser
  • Mise en place d'une tranche de données.
  • Ajout d'une action pour la création de notification.

Création et mise à disposition du magasin de données

Maintenant que votre première tranche de données est créée, vous allez créer le magasin de données de l'application dans le fichier « src/store/index.js ». Vous utiliserez la fonction configureStore pour créer le magasin que vous exporterez par défaut.

Vous pourrez ensuite utiliser le composant Provider de la bibliothèque react-redux afin de rendre disponible votre magasin de données à l'ensemble des composants de votre application.

Travail à réaliser
  • Création du magasin de données.
  • Mise à disposition du magasin de données pour l'application.

Utilisation du magasin de données

Vous allez créer un nouveau composant NotificationsButton permettant de gérer l'affichage des notifications dans l'application.

Ce composant se composera pour l'instant d'un bouton d'affichage des notifications, celui-ci comportera un badge affichant le nombre de notifications de l'application.

Pour obtenir le nombre de notifications, vous récupérerez le tableau de notification à l'aide du hook useSelector.

Et enfin, vous pouvez ajouter une fonction provoquant la création de notifications lors du clic sur l'un des boutons de la zone principale de l'application à l'aide du hook useDispatch. Chaque bouton créera une notification de type différent.

Vous devriez obtenir un rendu similaire à l'illustration suivante :

Travail à réaliser
  • Créer des notifications lors du clic sur les boutons de la zone principale.
  • Créer le composant NotificationsButton.
  • Afficher le nombre de notifications sur le bouton d'affichage des notifications.

Affichage des notifications créées

Maintenant que votre magasin de données est fonctionnel, vous pouvez améliorer l'affichage des notifications.

Vous allez créer un nouveau composant Toast dont le rôle sera d'afficher les notifications de l'application lors de leur création. Conformément aux recommandations du Material Design, vous n'afficherez que la première notification visible à l'aide des composants Snackbar et Alert.

Un clic sur le toast ou l'utilisation de la touche d'échappement provoquera la disparition du toast. Dans tous les cas, elle disparaîtra automatiquement après un certain délai, que vous pourrez recevoir sous forme de props pour rendre votre composant plus configurable. Le toast proposera aussi la suppression directe de la notification à l'aide du clic sur la croix du toast.

Pour répondre à ces actions, vous ajouterez deux nouveaux « reducers » à la tranche de données des notifications :

  • cacher une notification par son id,
  • supprimer une notification par son id,

Vous pourrez ensuite créer les fonctions de rappel « dispatchant » ces actions dans le composant NotificationsButton et vous pourrez les transmettre au composant Toast à l'aide de props.

Travail à réaliser
  • Création du composant Toast.
  • Ajout des actions permettant de cacher et supprimer une notification.
  • Ajout d'un Toast au bouton de notifications.

Affichage des notifications de l'application

Comme vous pouvez le constater avec sur le badge du bouton de notifications à la fin de la vidéo précédente, des notifications peuvent ne plus être affichées, mais être encore présentes dans l'application.

Vous allez ajouter un panneau latéral permettant d'afficher toutes les notifications de l'application, même celles cachées. Vous prendrez soin de gérer le défilement lorsqu'il y a de nombreuses notifications. Un clic sur une notification, dans ce panneau, la supprimera. Les notifications seront encore affichées à l'aide du composant Alert.

Pour améliorer l'ergonomie de votre application, vous ajouterez aussi un bouton permettant à l'utilisateur de supprimer toutes les notifications en une fois.

Ce panneau sera affiché lors du clic sur le bouton de notifications du pied de page de l'application.

Vous devriez obtenir un rendu similaire à l'illustration suivante :

Travail à réaliser
  • Ajouter un panneau latéral affichant les notifications.
  • Dans le panneau latéral, permettre la suppression d'une ou de toutes les notifications.

Derniers ajustements

Si vous avez suivi le TP, vous devriez remarquer que si vous ouvrez le panneau latéral en même que des notifications (Toast) sont affichées, celles-ci sont affichées au-dessus du panneau. Vous corrigerez cet affichage en cachant toutes les notifications lorsque le panneau est ouvert.

De même, lors de la suppression de toutes les notifications, il serait judicieux de cacher le panneau latéral.

Travail à réaliser
  • Masquer les notifications lorsque le panneau latéral est ouvert.
  • Fermer le panneau latéral lors de la suppression des toutes les notifications.
A. Jonquet DUT-INFO/REIMS