This commit is contained in:
@@ -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 = '';
|
||||
|
||||
Reference in New Issue
Block a user