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;