Detect oversized must groups as conflicts
This commit is contained in:
@@ -173,6 +173,19 @@ async function loadStudents() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const mustGroups = {};
|
||||||
|
for (const s of students) {
|
||||||
|
const root = ufFind(s.id);
|
||||||
|
if (!mustGroups[root]) mustGroups[root] = [];
|
||||||
|
mustGroups[root].push(s.name);
|
||||||
|
}
|
||||||
|
const oversizedGroups = [];
|
||||||
|
for (const members of Object.values(mustGroups)) {
|
||||||
|
if (members.length > trip.room_size) {
|
||||||
|
oversizedGroups.push(members);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const conflictsEl = document.getElementById('conflicts');
|
const conflictsEl = document.getElementById('conflicts');
|
||||||
const conflictsWasOpen = conflictsEl.querySelector('wa-details')?.open;
|
const conflictsWasOpen = conflictsEl.querySelector('wa-details')?.open;
|
||||||
conflictsEl.innerHTML = '';
|
conflictsEl.innerHTML = '';
|
||||||
@@ -222,9 +235,10 @@ async function loadStudents() {
|
|||||||
const hardConflictsEl = document.getElementById('hard-conflicts');
|
const hardConflictsEl = document.getElementById('hard-conflicts');
|
||||||
const hardConflictsWasOpen = hardConflictsEl.querySelector('wa-details')?.open;
|
const hardConflictsWasOpen = hardConflictsEl.querySelector('wa-details')?.open;
|
||||||
hardConflictsEl.innerHTML = '';
|
hardConflictsEl.innerHTML = '';
|
||||||
if (hardConflictList.length > 0) {
|
const totalConflicts = hardConflictList.length + oversizedGroups.length;
|
||||||
|
if (totalConflicts > 0) {
|
||||||
const det = document.createElement('wa-details');
|
const det = document.createElement('wa-details');
|
||||||
det.summary = '\u26a0 Conflicts (' + hardConflictList.length + ')';
|
det.summary = '\u26a0 Conflicts (' + totalConflicts + ')';
|
||||||
if (hardConflictsWasOpen) det.open = true;
|
if (hardConflictsWasOpen) det.open = true;
|
||||||
for (const chain of hardConflictList) {
|
for (const chain of hardConflictList) {
|
||||||
const div = document.createElement('div');
|
const div = document.createElement('div');
|
||||||
@@ -241,6 +255,13 @@ async function loadStudents() {
|
|||||||
});
|
});
|
||||||
det.appendChild(div);
|
det.appendChild(div);
|
||||||
}
|
}
|
||||||
|
for (const members of oversizedGroups) {
|
||||||
|
const div = document.createElement('div');
|
||||||
|
div.className = 'conflict-row';
|
||||||
|
div.appendChild(kindSpan('must'));
|
||||||
|
div.appendChild(document.createTextNode(' group too large (' + members.length + ' for room size ' + trip.room_size + '): ' + members.join(', ')));
|
||||||
|
det.appendChild(div);
|
||||||
|
}
|
||||||
hardConflictsEl.appendChild(det);
|
hardConflictsEl.appendChild(det);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user