Newer
Older
// Imports
import * as Auth from "/services/auth/auth.js";
import * as Common from "/services/common/common.js";
import * as AreaModel from "/services/model/area-model.js";
import { Delete } from "/services/common/delete.js";
// DOM elements
export async function mount(where, parent) {
const areaComponent = new Area(parent);
await areaComponent.mount(where);
return areaComponent;
}
class Area {
constructor(parent) {
this.parent = parent;
const mountpoint = where;
document.getElementById(mountpoint).innerHTML = /* HTML */ `
<header class="card-header">
<p class="card-header-title" id="area-title">
Circonscriptions
</p>
</header>
<div class="card-content">
<div id="area-list" class="content auto-overflow-election-management">
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Sélectionner une élection.
</div>
</div>
`;
this.mountModal("area-modal");
this.handleDom();
}
handleDom() {
let areaHandler = this;
document
.getElementById(`area-modal-close`)
.addEventListener("click", function () {
Common.toggleModal("area-modal", "area-modal-card");
});
document
.getElementById(`area-modal-cancel`)
.addEventListener("click", function () {
Common.toggleModal("area-modal", "area-modal-card");
});
document
.getElementById(`area-modal-save`)
.addEventListener("click", async function () {
await areaHandler.saveArea();
});
document
.getElementById(`area-modal-save-area`)
.addEventListener("click", async function () {
await areaHandler.saveArea();
await new Promise((r) => setTimeout(r, 800));
areaHandler.newArea(areaHandler.election);
});
document
.getElementById(`area-modal-save-section`)
.addEventListener("click", async function () {
let area = await areaHandler.saveArea();
await new Promise((r) => setTimeout(r, 800));
areaHandler.parent.sectionHandler.newSection(area);
});
}
mountModal(where) {
const mountpoint = where;
document.getElementById(mountpoint).innerHTML = /* HTML */ `
<div class="modal-background"></div>
<div class="modal-card" id="area-modal-card">
<header class="modal-card-head">
<p class="modal-card-title">
Ajout/modification d'une circonscription
</p>
<button
class="delete"
aria-label="close"
id="area-modal-close"
></button>
</header>
<section class="modal-card-body">
<div class="field">
<div class="control">
<input class="input" type="hidden" id="area-modal-id" disabled />
</div>
</div>
<div class="field">
<label>Nom</label>
<div class="control">
<input class="input" type="text" id="area-modal-name" />
</div>
</div>
<div class="field">
<label>Nombre de siège</label>
<div class="control">
<input class="input" type="number" id="area-modal-seat-number" />
</div>
</div>
<div class="field">
<label>Identifiant de carte</label>
<div class="control">
<input class="input" type="number" id="area-modal-mapID" />
</div>
</div>
</section>
<footer class="modal-card-foot">
<button id="area-modal-save" class="button is-success">
Sauvegarder
</button>
<button id="area-modal-save-area" class="button is-success">
Sauvegarder <br />
(ajouter circonscription)
</button>
<button id="area-modal-save-section" class="button is-success">
Sauvegarder <br />(ajouter ville)
</button>
<button id="area-modal-cancel" class="button">Annuler</button>
</footer>
</div>
`;
}
async displayAreas() {
document.getElementById("areas").style.display = "block";
document.getElementById("area-list").innerHTML = /* HTML */ `<button
id="area-new"
class="button large-button is-success"
>
<span class="icon is-small">
<i class="fas fa-plus"></i>
</span>
</button>`;
let areaHandler = this;
let areas = await this.updateAreas();
const markup = areas.map((area) => this.areaTemplate(area)).join("");
document.getElementById("area-list").innerHTML += markup;
document.getElementById("area-title").innerHTML =
"Circonscriptions de <em> " + this.election.Name + "</em>";
areas.map((area) => {
document
.getElementById(`areas-area-edit-${area.ID}`)
.addEventListener("click", function () {
areaHandler.editArea(area);
});
document
.getElementById(`areas-area-delete-${area.ID}`)
.addEventListener("click", function () {
new Delete(() => {
areaHandler.deleteArea(area);
});
});
document
.getElementById(`areas-area-${area.ID}`)
.addEventListener("click", function () {
areaHandler.activateArea(area);
areaHandler.parent.sectionHandler.area = area;
areaHandler.parent.sectionHandler.displaySections();
});
});
document.getElementById(`area-new`).addEventListener("click", () => {
this.newArea(this.election);
});
}
emptyAreas() {
this.election = null;
document.getElementById("sections").style.display = "none";
document.getElementById("desks").style.display = "none";
}
areaTemplate(area) {
return /* HTML */ `<div class="card card-list">
<div id="areas-area-${area.ID}" class="card-content clickable">
<div class="content">
<nav class="level">
<div class="level-left">
${area.Name} (Nombre de siège : ${area.SeatNumber})
</div>
<div class="level-right">
<a
id="areas-area-edit-${area.ID}"
class="button is-link is-small"
title="Modifier"
>
<span class="icon is-small">
<i class="fas fa-pen"></i>
</span>
</a>
<a
id="areas-area-delete-${area.ID}"
class="button is-danger is-small"
title="Supprimer"
>
<span class="icon is-small">
<i class="fas fa-trash"></i>
</span>
</a>
</div>
</nav>
</div>
</div>
</div>`;
}
async activateArea(areaToActivate) {
this.parent.sectionHandler.emptySections();
this.parent.deskHandler.emptyDesks();
let areas = await this.updateAreas();
areas.forEach((area) => {
document
.getElementById(`areas-area-${area.ID}`)
.classList.remove("active-card");
});
document
.getElementById(`areas-area-${areaToActivate.ID}`)
.classList.add("active-card");
}
newArea(election) {
this.method = "POST";
this.election = election;
document.getElementById("area-modal-id").value = null;
document.getElementById("area-modal-name").value = election.Name;
document.getElementById("area-modal-seat-number").value = null;
document.getElementById("area-modal-mapID").value = null;
Common.toggleModal("area-modal", "area-modal-card");
}
editArea(area) {
this.method = "PUT";
document.getElementById("area-modal-id").value = area.ID;
document.getElementById("area-modal-name").value = area.Name;
document.getElementById("area-modal-seat-number").value = area.SeatNumber;
document.getElementById("area-modal-mapID").value = area.MapID;
Common.toggleModal("area-modal", "area-modal-card");
}
async saveArea() {
if (this.method == "POST")
document.getElementById("area-modal-id").value = null;
if (
this.AreaModel.checkInputs(
this.method,
parseInt(document.getElementById("area-modal-id").value),
document.getElementById("area-modal-name").value,
parseInt(document.getElementById("area-modal-seat-number").value)
)
) {
let area = await this.AreaModel.saveArea(
this.method,
parseInt(document.getElementById("area-modal-id").value),
this.election.ID,
document.getElementById("area-modal-name").value,
parseInt(document.getElementById("area-modal-seat-number").value),
document.getElementById("area-modal-mapID").value
);
await this.displayAreas();
Common.toggleModal("area-modal", "area-modal-card");
this.activateArea(area);
this.parent.sectionHandler.area = area;
this.parent.sectionHandler.displaySections();
return area;
}
}
async updateAreas() {
let areaHandler = this;
let areas = await this.AreaModel.getAreas();
return areas.filter(function (area) {
return area.ElectionID == areaHandler.election.ID;
});
await this.AreaModel.deleteArea(area.ID);
await this.displayAreas();
this.parent.sectionHandler.emptySections();
this.parent.deskHandler.emptyDesks();
}
async cloneAreas(electionCloned, electionToClone) {
let areaHandler = this;
await electionToClone.Areas.forEach(async (areaToClone) => {
areaToClone = await areaHandler.AreaModel.getArea(areaToClone.ID);
let areaCloned = await areaHandler.AreaModel.saveArea(
"POST",
null,
electionCloned.ID,
areaToClone.Name,
await areaHandler.parent.sectionHandler.cloneSections(
areaCloned,
areaToClone
);
});