Les Design Systems (ou systèmes de conception) mettent à disposition
des ensembles de composants webs documentés que les développeurs peuvent
utiliser . Ils offrent plusieurs avantages pour le développement des
applications, comme la garantie d'une cohérence visuelle ou encore un gain de temps car il vous évite de concevoir chaque élément de
l'interface en repartant de zéro.
Cette semaine, nous continuons notre
série de tutoriels sur l'API JavaScript d'ArcGIS
avec un hors-série consacré au
Design System d'Esri : Calcite. Nous allons voir ensemble comment intégrer rapidement un composant à notre
application en le personnalisant et en le reliant à une action. Voici le
résultat que nous obtiendrons à l'issue de cette étape :
L'utilisateur pourra choisir d'afficher ou non les arbres issus du fond de
carte, en cliquant sur un bouton de type toggle switch. Comme d'habitude, vous
pouvez suivre le tutoriel pas à pas ci-dessous pour obtenir le même résultat,
ou bien consulter le code et en modifier interactivement les paramètres dans
ce CodePen.
Présentation du Calcite Design System
Calcite est le Design System mis à disposition par Esri, dont la
première version de production date de début 2023.
Esri a décidé de mettre à disposition les composants auxquels ils font appel
pour développer leurs propres applications à travers ce Design System. Il
comprend un
kit d'interface utilisateur, des
icônes, des
schémas de couleurs
et une
bibliothèque de composants web.
Cette bibliothèque inclut de nombreux éléments d'interface utilisateur :
différents types de boutons, des panneaux, des accordéons, des alertes, des
loaders, etc. dont vous pouvez retrouver la liste complète
ici. Vous pouvez intégrer ces différents composants à votre application afin de
ne pas avoir à redévelopper par vous-même leur comportement et leur style,
tout en gardant la possibilité de les personnaliser pour les adapter à votre
charte graphique.
Exemple d'application utilisant différents composants de Calcite |
Personnaliser un composant
Pour notre application, nous aurons besoin du composant
Switch, qui est un bouton présentant deux états "on" et "off". C'est un composant
idéal pour les choix booléens ; il sera donc parfait pour notre cas d'usage,
où nous voulons donner le choix à l'utilisateur d'afficher ou non une
couche
L'aide en ligne nous permet d'accéder au code
permettant d'intégrer ce composant. Mais avant de le faire, nous allons nous
intéresser aux options de personnalisation interactives qui vont nous
permettre de compléter l'extrait de code que nous devrons ajouter, afin que le
bouton soit directement configuré comme nous le souhaitons.
Dans la partie à droite de l'échantillon, nous pouvons accéder aux propriétés
du composant via la fonctionnalité "properties". Dans l'exemple
ci-dessous, j'ai changé par exemple son état pour qu'il soit coché par défaut,
j'ai modifié sa taille (vous avez le choix entre "s","m" et "l") et je lui ai
donné un nom (notez que j'ai fait ceci à titre de démonstration, mais que nous
ne nous en servirons pas pour notre application). Le code en bas se met à jour
automatiquement pour s'adapter à ces modifications.
Toujours dans le panneau de droite, vous avez accès à d'autres fonctionnalités qui peuvent vous permettre de personnaliser et de comprendre davantage la structure du composant :
Toujours dans le panneau de droite, vous avez accès à d'autres fonctionnalités qui peuvent vous permettre de personnaliser et de comprendre davantage la structure du composant :
- La fonctionnalité "slot" vous permet de mettre en avant les emplacements des différents éléments des composants complexes afin de mieux appréhender leur structure ;
- La fonctionnalité "variables" vous permet d'accéder aux propriétés CSS de certains composant possédant leurs styles spécifiques ;
- La fonctionnalité "translations" vous permet de localiser des composants affichant du texte, des dates ou des chiffres afin de les mettre au format français par exemple.
- Enfin, la fonctionnalité "theming" vous permet d'appliquer un thème général aux composants. Vous pouvez choisir le mode (clair ou sombre) et entre plusieurs thèmes prédéfinis, ou bien importer les couleurs propres à votre charte graphique. Vous pouvez également sauvegarder vos choix pour qu'ils s'appliquent par défaut lorsque vous cherchez des composants sur l'aide en ligne.
Nous allons utiliser cette dernière fonctionnalité pour obtenir un extrait de
code permettant d'avoir un bouton Switch aux couleurs du reste de notre
application. Nous allons modifier les codes hex suivants :
- --calcite-ui-brand: #7b656f;
- --calcite-ui-brand-hover: #473b40;
Ajouter le composant au code
Les composants sont toujours composés d'une partie HTML, à laquelle s'ajoute
une partie CSS si vous avez modifié leur style, et enfin certains composants
ont une partie JavaScript si leur comportement le nécessite. Ici, nous allons
ajouter ensemble du HTML et du CSS à notre code.
Référencer le Design System
Pour commencer, notre application doit être capable d'accéder aux ressources
de Calcite. Nous allons donc commencer par référencer le design system dans le
HTML au sein de la balise <head> :
<script type="module" src="https://js.arcgis.com/calcite-components/1.4.3/calcite.esm.js"></script>
Ajouter le composant au HTML
Dans la partie sample de l'aide en ligne, naviguez en utilisant les boutons du
bas pour obtenir le code HTML du composant. Ici, il est très simple :
<calcite-switch></calcite-switch>
Vous n'avez qu'à coller ce bout de code dans le <body> de votre HTML
pour que le composant apparaisse. Afin qu'il s'affiche au bon endroit de notre
application, rendez-vous au sein de la balise <div class="mentions">,
qui contient toutes les mentions s'affichant en bas à gauche de l'application.
A l'intérieur de celle-ci se trouve une balise <h4> qui englobe
elle-même toutes les mentions. En dessous de la balise <a> contenant la
mention au PORTAIL OPEN DATA PARIS | DATA, sautez deux lignes avec deux
balises <br/>. Enfin, ajoutez le code du composant, que vous devriez
voir apparaître en bas à gauche de votre application, en-dessous de toutes les
mentions. Afin que l'utilisateur comprenne ce à quoi sert le bouton, ajoutez
le texte AFFICHER TOUS LES ARBRES entre la balise de saut de ligne et la
balise du composant.
Toujours dans la partie sample de l'aide en ligne, passez maintenant à
l'option CSS. Voici à quoi ressemble le code, qu'il va falloir adapter pour
qu'il fonctionne dans notre application :
.custom-example-theme {
--calcite-ui-brand: #7b656f;
--calcite-ui-brand-hover: #473b40;
}
Pour l'instant, le code apporte une modification pour les composants inclus
dans une balise de la classe "custom-example-theme". Dans notre HTML, nous
avons ajouté le composant au sein d'une balise <div> dont la classe
était "mentions". Il suffit donc de modifier le CSS en changeant le nom de la
classe pour mentions :
.mentions {
--calcite-ui-brand: #7B656F;
--calcite-ui-brand-hover: #473B40;
}
Relier le composant à une fonction
Le bouton est rajouté, il est de la bonne couleur et s'active parfaitement...
Mais pour l'instant, vous avez beau cliquer dessus pour l'activer et le
désactiver, rien ne se passe dans l'application ! Nous allons le relier à une
fonction, pour que le fait de cliquer dessus entraîne une action dans la
carte.
De retour dans le code JavaScript de notre application, nous allons nous
intéresser au code que nous avions ajouté à la fin du troisième tutoriel de la
série pour cacher la couche des arbres de la basemap :
let treeLayer = map.basemap.referenceLayers.find(function (layer) {
return layer.id === "1872932aeb4-layer-48";
});
treeLayer.visible = false;
Pour rappel, nous avons accédé à la couche contenant les arbres et l'avons
stockée dans la variable treeLayer, puis nous avons accéder à sa propriété
'visible' et l'avons définie sur false pour que la couche ne s'affiche pas par
défaut.
Nous allons maintenant créer une constante changeVisibility définie comme une
fonction fléchée
qui va inverser la valeur de la propriété 'visible' de la couche
treeLayer à chaque fois qu'elle est appelée (la propriété passera donc de true
à false et inversement) :
const changeVisibility = () => {
treeLayer.visible = !treeLayer.visible;
};
Enfin, nous allons relier cette fonction à notre composant Switch :
Cette ligne de code recherche un élément du DOM avec l'identifiant ou la classe "calcite-switch", ici le composant de type Switch que nous avons rajouté à l'étape précédente. Lorsque cet élément subit un changement spécifique (donc quand l'utilisateur l'active ou le désactive en cliquant dessus), l'événement "calciteSwitchChange" est déclenché grâce à l'écouteur .addEventListener(), ce qui active la fonction changeVisibility créée juste avant qui s'exécute en conséquence.
document.querySelector("calcite-switch").addEventListener("calciteSwitchChange", changeVisibility);
Et voilà, votre bouton devrait être fonctionnel !
Nous en avons fini pour cette semaine. Vous pouvez retrouver l'intégralité du code que nous avons écrit ensemble jusqu'ici sur Github ou sur CodePen. Nous nous retrouvons la semaine prochaine pour l'ultime épisode de cette série, où nous ajouterons les derniers détails à notre application en modifiant la couleur de sélection des entités, en contraignant les niveaux de zoom maximum et minimum et en réutilisant ce que nous venons de voir pour ajouter un loader lors du chargement. En attendant, n'hésitez pas à retrouver les autres épisodes de cette série si vous les avez manqués.
Aucun commentaire:
Enregistrer un commentaire