agreg-server/server/frontend/public/assets/js/main.js

93 lines
No EOL
2.5 KiB
JavaScript

let chart = null;
document.addEventListener("DOMContentLoaded", init);
function showChartError() {
}
async function loadData() {
const start = document.getElementById("date-start").value;
const end = document.getElementById("date-end").value;
const granularity = document.getElementById("granularity").value;
const device_eui = document.getElementById("device").value;
if (!device_eui || !start || !end) return;
try {
const points = await fetchConsumption({
device_eui: device_eui,
start: start,
end: end,
granularity: granularity,
});
if (chart) { chart.destroy(); }
chart = renderChart(points, granularity);
updateKPIs(points);
} catch (err) {
if (chart) { chart.destroy(); }
showMessage("Impossible de charger les données : " + err.message);
updateKPIs(null);
}
}
function updateKPIs(points) {
const totalDisplay = document.getElementById("kpi-total");
const avgDisplay = document.getElementById("kpi-avg");
const countDisplay = document.getElementById("kpi-count");
if (!points || points.length === 0) {
totalDisplay.textContent = "-";
avgDisplay.textContent = "-";
countDisplay.textContent = "-";
return;
}
const totalValue = points.reduce((acc, p) => acc + p.delta_m3, 0);
const avgValue = totalValue / points.length;
totalDisplay.textContent = totalValue.toFixed(3);
avgDisplay.textContent = avgValue.toFixed(3);
countDisplay.textContent = points.length;
}
async function loadDevices() {
const selectDeviceElmt = document.getElementById("device");
try {
const devices = await fetchDevices();
if (!devices.length) {
selectDeviceElmt.disabled = true;
selectDeviceElmt.add(new Option("Aucun appareil disponible", ""));
return;
}
devices.forEach((device) => {
selectDeviceElmt.add(new Option(device.device_eui));
});
selectDeviceElmt.value = devices[0].device_eui;
} catch(err) {
selectDeviceElmt.disabled = true;
selectDeviceElmt.add(new Option("Erreur de chargement", ""));
console.error("loadDevices :", err.message);
}
}
async function init() {
let start = new Date();
start.setDate(start.getDate() - 7);
const end = new Date();
document.getElementById("date-start").valueAsDate = start;
document.getElementById("date-end").valueAsDate = end;
document.getElementById("btn-refresh").addEventListener("click", loadData);
await loadDevices();
const device_eui = document.getElementById("device").value;
if (device_eui) await loadData();
}