import React from "react"; function Bulles(props) { // récupération des résultats de l'élection et stockage en tableau const votesBrut = Object.values(props)[0]; // déclaration et initialisation des mentions et couleurs const mentionsBrut = [ "Passable", "Assez bien", "Bien", "Très bien", "Excellent", ]; const couleursBrut = ["#BB9C42", "#AABA44", "#DCDF44", "#B3D849", "#61AD45"]; //----------- Traitement des données -----------// // fonction d'inversement des éléments de tableau function inverse(obj) { var retobj = {}; for (var key in obj) { retobj[obj[key]] = key; } return retobj; } // fonction de réduction d'amplitude permettant de conserver une représentation ordinale du nombre de votes sans décalage visuel trop important /* Pattern de calcul : Soient Ai, Bi, Ci, Di, Ei les nombres de votes initiaux fournis dans le tableau classé par ordre mélioratif de mention (de Passable à Excellent). Il vient : A = 1 B = <{[1 + (Bi/Ai)] / 40} * A> C = <{[1 + (Ci/Bi)] / 40} * B> D = <{[1 + (Di/Ci)] / 40} * C> E = <{[1 + (Ei/Di)] / 40} * D> */ function redAmpli(tab) { var nvTab = []; nvTab[0] = 100; for (i = 1; i < tab.length; i++) { nvTab[i] = (1 + tab[i] / tab[i - 1] / 40) * nvTab[i - 1]; } return nvTab; } // déclaration de l'objet votes-mention et votes-couleur var votesMentionNonOrdonnes = {}; var votesCouleurNonOrdonnes = {}; // initialisation votes-mention ordonnés croissants for (var i = 0; i < mentionsBrut.length; i++) { votesMentionNonOrdonnes[votesBrut[i]] = mentionsBrut[i]; votesCouleurNonOrdonnes[votesBrut[i]] = couleursBrut[i]; } // déclaration des mentions-votes par ordre croissant var votesMentionOrdonnes = inverse(votesMentionNonOrdonnes); var votesCouleurOrdonnes = inverse(votesCouleurNonOrdonnes); // vérification du nombre de votes classés par ordre croissant et passés initialement en propriétés au composant console.log( "Les données transmises au composant concernant le nombre de votes par mention sont : " ); console.log(votesBrut); // vérification des mentions destinées à être associées aux votes et ordonnées initialement par ordre mélioratif console.log( "Les mentions des votes sont classées initialement par ordre mélioratif de la façon suivante :" ); console.log(mentionsBrut); // vérification du nombre de votes classés par ordre croissant console.log( "Les mentions-votes classées par ordre croissant de votes sont : " ); console.log(votesMentionOrdonnes); // séparation des mentions et des votes const mentions = Object.keys(votesMentionOrdonnes); const votes = Object.values(votesMentionOrdonnes); const couleurs = Object.keys(votesCouleurOrdonnes); // vérification des mentions et des votes prêts à être traités pour la représentation graphique console.log( "La liste des mentions issue du classement par ordre croissant de votes est :" ); console.log(mentions); console.log( "La liste du nombre de votes correspondant, classée par ordre croissant, est :" ); console.log(votes); // déclaration et initialisation des rayons de bulle pour la représentation graphique var rayons = []; rayons = redAmpli(votes); // vérification des rayons console.log( "La liste des rayons à représenter graphiquement est la suivante :" ); console.log(rayons); // déclaration et initialisation des textes des bulles const texteBulle1 = (mentions[0] + "
" + votes[0] + " votes").toString(); const texteBulle2 = (mentions[1] + "
" + votes[1] + " votes").toString(); const texteBulle3 = (mentions[2] + "
" + votes[2] + " votes").toString(); const texteBulle4 = (mentions[3] + "
" + votes[3] + " votes").toString(); const texteBulle5 = (mentions[4] + "
" + votes[4] + " votes").toString(); // déclaration et initialisation d'une instance de graphique en bulles // const Plot = createPlotComponent(plotly); const Plot = require("react-plotly.js").default; //---------------------------------------------// //----------- Affichage des données -----------// const [loading, setLoading] = React.useState(true); React.useEffect(() => { setTimeout(() => setLoading(false), 3000); }); return ( //
// {!loading ? ( // %{text}" + "", text: [ texteBulle1, texteBulle2, texteBulle3, texteBulle4, texteBulle5, ], showlegend: false, mode: "markers", marker: { color: [ couleurs[0], couleurs[1], couleurs[2], couleurs[3], couleurs[4], ], size: rayons, }, }, ]} layout={{ width: 600, height: 600, title: "Nombre de voix par candidat", xaxis: { showgrid: false, showticklabels: false, showline: false, zeroline: false, range: [0, 1], }, yaxis: { showgrid: false, showticklabels: false, showline: false, zeroline: false, range: [0, 1], }, }} config={{ displayModeBar: false, // this is the line that hides the bar. }} /> // // ) : ( // // )} //
); } export default Bulles;