import React, {Component} from "react"; import { Redirect } from 'react-router-dom'; import { resolve } from 'url'; import {Container, Row, Col, Collapse, Card, CardHeader, CardBody, Table} from "reactstrap"; import { grades } from '../../Util'; class Result extends Component { constructor(props) { super(props); this.state = { candidates: [], title: null, numGrades: 0, colSizeCandidateLg: 4, colSizeCandidateMd: 6, colSizeCandidateXs: 12, colSizeGradeLg: 1, colSizeGradeMd: 1, colSizeGradeXs: 1, collapseGraphics: false, collapseProfiles: false, redirectLost: false, electionGrades: grades }; } handleErrors = (response) => { if (!response.ok) { response.json().then( response => { this.setState(state => ({ redirectLost: '/unknown-election/' + encodeURIComponent(response)})); }) throw Error(response); } return response; } resultsToState = (response) => { const candidates = response.map(c => ({ id: c.id, label: c.name, profile: c.profile, grade:c.grade, score: c.score })); this.setState(state => ({candidates: candidates})); return response; } detailsToState = (response) => { const numGrades = response.num_grades; const colSizeGradeLg = Math.floor((12 - this.state.colSizeCandidateLg) / numGrades); const colSizeGradeMd = Math.floor((12 - this.state.colSizeCandidateMd) / numGrades); const colSizeGradeXs = Math.floor((12 - this.state.colSizeCandidateXs) / numGrades); this.setState(state => ({ title: response.title, numGrades: numGrades, colSizeGradeLg: colSizeGradeLg, colSizeGradeMd: colSizeGradeMd, colSizeGradeXs: colSizeGradeXs, colSizeCandidateLg: ((12 - colSizeGradeLg * numGrades) > 0) ? (12 - colSizeGradeLg * numGrades) : 12, colSizeCandidateMd: ((12 - colSizeGradeMd * numGrades) > 0) ? (12 - colSizeGradeMd * numGrades) : 12, colSizeCandidateXs: ((12 - colSizeGradeXs * numGrades) > 0) ? (12 - colSizeGradeXs * numGrades) : 12, electionGrades: grades.slice(0, numGrades) })); return response; } componentDidMount() { // FIXME we should better handling logs const electionSlug = this.props.match.params.handle; // get details of the election const detailsEndpoint = resolve(process.env.REACT_APP_SERVER_URL, 'election/get/'.concat(electionSlug)); fetch(detailsEndpoint) .then(this.handleErrors) .then(response => response.json()) .then(this.detailsToState) .catch(error => console.log(error)); // get results of the election const resultsEndpoint = resolve(process.env.REACT_APP_SERVER_URL, 'election/results/'.concat(electionSlug)); fetch(resultsEndpoint) .then(this.handleErrors) .then(response => response.json()) .then(this.resultsToState) .catch(error => console.log(error)); } toggleGraphics = () => { this.setState(state => ({collapseGraphics: !state.collapseGraphics})); }; toggleProfiles = () => { this.setState(state => ({collapseProfiles: !state.collapseProfiles})); }; render() { const { redirectLost, candidates, electionGrades } = this.state; if (redirectLost) { return () } return (

{this.state.title}

Résultat du vote :

    {candidates.map((candidate, i) => { return (
  1. {candidate.label}{candidate.score}%{grades[candidate.grade].label}
  2. ); })}

Graphique

{candidates.map((candidate, i) => { return ( {/*candidate.label*/} ) })}
{i + 1} {candidate.profile.map((value, i) => { if (value > 0) { let percent = value + "%"; if (i === 0) { percent = "auto"; } return (); }else{ return null } })}
 
{candidates.map((candidate, i) => { return ( {(i > 0) ? ", " : ""}{i + 1}: {candidate.label}); })}
{electionGrades.map((grade, i) => { return ( {grade.label} )})}

Profils de mérites

{electionGrades.map((grade, i) => { return (); })}{candidates.map((candidate, i) => { return ( {/*candidate.label*/} {candidate.profile.map((value, i) => { return (); })} ) })}
#{grade.label}
{i + 1}{value}%
{candidates.map((candidate, i) => { return ({(i > 0) ? ", " : ""}{i + 1}: {candidate.label}); })}
) } } export default Result;