import {
OBSERVATION_TYPES,
GraduationChange,
submitGraduationChange,
Observation,
submitObservation
} from "../../js/graduation-ENV.js";
import { fetchGroups } from "../../js/group.js";
import { initSelection } from "../../js/selection.js";
import { getName } from "../../js/utils-ENV.js";
let group;
let name;
function toggle(btn) {
if (btn.innerHTML === "X")
btn.innerHTML = "o";
else
btn.innerHTML = "X";
document.getElementById("submit-mass-graduation").style.display = "block";
}
function observationClickHandler(ob, li) {
ob.style.background = "lightgray";
let observationDiv = li.observationDiv;
// Build the observation container
if(!observationDiv) {
observationDiv = document.createElement("div");
// Remember the observation div for this student
li.observationDiv = observationDiv;
observationDiv.id = `${li.student.name}-observation-container`;
observationDiv.classList.add("group-member-observation-container");
li.appendChild(observationDiv);
const obsTbl = document.createElement("table");
obsTbl.id = "group-member-observation-table";
observationDiv.appendChild(obsTbl);
const obsTh = document.createElement("thead");
obsTh.innerHTML = "
| Ja | Nein |
";
obsTbl.appendChild(obsTh);
const obsTbdy = document.createElement("tbody");
obsTbl.appendChild(obsTbdy);
for (const obsType of OBSERVATION_TYPES) {
const obsTr = document.createElement("tr");
const obsDesc = document.createElement("td");
obsDesc.innerHTML = obsType;
obsTr.appendChild(obsDesc);
const obsYes = document.createElement("td");
obsYes.innerHTML = "o";
obsYes.addEventListener("click", () => toggle(obsYes));
obsYes.dataset.yes = "true";
obsTr.appendChild(obsYes);
const obsNo = document.createElement("td");
obsNo.innerHTML = "o";
obsNo.addEventListener("click", () => toggle(obsNo) );
obsTr.appendChild(obsNo);
obsTbdy.appendChild(obsTr);
}
// Toggle the observation container visibility
} else {
if (observationDiv.style.display === "none") {
observationDiv.style.display = "block";
} else {
observationDiv.style.display = "none";
}
}
}
async function loadGroup(selected) {
group = selected;
const students = await group.getStudents();
document.getElementById("group-content").style.display = "block";
const ul = document.getElementById("group-members");
// Clear group list
ul.innerHTML = "";
for (const student of students) {
const li = document.createElement("li");
li.classList.add("group-member")
// Remember the student of the entry
li.student = student;
const ob = document.createElement("button");
ob.classList.add("group-member-observation-icon")
student.getGraduation().then((graduation) => {
if (!graduation.isObserved()) {
return;
}
ob.innerHTML = "👁"
ob.addEventListener("click", () => observationClickHandler(ob, li) );
});
li.appendChild(ob);
const i = document.createElement("img");
i.classList.add("group-member-icon")
student.getGraduation().then((graduation) => {
i.src = graduation.getIcon();
});
li.appendChild(i);
const n = document.createElement("span");
n.classList.add("group-member-name")
n.innerHTML = `${student.name}`;
li.appendChild(n);
for (const col of ["green", "orange", "red"]) {
const b = document.createElement("button");
b.classList.add(`group-member-${col}`)
b.innerHTML = "o";
b.addEventListener("click", () => toggle(b) );
li.appendChild(b);
}
const textarea = document.createElement("textarea");
textarea.classList.add("group-member-point-reason");
li.appendChild(textarea);
const p = document.createElement("button");
p.classList.add("group-member-print")
p.innerHTML = "🖶";
p.addEventListener("click", () => printRedPointNote(li) );
li.appendChild(p);
ul.appendChild(li);
}
}
function submitMassGraduation() {
for(const li of document.querySelectorAll("li.group-member")) {
const reason = li.querySelector(".group-member-point-reason").value;
const student = li.student;
if (li.querySelector(".group-member-green").innerHTML === "X") {
submitGraduationChange(student, GraduationChange.newGreenPointChange(reason, name));
}
if (li.querySelector(".group-member-orange").innerHTML === "X") {
submitGraduationChange(student, GraduationChange.newOrangePointChange(reason, name));
}
if (li.querySelector(".group-member-red").innerHTML === "X") {
submitGraduationChange(student, GraduationChange.newRedPointChange(reason, name));
}
if (li.observationDiv) {
let status = [];
for (const row of li.observationDiv.querySelectorAll("tbody > tr")) {
status.push(row.querySelector('td[data-yes="true"]').innerHTML === "X");
}
submitObservation(student, new Observation(Date.now(), status));
}
}
}
function printRedPointNote(li) {
print();
}
window.onload = function() {
initSelection(
"group-selection",
async function() { return (await fetchGroups()).values(); },
(group) => `${group.name}`,
loadGroup,
);
document.getElementById("submit-mass-graduation").addEventListener("click", submitMassGraduation);
name = getName();
}