65 lines
No EOL
1.8 KiB
JavaScript
65 lines
No EOL
1.8 KiB
JavaScript
import { loadResults } from './api.js';
|
|
import { renderVisualization, renderSummary } from './visualization.js';
|
|
|
|
/**
|
|
* Initialisiert die Anwendung.
|
|
* Lädt initiale Ergebnisse und bindet UI-Events.
|
|
* @returns {Promise<void>}
|
|
*/
|
|
export async function initApp() {
|
|
try {
|
|
const filterControls = document.getElementById('filter-controls');
|
|
bindEvents(filterControls);
|
|
|
|
const data = await loadResults();
|
|
renderVisualization(data);
|
|
renderSummary(data);
|
|
} catch (error) {
|
|
console.error('Fehler bei der Initialisierung der App:', error);
|
|
const main = document.querySelector('main');
|
|
if (main) {
|
|
const errorMsg = document.createElement('div');
|
|
errorMsg.textContent = 'Fehler beim Laden der Ergebnisse. Bitte neu laden.';
|
|
errorMsg.className = 'results-visualization__error';
|
|
main.appendChild(errorMsg);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Bindet UI-Events für Filtersteuerungen.
|
|
* @param {HTMLElement|null} container - Container mit Filter-Controls
|
|
*/
|
|
export function bindEvents(container) {
|
|
if (!container) return;
|
|
|
|
container.querySelectorAll('select, input').forEach((control) => {
|
|
control.addEventListener('change', async () => {
|
|
const params = collectFilters(container);
|
|
try {
|
|
const data = await loadResults(params);
|
|
renderVisualization(data);
|
|
renderSummary(data);
|
|
} catch (err) {
|
|
console.error('Daten konnten nicht aktualisiert werden:', err);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Liest aktuelle Filterwerte aus DOM-Elementen.
|
|
* @param {HTMLElement} container
|
|
* @returns {Object}
|
|
*/
|
|
function collectFilters(container) {
|
|
const filters = {};
|
|
container.querySelectorAll('select, input').forEach((control) => {
|
|
if (control.id && control.value) {
|
|
filters[control.id] = control.value;
|
|
}
|
|
});
|
|
return filters;
|
|
}
|
|
|
|
window.addEventListener('load', initApp); |