From 58df668499c868e50dab9d812faf641b94f245d8 Mon Sep 17 00:00:00 2001 From: Mika Date: Tue, 24 Feb 2026 13:33:04 +0000 Subject: [PATCH] Add visualization_tool/js/app.js --- visualization_tool/js/app.js | 65 ++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 visualization_tool/js/app.js diff --git a/visualization_tool/js/app.js b/visualization_tool/js/app.js new file mode 100644 index 0000000..c9ae324 --- /dev/null +++ b/visualization_tool/js/app.js @@ -0,0 +1,65 @@ +"use strict"; + +/** + * @file js/app.js + * @description Hauptinitialisierungsskript: Setup von Events, Laden erster Daten, Koordination zwischen Modulen. + * @module app + */ + +import { fetchRunData } from './api.js'; +import { renderCharts, updateCharts } from './chartRenderer.js'; +import { setupDashboardSummary } from './dashboardSummary.js'; + +/** + * Liest aktuelle Filterwerte aus dem UI aus. + * @returns {{run?: string, policy_hash?: string, filter_pinned?: boolean|null}} + */ +function getCurrentFilters() { + const runInput = document.getElementById('filter-run'); + const hashInput = document.getElementById('filter-policy-hash'); + const pinnedInput = document.getElementById('filter-pinned'); + + return { + run: runInput?.value?.trim() || undefined, + policy_hash: hashInput?.value?.trim() || undefined, + filter_pinned: pinnedInput?.checked ?? null + }; +} + +/** + * Reagiert auf Filteränderungen in der Sidebar, triggert neuen Datenabruf und Aktualisierung der Visualisierungen. + * @param {Event} event + */ +export async function handleFilterChange(event) { + event?.preventDefault?.(); + + const filters = getCurrentFilters(); + try { + const data = await fetchRunData(filters); + updateCharts(data); + setupDashboardSummary(data); + } catch (error) { + console.error('Fehler beim Aktualisieren der Daten:', error); + } +} + +/** + * Initialisiert die Anwendung, ruft erste Daten ab und bindet Event-Listener an die Filter. + */ +export async function initApp() { + const filterForm = document.getElementById('filter-form'); + + if (filterForm) { + filterForm.addEventListener('input', handleFilterChange); + } + + try { + const initialData = await fetchRunData({}); + renderCharts(initialData); + setupDashboardSummary(initialData); + } catch (error) { + console.error('Fehler bei der Initialisierung der Anwendung:', error); + } +} + +window.addEventListener('load', initApp); \ No newline at end of file