diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index d94c7f7..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "env": { - "browser": true, - "es6": true, - "node": true, - "commonjs": true - }, - "parser": "babel-eslint", - "extends": [ - "eslint:recommended", - "plugin:react/recommended" - ], - "globals": { - "Atomics": "readonly", - "SharedArrayBuffer": "readonly" - }, - "parserOptions": { - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2018, - "sourceType": "module" - }, - "plugins": [ - "react" - ], - "settings": { - "react": { - "version": "detect" - } - }, - "rules": { - "no-console": "off" - } -} diff --git a/.eslintrc.json.bak b/.eslintrc.json.bak new file mode 100644 index 0000000..15b1ed9 --- /dev/null +++ b/.eslintrc.json.bak @@ -0,0 +1,3 @@ +{ + "extends": "next" +} diff --git a/components/Bulles.jsx b/components/Bulles.jsx index 5e5d23d..b5035ad 100644 --- a/components/Bulles.jsx +++ b/components/Bulles.jsx @@ -1,166 +1,163 @@ import React from 'react'; -import plotly from 'plotly.js/dist/plotly'; -import createPlotComponent from 'react-plotly.js/factory'; -import LoadingScreen from "./LoadingScreen"; +// import Plot from 'react-plotly.js'; -function Bulles (props) { +function Bulles(props) { -// récupération des résultats de l'élection et stockage en tableau -const votesBrut = (Object.values(props))[0]; + // 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']; + // 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 -----------// + //----------- Traitement des données -----------// -// fonction d'inversement des éléments de tableau -function inverse(obj){ + // fonction d'inversement des éléments de tableau + function inverse(obj) { var retobj = {}; - for(var key in obj){ + 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) { + // 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)]); + 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 = {}; + // 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]; -} + // 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); + // 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 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 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); + // 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); + // 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); + // 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) + // 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); + // 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 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); + //----------- 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. - }} -/> -// -// ) : ( -// -// )} -//
-) + return ( + +
TBD
+ + //
+ // {!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; \ No newline at end of file +export default Bulles; diff --git a/components/Modal.jsx b/components/Modal.jsx index c502450..f4b6f31 100644 --- a/components/Modal.jsx +++ b/components/Modal.jsx @@ -1,53 +1,54 @@ -import React, { useEffect, useRef, useState } from "react"; +import React, {useEffect, useRef, useState} from "react"; import ReactDOM from "react-dom"; import styled from "styled-components"; -const Modal = ({ show, onClose, children, title }) => { - - const handleCloseClick = (e) => { - e.preventDefault(); - onClose(); - }; - - const modalContent = show ? ( - - - - - x - - - {title && {title}} - {children} - - - ) : null; - - - return ( - modalContent - ); - +const Modal = ({show, onClose, children, title}) => { + + const handleCloseClick = (e) => { + e.preventDefault(); + onClose(); }; - - const StyledModalBody = styled.div` + + const modalContent = show ? ( + + + + + x + + + {title && {title}} + {children} + + + ) : null; + + + return ( + modalContent + ); + +}; + +const StyledModalBody = styled.div` padding-top: 10px; `; - - const StyledModalHeader = styled.div` + +const StyledModalHeader = styled.div` display: flex; justify-content: flex-end; font-size: 25px; `; - - const StyledModal = styled.div` + +const StyledModal = styled.div` background: white; width: 500px; height: 600px; border-radius: 15px; padding: 15px; `; - const StyledModalOverlay = styled.div` +const StyledModalTitle = styled.div +const StyledModalOverlay = styled.div` position: absolute; top: 0; left: 0; @@ -58,5 +59,5 @@ const Modal = ({ show, onClose, children, title }) => { align-items: center; background-color: rgba(0, 0, 0, 0.5); `; - - export default Modal; \ No newline at end of file + +export default Modal; diff --git a/components/form/AddPicture.jsx b/components/form/AddPicture.jsx index b858e18..3f838db 100644 --- a/components/form/AddPicture.jsx +++ b/components/form/AddPicture.jsx @@ -1,37 +1,37 @@ -import { useState } from "react"; +import {useState} from "react"; export default function AddPicture(props) { - const [image, setImage] = useState(null); - const [createObjectURL, setCreateObjectURL] = useState(null); - - const uploadToClient = (event) => { - if (event.target.files && event.target.files[0]) { - const i = event.target.files[0]; - - setImage(i); - setCreateObjectURL(URL.createObjectURL(i)); - } - }; - - return ( -
-
-
- -
-
-
-

Photo (facultatif)

- -

Importer une photo.
format : jpg, png, pdf

-
- - -
-
+ const [image, setImage] = useState(null); + const [createObjectURL, setCreateObjectURL] = useState(null); + + const uploadToClient = (event) => { + if (event.target.files && event.target.files[0]) { + const i = event.target.files[0]; + + setImage(i); + setCreateObjectURL(URL.createObjectURL(i)); + } + }; + + return ( +
+
+
+
+
+
+

Photo (facultatif)

+ +

Importer une photo.
format : jpg, png, pdf

+
+ + ddpi +
+
+
- ); -} \ No newline at end of file + ); +} diff --git a/components/form/CandidateField.jsx b/components/form/CandidateField.jsx index 1222a1f..973e9d3 100644 --- a/components/form/CandidateField.jsx +++ b/components/form/CandidateField.jsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react' +import {useState, useEffect} from 'react' import ButtonWithConfirm from "./ButtonWithConfirm"; import TrashButton from "./TrashButton"; import { @@ -10,7 +10,7 @@ import { InputGroupAddon, Button, Modal, ModalHeader, ModalBody, ModalFooter } from "reactstrap"; -import { useTranslation } from "react-i18next"; +import {useTranslation} from "react-i18next"; import { sortableHandle } from "react-sortable-hoc"; @@ -19,72 +19,72 @@ import AddPicture from "@components/form/AddPicture"; import { faPlus, faCogs, faCheck, faTrash } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -const DragHandle = sortableHandle(({ children }) => ( +import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; +const DragHandle = sortableHandle(({children}) => ( {children} )); -const CandidateField = ({ avatar, label, description, candIndex, onDelete, onAdd, ...inputProps }) => { - const { t } = useTranslation(); +const CandidateField = ({avatar, label, description, candIndex, onDelete, onAdd, ...inputProps}) => { + const {t} = useTranslation(); const [visibled, setVisibility] = useState(false); const toggle = () => setVisibility(!visibled) const [selected, setSelectedState] = useState(false); - const [className , setClassName] = useState("none"); - const [trashIcon , setTrashIcon] = useState("none"); - const [plusIcon , setPlusIcon] = useState("none"); - + const [className, setClassName] = useState("none"); + const [trashIcon, setTrashIcon] = useState("none"); + const [plusIcon, setPlusIcon] = useState("none"); + const addCandidate = () => { toggle(); - onAdd(); + onAdd(); } useEffect(() => { setClassName("candidateButton " + (selected ? "candidateAdded" : "")) -}, [selected] ); -useEffect(() => { - setPlusIcon("mr-2 cursorPointer " + (selected ? "trashIcon" : "")) -}, [selected] ); -useEffect(() => { - setTrashIcon("trashIcon " + (selected ? "displayTrash" : "")) -}, [selected] ); - -const addFunction = () => { - addCandidate(); - setSelectedState(!selected); -} + }, [selected]); + useEffect(() => { + setPlusIcon("mr-2 cursorPointer " + (selected ? "trashIcon" : "")) + }, [selected]); + useEffect(() => { + setTrashIcon("trashIcon " + (selected ? "displayTrash" : "")) + }, [selected]); + + const addFunction = () => { + addCandidate(); + setSelectedState(!selected); + } const [image, setImage] = useState(null); - const [createObjectURL, setCreateObjectURL] = useState(null); + const [createObjectURL, setCreateObjectURL] = useState(null); + + const uploadToClient = (event) => { + if (event.target.files && event.target.files[0]) { + const i = event.target.files[0]; - const uploadToClient = (event) => { - if (event.target.files && event.target.files[0]) { - const i = event.target.files[0]; + setImage(i); + setCreateObjectURL(URL.createObjectURL(i)); - setImage(i); - setCreateObjectURL(URL.createObjectURL(i)); - - - } - }; - + } + }; + + return (
- -
- - -
+ +
+ + +
{
Ajouter un participant

Ajoutez une photo, le nom et une description au candidat.

-
-
- -
-
-
-

Photo (facultatif)

- -

Importer une photo.
format : jpg, png, pdf

-
- - -
-
-
+
+
+ +
+
+
+

Photo (facultatif)

+ +

Importer une photo.
format : jpg, png, pdf

+
+ + +
+
+ @@ -153,8 +153,8 @@ const addFunction = () => { autoFocus /> - - + + + + @@ -72,7 +72,7 @@ const Home = () => { - +
@@ -93,7 +93,7 @@ const Home = () => { className="d-block mx-auto" />

Gratuit

-

Envoyez des invitations par courriel sans limite d'envoi

+

Envoyez des invitations par courriel sans limite d`'`envoi

{
- + - +

Une expérience de vote démocratique et intuitive

@@ -128,7 +128,7 @@ const Home = () => { className="btn btn-block btn-secondary btn-sectionTwoHome" > Découvrez le jugement majoritaire - +
@@ -136,7 +136,7 @@ const Home = () => {

Partagez l’application Mieux voter

- +