49 lines
1 KiB
JavaScript
49 lines
1 KiB
JavaScript
export let currentLoad = null;
|
|
const loadInfo = new Map();
|
|
|
|
export function newLoad(container) {
|
|
if (currentLoad) {
|
|
abortLoad(currentLoad);
|
|
}
|
|
reset(container);
|
|
const controller = new AbortController();
|
|
const token = { controller, charts: new Map() };
|
|
loadInfo.set(token, token);
|
|
currentLoad = token;
|
|
return token;
|
|
}
|
|
|
|
export function abortLoad(token) {
|
|
const info = loadInfo.get(token);
|
|
if (!info) return;
|
|
info.controller.abort();
|
|
info.charts.forEach(chart => {
|
|
try {
|
|
chart.destroy();
|
|
} catch (e) {}
|
|
});
|
|
loadInfo.delete(token);
|
|
if (currentLoad === token) {
|
|
currentLoad = null;
|
|
}
|
|
}
|
|
|
|
export function registerChart(token, id, chart) {
|
|
const info = loadInfo.get(token);
|
|
if (info) {
|
|
info.charts.set(id, chart);
|
|
} else {
|
|
chart.destroy();
|
|
}
|
|
}
|
|
|
|
export function reset(container) {
|
|
if (!container) return;
|
|
container.querySelectorAll('canvas').forEach(c => {
|
|
const chart = Chart.getChart(c);
|
|
if (chart) {
|
|
chart.destroy();
|
|
}
|
|
});
|
|
container.innerHTML = '';
|
|
}
|