remove school year from pages
Tests / PHPUnit (push) Successful in 1m15s

This commit is contained in:
root
2026-07-17 01:07:31 -04:00
parent 0d0a771dd1
commit 4db8334a3c
12 changed files with 70 additions and 77 deletions
+49 -4
View File
@@ -77,6 +77,8 @@
let currentPage = 1;
let perPage = parseInt(container.dataset.defaultPerPage, 10) || 25;
let pageCount = 1;
let dataTable = null;
let requestSequence = 0;
const setPerPageSelect = () => {
const options = Array.from(perPageSelect.options);
@@ -112,8 +114,25 @@
if (!window.jQuery || !window.jQuery.fn || !window.jQuery.fn.DataTable) {
return;
}
if (window.jQuery.fn.DataTable.isDataTable(tableSelector)) {
window.jQuery(tableSelector).DataTable().clear().destroy();
const table = document.querySelector(tableSelector);
if (!table || !table.isConnected || !table.parentNode) {
dataTable = null;
return;
}
try {
if (dataTable) {
dataTable.destroy();
dataTable = null;
return;
}
if (window.jQuery.fn.DataTable.isDataTable(table)) {
window.jQuery(table).DataTable().destroy();
}
} catch (error) {
dataTable = null;
console.warn('Unable to destroy login activity DataTable cleanly.', error);
}
};
@@ -121,7 +140,25 @@
if (!window.jQuery || !window.jQuery.fn || !window.jQuery.fn.DataTable) {
return;
}
window.jQuery(tableSelector).DataTable({
const table = document.querySelector(tableSelector);
if (!table || !table.isConnected || !table.parentNode) {
return;
}
const expectedColumns = table.tHead?.rows?.[0]?.cells?.length || 0;
const bodyRows = Array.from(table.tBodies?.[0]?.rows || []);
const hasOnlyRegularRows = expectedColumns > 0
&& bodyRows.length > 0
&& bodyRows.every((row) => row.cells.length === expectedColumns
&& Array.from(row.cells).every((cell) => cell.colSpan === 1 && cell.rowSpan === 1));
if (!hasOnlyRegularRows) {
return;
}
if (window.jQuery.fn.DataTable.isDataTable(table)) {
dataTable = window.jQuery(table).DataTable();
return;
}
dataTable = window.jQuery(table).DataTable({
paging: false,
searching: false,
info: false,
@@ -159,7 +196,6 @@
cell.textContent = 'No login activities found.';
row.appendChild(cell);
tableBody.appendChild(row);
initDataTable();
return;
}
@@ -207,6 +243,7 @@
const fetchActivities = () => {
clearError();
const url = buildUrl();
const sequence = ++requestSequence;
return fetch(url, {
headers: {
@@ -221,6 +258,10 @@
return response.json();
})
.then((payload) => {
if (sequence !== requestSequence) {
return;
}
const activities = Array.isArray(payload?.activities) ? payload.activities : [];
const pagination = payload?.pagination ?? {};
@@ -231,6 +272,10 @@
updatePaginationControls();
})
.catch((error) => {
if (sequence !== requestSequence) {
return;
}
showError(error.message || 'Unable to load login activity.');
destroyDataTable();
tableBody.innerHTML = '';