From 4b6827a967bbb28921d9cb37b4f66d1c560f6a7c Mon Sep 17 00:00:00 2001 From: Alexis POYEN <apoyen@grandlyon.com> Date: Tue, 9 Jun 2020 17:06:37 +0200 Subject: [PATCH] Resolve "Display the list of areas" --- web/components/management/candidate-lists.js | 69 ++++++++++++++++++-- web/components/management/round-desks.js | 1 - web/components/management/rounds-card.js | 7 +- web/services/model/round-model.js | 5 +- web/style.css | 6 +- 5 files changed, 75 insertions(+), 13 deletions(-) diff --git a/web/components/management/candidate-lists.js b/web/components/management/candidate-lists.js index 533831d..5c9bab1 100644 --- a/web/components/management/candidate-lists.js +++ b/web/components/management/candidate-lists.js @@ -1,5 +1,6 @@ // Imports import * as Auth from "/services/auth/auth.js"; +import * as AreaModel from "/services/model/area-model.js"; // DOM elements @@ -16,14 +17,16 @@ class CandidateList { constructor(parent) { this.method = null; this.parent = parent; + this.AreaModel = AreaModel.getAreaModel(); } async mount(where) { + this.AreaModel.current_user = await Auth.GetUser(); const mountpoint = where; document.getElementById(mountpoint).innerHTML = /* HTML */ ` <header class="card-header"> <p class="card-header-title"> - Liste des candidats + Liste des candidats par circonscription </p> <button id="candidate-list-new" class="button is-success" disabled> <span class="icon is-small"> @@ -31,12 +34,68 @@ class CandidateList { </span> </button> </header> - <div class="card-content"> - <div id="candidate-lists-list" class="content"> - Liste des listes de candidats + <div class="columns card-content"> + <div class="column"> + <div id="areas-round"></div> + </div> + <div class="column"> + <div id="desk-round-details"></div> + </div> + <div class="column"> + <div id="active-capturer" class="card"></div> + </div> + <div class="column"> + <div id="available-capturer" class="card"></div> + </div> </div> - </div> `; current_user = await Auth.GetUser(); } + + areaTemplate(area) { + return /* HTML */ `<div class="card card-list"> + <div id="areas-area-${area.ID}" class="card-content"> + <div class="content"> + <nav class="level"> + <div class="level-left"> + ${area.Name} (Nombre de siège : ${area.SeatNumber}) + </div> + </nav> + </div> + </div> + </div>`; + } + + async displayAreas() { + let candidateListHandler = this; + let areas = await this.updateAreas(); + const markup = areas.map((area) => this.areaTemplate(area)).join(""); + document.getElementById("areas-round").innerHTML = markup; + + areas.map((area) => { + document + .getElementById(`areas-area-${area.ID}`) + .addEventListener("click", async function () { + await candidateListHandler.activateArea(area); + candidateListHandler.area = area; + await candidateListHandler.displayCandidateLists(); + }); + }); + } + + async updateAreas() { + let candidateListHandler = this; + let areas = await this.AreaModel.getAreas(); + return areas.filter(function (area) { + return area.ElectionID == candidateListHandler.round.ElectionID; + }); + } + + async activateArea(){ + + } + + async displayCandidateLists(){ + + } } diff --git a/web/components/management/round-desks.js b/web/components/management/round-desks.js index 17d2ae6..cf36d2b 100644 --- a/web/components/management/round-desks.js +++ b/web/components/management/round-desks.js @@ -55,7 +55,6 @@ class RoundDesk { handleDom() { let roundHandler = this; document.getElementById(`round-new`).addEventListener("click", function () { - roundHandler.newRound(); }); document diff --git a/web/components/management/rounds-card.js b/web/components/management/rounds-card.js index e3a1c4c..06d2b9a 100644 --- a/web/components/management/rounds-card.js +++ b/web/components/management/rounds-card.js @@ -177,6 +177,8 @@ class Round { .getElementById("candidate-list-new") .setAttribute("disabled", "true"); // TODO open candidate list + roundHandler.parent.candidateListHandler.round = round; + roundHandler.parent.candidateListHandler.displayAreas(); }); }); } @@ -252,9 +254,10 @@ class Round { if (this.method == "POST") document.getElementById("round-modal-id").value = null; - let round = this.RoundModel.saveRound( + let round = await this.RoundModel.saveRound( this.method, parseInt(document.getElementById("round-modal-id").value), + parseInt(document.getElementById("round-modal-election-id").value), document.getElementById("round-modal-date").value, parseInt(document.getElementById("round-modal-round").value) ); @@ -267,7 +270,7 @@ class Round { } async deleteRound(round) { - await this.RoundModel.deleteRound(round.ID) + await this.RoundModel.deleteRound(round.ID); await this.displayRounds(); // TODO empty desks // TODO empty candidateLists diff --git a/web/services/model/round-model.js b/web/services/model/round-model.js index c82872c..295b1bc 100644 --- a/web/services/model/round-model.js +++ b/web/services/model/round-model.js @@ -51,7 +51,7 @@ class RoundModel { { method: method, headers: new Headers({ - "XSRF-Token": current_user.xsrftoken, + "XSRF-Token": this.current_user.xsrftoken, }), body: JSON.stringify({ ID: ID, @@ -75,7 +75,7 @@ class RoundModel { } } - async deleteRounds(ID) { + async deleteRound(ID) { try { const response = await fetch("/api/Round/" + ID, { method: "delete", @@ -92,6 +92,7 @@ class RoundModel { Messages.Show("is-warning", e.message); console.error(e); } + this.refreshRounds(); } async refreshRounds() { diff --git a/web/style.css b/web/style.css index b75e094..4637e91 100644 --- a/web/style.css +++ b/web/style.css @@ -110,15 +110,15 @@ select { flex-basis: 70%; } -#round-desks { +#round-desks, #candidate-lists { height: 35vh; } -#round-desks .column { +#round-desks .column, #candidate-lists .column { overflow-y: auto; } -#round-desks .columns { +#round-desks .columns, #candidate-lists .columns { max-height: 90%; } -- GitLab