// -----------------------------
// State variables
// -----------------------------
-let allAliases = [];
-let viewAliases = [];
+let aliasesList = [];
let editingAliasId = null;
const sortState = { sortDirection: {}, lastSort: null };
// -----------------------------
-// Load all aliases into the table
+// Fetch hosts from API
// -----------------------------
-async function loadAliases(refresh = true) {
+async function fetchAliases () {
const loader = document.getElementById("loader");
const container = document.getElementById("devices-container");
const dataTable = document.getElementById("dataTable");
// hide table during loading to avoid flickering and show loader
dataTable.classList.add("d-none");
- if(refresh) {
- try {
- // Show loader
- loader.style.display = "block";
+ try {
+ // Show loader
+ loader.style.display = "block";
- // Fetch devices
- allAliases = await fetchData(apiMap.aliases);
- viewAliases = [...allAliases];
+ // Fetch aliases
+ aliasesList = await fetchData(apiMap.aliases);
- } catch (err) {
- console.error(err?.message || "Error loading aliases");
- showToast(err?.message || "Error loading aliase", false);
- allAliases = [];
- // hide loader and show table
- loader.style.display = "none";
- dataTable.classList.remove("d-none");
- }
+ } catch (err) {
+ console.error(err?.message || "Error loading aliases");
+ showToast(err?.message || "Error loading aliase", false);
+ aliasesList = [];
+ // hide loader and show table
+ loader.style.display = "none";
+ dataTable.classList.remove("d-none");
}
+}
+
+// -----------------------------
+// Update table with current hosts
+// -----------------------------
+function updateTable () {
// DOM Reference
const tbody = document.querySelector("#dataTable tbody");
tbody.innerHTML = "";
// if no aliases, show an empty row
- if (!allAliases.length) {
+ if (!aliasesList.length) {
const trEmpty = document.createElement("tr");
const tdEmpty = document.createElement("td");
tdEmpty.colSpan = 7;
// fragment per performance
const frag = document.createDocumentFragment();
- allAliases.forEach(h => {
+ aliasesList.forEach(h => {
const id = Number(h.id);
const tr = document.createElement("tr");
showToast(data?.message || 'Alias deleted successfully', true);
// Reload aliases
- await loadAliases();
+ await fetchAliases();
+ updateTable();
return true;
} catch (err) {
// Load data (aliases)
try {
- await loadAliases();
+ await fetchAliases();
+ updateTable();
} catch (err) {
console.error(err?.message || "Error loading aliases");
showToast(err?.message || "Error loading aliases:", false);
e.stopPropagation(); // evita che arrivi al listener globale
resetSorting(sortState);
clearSearch(); // svuota input e ricarica tabella (come definito nella tua funzione)
- viewAliases = [...allAliases];
- loadAliases(false);
- filterData(''); // ripristina tabella'');
+ updateTable(); // aggiorna tabella
+ filterData(''); // ripristina tabella
}
});
}
e.preventDefault(); // evita side-effect (es. chiusure di modali del browser)
resetSorting(sortState);
clearSearch(); // svuota input e ricarica tabella (come definito nella tua funzione)
- viewAliases = [...allAliases];
- loadAliases(false);
- filterData(''); // ripristina tabella'');
+ updateTable(); // aggiorna tabella
+ filterData(''); // ripristina tabella
}
// Button event delegation (Enter, Space)
// Fetch Data functions
// -----------------------------
export async function fetchData(api) {
+
let items = [];
// Fetch data
// -----------------------------
// State variables
// -----------------------------
-let allDevices = [];
-let viewDevices = [];
+let devicesList = [];
let editingHostId = null;
const sortState = { sortDirection: {}, lastSort: null };
// -----------------------------
-// Load all devices into the table
+// Fetch hosts from API
// -----------------------------
-async function loadDevices(refresh = true) {
+async function fetchDevices () {
const loader = document.getElementById("loader");
const container = document.getElementById("devices-container");
const dataTable = document.getElementById("dataTable");
// hide table during loading to avoid flickering and show loader
dataTable.classList.add("d-none");
- if(refresh) {
- try {
- // Show loader
- loader.style.display = "block";
+ try {
+ // Show loader
+ loader.style.display = "block";
- // Fetch devices
- allDevices = await fetchData(apiMap.devices);
- viewDevices = [...allDevices];
+ // Fetch devices
+ devicesList = await fetchData(apiMap.devices);
- } catch (err) {
- console.error(err?.message || "Error loading devices");
- showToast(err?.message || "Error loading devices", false);
- allDevices = [];
- // hide loader and show table
- loader.style.display = "none";
- dataTable.classList.remove("d-none");
- }
+ } catch (err) {
+ console.error(err?.message || "Error loading devices");
+ showToast(err?.message || "Error loading devices", false);
+ devicesList = [];
+ // hide loader and show table
+ loader.style.display = "none";
+ dataTable.classList.remove("d-none");
}
+}
+
+// -----------------------------
+// Update table with current devices
+// -----------------------------
+function updateTable () {
// DOM Reference
const tbody = document.querySelector("#dataTable tbody");
tbody.innerHTML = "";
// if no devices, show an empty row
- if (!allDevices.length) {
+ if (!devicesList.length) {
const trEmpty = document.createElement("tr");
const tdEmpty = document.createElement("td");
tdEmpty.colSpan = 7;
// fragment per performance
const frag = document.createDocumentFragment();
- allDevices.forEach(d => {
+ devicesList.forEach(d => {
- //const mixedId = d.id;
- //const id = mixedId.slice(2);
const id = d.id;
let type = 0;
showToast(data?.message || 'Device deleted successfully', true);
// Reload devices
- await loadDevices();
+ await fetchDevices();
+ updateTable();
return true;
} catch (err) {
// Load data (devices)
try {
- await loadDevices();
+ await fetchDevices();
+ updateTable();
} catch (err) {
console.error(err?.message || "Error loading devices");
showToast(err?.message || "Error loading devices", false);
e.stopPropagation(); // evita che arrivi al listener globale
resetSorting(sortState);
clearSearch(); // svuota input e ricarica tabella (come definito nella tua funzione)
- viewDevices = [...allDevices];
- loadDevices(false);
- filterData(''); // ripristina tabella'');
+ updateTable(); // aggiorna tabella
+ filterData(''); // ripristina tabella
}
});
}
e.preventDefault(); // evita side-effect (es. chiusure di modali del browser)
resetSorting(sortState);
clearSearch(); // svuota input e ricarica tabella (come definito nella tua funzione)
- viewDevices = [...allDevices];
- loadDevices(false);
- filterData(''); // ripristina tabella'');
+ updateTable(); // aggiorna tabella
+ filterData(''); // ripristina tabella
}
// Button event delegation (Enter, Space)
// -----------------------------
// State variables
// -----------------------------
-let allHosts = [];
-let viewHosts = [];
+let hostsList = [];
let editingHostId = null;
const sortState = { sortDirection: {}, lastSort: null };
// -----------------------------
-// Load all hosts into the table
+// Fetch hosts from API
// -----------------------------
-async function loadHosts(refresh = true) {
+async function fetchHosts () {
const loader = document.getElementById("loader");
const container = document.getElementById("devices-container");
const dataTable = document.getElementById("dataTable");
// hide table during loading to avoid flickering and show loader
dataTable.classList.add("d-none");
- if(refresh) {
- try {
- // Show loader
- loader.style.display = "block";
+ try {
+ // Show loader
+ loader.style.display = "block";
- // Fetch hosts
- allHosts = await fetchData(apiMap.hosts);
- viewHosts = [...allHosts];
+ // Fetch hosts
+ hostsList = await fetchData(apiMap.hosts);
- } catch (err) {
- console.error(err?.message || "Error loading hosts");
- showToast(err?.message || "Error loading hosts", false);
- allHosts = [];
- // hide loader and show table
- loader.style.display = "none";
- dataTable.classList.remove("d-none");
- }
+ } catch (err) {
+ console.error(err?.message || "Error loading hosts");
+ showToast(err?.message || "Error loading hosts", false);
+ hostsList = [];
+ // hide loader and show table
+ loader.style.display = "none";
+ dataTable.classList.remove("d-none");
}
+}
+
+// -----------------------------
+// Update table with current hosts
+// -----------------------------
+function updateTable () {
// DOM Reference
const tbody = document.querySelector("#dataTable tbody");
tbody.innerHTML = "";
// if no hosts, show an empty row
- if (!allHosts.length) {
+ if (!hostsList.length) {
const trEmpty = document.createElement("tr");
const tdEmpty = document.createElement("td");
tdEmpty.colSpan = 7;
// fragment per performance
const frag = document.createDocumentFragment();
- allHosts.forEach(h => {
+ hostsList.forEach(h => {
const id = Number(h.id);
const tr = document.createElement("tr");
if (ok !== false) {
// close modal and reload hosts
closeAddHostModal();
- await loadHosts();
+ await fetchHosts();
+ updateTable();
return true
}
showToast(data?.message || 'Host deleted successfully', true);
// Reload hosts
- await loadHosts();
+ await fetchHosts();
+ updateTable();
return true;
} catch (err) {
// Load data (hosts)
try {
- await loadHosts();
+ await fetchHosts();
+ updateTable();
} catch (err) {
console.error(err?.message || "Error loading hosts");
showToast(err?.message || "Error loading hosts", false);
e.stopPropagation(); // evita che arrivi al listener globale
resetSorting(sortState);
clearSearch(); // svuota input e ricarica tabella (come definito nella tua funzione)
- viewHosts = [...allHosts];
- loadHosts(false);
+ updateTable(); // aggiorna tabella
filterData(''); // ripristina tabella
}
});
e.preventDefault(); // evita side-effect (es. chiusure di modali del browser)
resetSorting(sortState);
clearSearch(); // svuota input e ricarica tabella (come definito nella tua funzione)
- viewHosts = [...allHosts];
- loadHosts(false);
+ updateTable(); // aggiorna tabella
filterData(''); // ripristina tabella
}
// -----------------------------
// State variables
// -----------------------------
-let allLeases = [];
-let viewLeases = [];
+let leasesList = [];
const sortState = { sortDirection: {}, lastSort: null };
// -----------------------------
// Load all leases into the table
// -----------------------------
-async function loadLeases(refresh = true) {
+async function fetchLeases () {
const loader = document.getElementById("loader");
const container = document.getElementById("devices-container");
const dataTable = document.getElementById("dataTable");
// hide table during loading to avoid flickering and show loader
dataTable.classList.add("d-none");
- if(refresh) {
- try {
- // Show loader
- loader.style.display = "block";
+ try {
+ // Show loader
+ loader.style.display = "block";
- // Fetch leases
- allLeases = await fetchData(apiMap.leases);
- viewLeases = [...allLeases];
+ // Fetch leases
+ leasesList = await fetchData(apiMap.leases);
- } catch (err) {
- console.error(err?.message || "Error loading leases");
- showToast(err?.message || "Error loading leases", false);
- allLeases = [];
- // hide loader and show table
- loader.style.display = "none";
- dataTable.classList.remove("d-none");
- }
+ } catch (err) {
+ console.error(err?.message || "Error loading leases");
+ showToast(err?.message || "Error loading leases", false);
+ leasesList = [];
+ // hide loader and show table
+ loader.style.display = "none";
+ dataTable.classList.remove("d-none");
}
+}
+
+// -----------------------------
+// Update table with current hosts
+// -----------------------------
+function updateTable () {
// DOM Reference
const tbody = document.querySelector("#dataTable tbody");
tbody.innerHTML = "";
// if no leases, show an empty row
- if (!allLeases.length) {
+ if (!leasesList.length) {
const trEmpty = document.createElement("tr");
const tdEmpty = document.createElement("td");
tdEmpty.colSpan = 7;
// fragment per performance
const frag = document.createDocumentFragment();
- allLeases.forEach(l => {
+ leasesList.forEach(l => {
const id = Number(l.id);
const tr = document.createElement("tr");
if (ok !== false) {
// close modal and reload hosts
closeAddHostModal();
- await loadLeases();
+ await fetchLeases();
+ updateTable();
return true
}
showToast(data?.message || 'Lease deleted successfully', true);
// Reload leases
- await loadLeases();
+ await fetchLeases();
+ updateTable();
return true;
} catch (err) {
// Load data (leases)
try {
- await loadLeases();
+ await fetchLeases();
+ updateTable();
} catch (err) {
console.error(err?.message || "Error loading dhcp leases");
showToast(err?.message || "Error loading dhcp leases", false);
e.stopPropagation(); // evita che arrivi al listener globale
resetSorting(sortState);
clearSearch(); // svuota input e ricarica tabella (come definito nella tua funzione)
- viewLeases = [...allLeases];
- loadLeases(false);
- filterData(''); // ripristina tabella'');
+ updateTable(); // aggiorna tabella
+ filterData(''); // ripristina tabella
}
});
}
e.preventDefault(); // evita side-effect (es. chiusure di modali del browser)
resetSorting(sortState);
clearSearch(); // svuota input e ricarica tabella (come definito nella tua funzione)
- viewLeases = [...allLeases];
- loadLeases(false);
- filterData(''); // ripristina tabella'');
+ updateTable(); // aggiorna tabella
+ filterData(''); // ripristina tabella
}
// Button event delegation (Enter, Space)