Files
lux/Lux.UI/wwwroot/lib/js/chartsInterop.js
T
Samuele Locatelli e6a4fb3227 Ancora refresh stats
2025-12-19 10:50:56 +01:00

96 lines
3.1 KiB
JavaScript

window.chartsInterop = {
charts: {},
createChart: function (canvasId, config) {
// Se esiste già un chart su questo canvas, lo distruggo
if (this.charts[canvasId]) {
this.charts[canvasId].destroy();
}
const ctx = document.getElementById(canvasId).getContext('2d');
this.charts[canvasId] = new Chart(ctx, config);
},
updateChart: function (canvasId, label, value) {
const chart = this.charts[canvasId];
if (!chart) return;
chart.data.labels.push(label);
chart.data.datasets[0].data.push(value);
if (chart.data.labels.length > 20) {
chart.data.labels.shift();
chart.data.datasets[0].data.shift();
}
chart.update();
},
updateBarChart: function (canvasId, label, value) {
const chart = this.charts[canvasId];
if (!chart) return;
chart.data.labels = [label];
chart.data.datasets[0].data = [value];
chart.update();
},
updatePieChart: function (canvasId, updLables, updData) {
const chart = this.charts[canvasId];
if (!chart) return;
chart.data.labels = updLables;
chart.data = updData;
chart.update();
},
createPieChart: function (canvasId, config) {
const canvas = document.getElementById(canvasId);
if (!canvas) return;
// Se esiste già un grafico su questo canvas, lo aggiorniamo
if (this.charts[canvasId]) {
const chart = this.charts[canvasId];
// Aggiorna etichette e dati
chart.data.labels = config.data.labels;
chart.data.datasets[0].data = config.data.datasets[0].data;
chart.data.datasets[0].backgroundColor = config.data.datasets[0].backgroundColor;
chart.data.datasets[0].borderColor = config.data.datasets[0].borderColor;
chart.options = config.options;
// Update con modalità 'none' per disabilitare l'animazione
chart.update('none');
} else {
// Primo rendering: crea l'istanza e salvala
const ctx = canvas.getContext('2d');
this.charts[canvasId] = new Chart(ctx, config);
}
},
// Opzionale: metodo per distruggere il grafico quando il componente Blazor viene rimosso
destroyChart: function (canvasId) {
if (this.charts[canvasId]) {
this.charts[canvasId].destroy();
delete this.charts[canvasId];
}
},
createBarChart: function (canvasId, config) {
const canvas = document.getElementById(canvasId);
if (!canvas) return;
if (this.charts[canvasId]) {
const chart = this.charts[canvasId];
chart.data.labels = config.data.labels;
chart.data.datasets = config.data.datasets; // Sostituisce i dataset con i nuovi
chart.update('none'); // Update senza animazione per aggiornamenti real-time
} else {
const ctx = document.getElementById(canvasId).getContext('2d');
this.charts[canvasId] = new Chart(ctx, config);
}
}
};