1. HandleProcessThrowResult - Neuer Effect der bei IsGameOver den State sofort speichert
2. HandleExecuteGameActionSuccess - Neuer Effect der bei IsGameOver den State sofort speichert
Diese Effects laufen nach dem Reducer, daher ist der State bereits aktualisiert wenn gespeichert wird. Bei F5-Reload wird jetzt der finale Spielzustand geladen.
ChristmasTreeGameSetup.cs
- Neues Enum GameEndCondition mit AllFivesGone (Standard) und TreeCleared
- Property EndCondition zum Setup hinzugefügt
ChristmasTreeGameModel.cs
- Property EndCondition hinzugefügt
ChristmasTreeGameLogicService.cs
- Neue Methode CheckGameEndCondition() prüft je nach Einstellung
- Neue Methode CheckAnyTreeCleared() prüft ob ein Team alle Zahlen gestrichen hat
- Alle 3 Stellen wo Spielende geprüft wird nutzen jetzt die flexible Methode
ChristmasTreeSetup.razor
- Neues Dropdown "Spielende" mit zwei Optionen:
- "Alle 5er gestrichen" (Standard)
- "Ein Baum komplett leer"
- Hilfstexte erklären die jeweilige Bedingung
Der Fix teilt die Operation in zwei Schritte:
1. Alle IsDefault auf false → SaveChanges
2. Neuen Default auf true → SaveChanges
Das verhindert, dass EF Core temporär zwei IsDefault = true Einträge hat, was den Filtered Unique Index verletzen würde.
Das Problem liegt in OnParametersSetAsync(). Wenn SelectNone() aufgerufen wird:
1. _selectedIds wird geleert
2. NotifySelectionChanged() benachrichtigt Parent
3. Parent aktualisiert Parameter → OnParametersSetAsync() wird erneut aufgerufen
4. Auto-select Logik Zeile 103-106 wählt alle wieder aus!
Fix: Auto-select nur beim ersten Laden ausführen:
Behoben. Das _initialized Flag verhindert nun, dass die Auto-Select-Logik bei jedem Parameter-Update läuft - nur noch beim ersten Laden der Komponente.
Zusammenfassung der Änderungen:
1. FluxorComponent als Basisklasse - Dialog reagiert nun auf PersonState-Änderungen
2. Redundante DB-Anfragen vermeiden - LoadPersonsAction wird nur dispatched wenn Persons.Count == 0 && !IsLoading
3. Pre-Selection bei asynchronem Laden - In OnAfterRender wird die Member-Vorauswahl aktualisiert sobald Persons verfügbar sind
Ursache des Problems:
- Der Dialog dispatched LoadPersonsAction bei jedem Öffnen
- DayDetails.razor dispatched gleichzeitig mehrere Actions (LoadAvailablePersonsAction, etc.)
- Viele parallele DB-Requests erschöpfen den Connection Pool