Fehlerbehebungen;

This commit is contained in:
2026-05-29 14:39:21 +02:00
parent 4abe66c283
commit 07ab65e1d0
+25 -11
View File
@@ -92,7 +92,10 @@
private List<Workspace> _workspaces = new(); private List<Workspace> _workspaces = new();
private Workspace? _selectedWorkspace; private Workspace? _selectedWorkspace;
private List<AnalysisFakt> _fakten = new(); private List<AnalysisFakt> _fakten = new();
private bool _isLoading = true; private bool _isLoading = true;
private bool _isInteractive = false;
private bool _shouldRenderChart = false;
private List<object[]> _sankeyData = new(); private List<object[]> _sankeyData = new();
private IReadOnlyCollection<string> _selectedChartDimensions = new List<string>(); private IReadOnlyCollection<string> _selectedChartDimensions = new List<string>();
@@ -121,6 +124,21 @@
_isLoading = false; _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) private async Task OnWorkspaceSelected(Workspace ws)
{ {
_selectedWorkspace = ws; _selectedWorkspace = ws;
@@ -171,24 +189,22 @@
return fakt.Dimensions.TryGetValue(dimensionName, out var value) ? value : "-"; return fakt.Dimensions.TryGetValue(dimensionName, out var value) ? value : "-";
} }
private Dictionary<string, string> _pathLabels = new(); private Dictionary<string, string> _pathLabels = new();
private HashSet<string> _usedLabels = new(); private HashSet<string> _usedLabels = new();
private async Task UpdateChartDataAsync() private async Task UpdateChartDataAsync()
{ {
_sankeyData.Clear(); _sankeyData.Clear();
_pathLabels.Clear(); // Wichtig: Beim Neuzeichnen zurücksetzen _pathLabels.Clear();
_usedLabels.Clear(); _usedLabels.Clear();
if (!_fakten.Any() || _selectedWorkspace == null || !_selectedChartDimensions.Any()) if (!_fakten.Any() || _selectedWorkspace == null || !_selectedChartDimensions.Any())
{ {
await DrawChartAsync(); _shouldRenderChart = true; // NEU: Nur noch Flag setzen
return; return;
} }
var selectedDims = _selectedChartDimensions.ToList(); var selectedDims = _selectedChartDimensions.ToList();
// Den Workspace-Namen als allerersten Knoten generieren
var workspaceLabel = GetUniqueLabel(_selectedWorkspace.Name, _selectedWorkspace.Name); var workspaceLabel = GetUniqueLabel(_selectedWorkspace.Name, _selectedWorkspace.Name);
foreach (var fakt in _fakten) foreach (var fakt in _fakten)
@@ -206,10 +222,7 @@ private Dictionary<string, string> _pathLabels = new();
foreach (var level in levels) foreach (var level in levels)
{ {
// Der logische, lange Pfad (z.B. "Workspace / Italien / Maut")
var targetFullPath = $"{currentFullPath} / {level}"; var targetFullPath = $"{currentFullPath} / {level}";
// Wir holen uns den kurzen Namen (z.B. "Maut") inkl. nötiger unsichtbarer Leerzeichen
var targetLabel = GetUniqueLabel(targetFullPath, level); var targetLabel = GetUniqueLabel(targetFullPath, level);
AddSankeyLink(currentSourceLabel, targetLabel, fakt.Amount); AddSankeyLink(currentSourceLabel, targetLabel, fakt.Amount);
@@ -220,7 +233,7 @@ private Dictionary<string, string> _pathLabels = new();
} }
} }
await DrawChartAsync(); _shouldRenderChart = true; // NEU: Nur noch Flag setzen
} }
// --- NEU: Die Magie, die unsichtbare Leerzeichen für eindeutige IDs anhängt --- // --- NEU: Die Magie, die unsichtbare Leerzeichen für eindeutige IDs anhängt ---
@@ -263,8 +276,9 @@ private Dictionary<string, string> _pathLabels = new();
private async Task DrawChartAsync() private async Task DrawChartAsync()
{ {
if (!_isInteractive)
return;
// Ein winziger Delay stellt sicher, dass Blazor das UI fertig gerendert hat // Ein winziger Delay stellt sicher, dass Blazor das UI fertig gerendert hat
await Task.Delay(50);
await JSRuntime.InvokeVoidAsync("drawSankeyChart", "sankey-chart", _sankeyData); await JSRuntime.InvokeVoidAsync("drawSankeyChart", "sankey-chart", _sankeyData);
} }
} }