diff --git a/Components/Pages/Auswertung.razor b/Components/Pages/Auswertung.razor index e777697..c974a8c 100644 --- a/Components/Pages/Auswertung.razor +++ b/Components/Pages/Auswertung.razor @@ -92,7 +92,10 @@ private List _workspaces = new(); private Workspace? _selectedWorkspace; private List _fakten = new(); + private bool _isLoading = true; + private bool _isInteractive = false; + private bool _shouldRenderChart = false; private List _sankeyData = new(); private IReadOnlyCollection _selectedChartDimensions = new List(); @@ -121,6 +124,21 @@ _isLoading = false; } + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + // Ab jetzt ist der Browser da und JavaScript ist erlaubt! + _isInteractive = true; + } + + if (_isInteractive && _shouldRenderChart && !_isLoading && _selectedWorkspace != null) + { + _shouldRenderChart = false; // Flag direkt wieder wegnehmen + await DrawChartAsync(); + } + } + private async Task OnWorkspaceSelected(Workspace ws) { _selectedWorkspace = ws; @@ -171,24 +189,22 @@ return fakt.Dimensions.TryGetValue(dimensionName, out var value) ? value : "-"; } -private Dictionary _pathLabels = new(); + private Dictionary _pathLabels = new(); private HashSet _usedLabels = new(); - private async Task UpdateChartDataAsync() + private async Task UpdateChartDataAsync() { _sankeyData.Clear(); - _pathLabels.Clear(); // Wichtig: Beim Neuzeichnen zurücksetzen + _pathLabels.Clear(); _usedLabels.Clear(); if (!_fakten.Any() || _selectedWorkspace == null || !_selectedChartDimensions.Any()) { - await DrawChartAsync(); + _shouldRenderChart = true; // NEU: Nur noch Flag setzen return; } var selectedDims = _selectedChartDimensions.ToList(); - - // Den Workspace-Namen als allerersten Knoten generieren var workspaceLabel = GetUniqueLabel(_selectedWorkspace.Name, _selectedWorkspace.Name); foreach (var fakt in _fakten) @@ -206,10 +222,7 @@ private Dictionary _pathLabels = new(); foreach (var level in levels) { - // Der logische, lange Pfad (z.B. "Workspace / Italien / Maut") var targetFullPath = $"{currentFullPath} / {level}"; - - // Wir holen uns den kurzen Namen (z.B. "Maut") inkl. nötiger unsichtbarer Leerzeichen var targetLabel = GetUniqueLabel(targetFullPath, level); AddSankeyLink(currentSourceLabel, targetLabel, fakt.Amount); @@ -220,7 +233,7 @@ private Dictionary _pathLabels = new(); } } - await DrawChartAsync(); + _shouldRenderChart = true; // NEU: Nur noch Flag setzen } // --- NEU: Die Magie, die unsichtbare Leerzeichen für eindeutige IDs anhängt --- @@ -263,8 +276,9 @@ private Dictionary _pathLabels = new(); private async Task DrawChartAsync() { + if (!_isInteractive) + return; // Ein winziger Delay stellt sicher, dass Blazor das UI fertig gerendert hat - await Task.Delay(50); await JSRuntime.InvokeVoidAsync("drawSankeyChart", "sankey-chart", _sankeyData); } } \ No newline at end of file