fix ui deadlock problem
This commit is contained in:
parent
310cc0e2ec
commit
3b6c7a2234
|
|
@ -92,6 +92,11 @@ Break complex work into 3-5 stages. Document in `IMPLEMENTATION_PLAN.md` see [do
|
|||
- Handle errors at appropriate level
|
||||
- Never silently swallow exceptions
|
||||
|
||||
Be aware of critical patterns, that can lead to deadlocks or other problem when using async methods. E.G.:
|
||||
- Search(pattern: "@\(_.*\.Result\)", glob: "*.razor", output_mode: "content")
|
||||
- Search(pattern: "\)\.Result", glob: "*.razor", output_mode: "content")
|
||||
- Search(pattern: "\.Wait\(\)", glob: "*.razor", output_mode: "content")
|
||||
|
||||
## Decision Framework
|
||||
|
||||
When multiple valid approaches exist, choose based on:
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@
|
|||
@if (_model.LastThrow != null)
|
||||
{
|
||||
<MudAlert Severity="@GetLastThrowSeverity()" Class="mb-4" Dense="true">
|
||||
@(_ = GetLastThrowMessage().Result)
|
||||
@_lastThrowMessage
|
||||
</MudAlert>
|
||||
}
|
||||
|
||||
|
|
@ -172,18 +172,21 @@
|
|||
private DeathBoxGameModel? _model;
|
||||
private List<PlayerStatsRow> _playerStats = [];
|
||||
private int _activePlayerCount = 0;
|
||||
private string _lastThrowMessage = "";
|
||||
|
||||
protected override void OnInitialized()
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
base.OnInitialized();
|
||||
await base.OnInitializedAsync();
|
||||
GameState.StateChanged += OnGameStateChanged;
|
||||
UpdateStats();
|
||||
_lastThrowMessage = await GetLastThrowMessage();
|
||||
}
|
||||
|
||||
private void OnGameStateChanged(object? sender, EventArgs e)
|
||||
private async void OnGameStateChanged(object? sender, EventArgs e)
|
||||
{
|
||||
UpdateStats();
|
||||
InvokeAsync(StateHasChanged);
|
||||
_lastThrowMessage = await GetLastThrowMessage();
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
private void UpdateStats()
|
||||
|
|
|
|||
|
|
@ -63,13 +63,14 @@
|
|||
</HeaderContent>
|
||||
<RowTemplate>
|
||||
<MudTd>
|
||||
|
||||
@if (context.ContentType.StartsWith("image/"))
|
||||
{
|
||||
<img src="@context.Url" style="max-width: 60px; max-height: 40px;" />
|
||||
<img src="@context.Url" style="max-width: 60px; max-height: 40px;"/>
|
||||
}
|
||||
else
|
||||
{
|
||||
<MudIcon Icon="@Icons.Material.Filled.Movie" Size="Size.Large" />
|
||||
<MudIcon Icon="@Icons.Material.Filled.Movie" Size="Size.Large"/>
|
||||
}
|
||||
</MudTd>
|
||||
<MudTd DataLabel="Name">
|
||||
|
|
@ -80,7 +81,7 @@
|
|||
@foreach (var evt in GetAssignedEvents(context.AssignedEvents))
|
||||
{
|
||||
<MudChip T="string" Size="Size.Small" Color="GetEventColor(evt)" Variant="Variant.Outlined" Class="mr-1">
|
||||
@(_ = Term.GetThrowEventName(evt).Result)
|
||||
@GetEventName(evt)
|
||||
</MudChip>
|
||||
}
|
||||
</MudTd>
|
||||
|
|
@ -245,6 +246,7 @@
|
|||
private bool _isLoading = true;
|
||||
private string? _error;
|
||||
private int _pendingCount => _gifs.Count(g => g.IsPendingApproval);
|
||||
private Dictionary<ThrowEventType, string> _eventNames = new();
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
|
|
@ -259,6 +261,7 @@
|
|||
var clubId = ClubContext.ClubId;
|
||||
_gifs = (await GifService.GetByClubAsync(clubId, includePending: true)).ToList();
|
||||
_tokens = (await GifService.GetSubmissionTokensByClubAsync(clubId)).ToList();
|
||||
await LoadEventNames();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
|
@ -267,6 +270,17 @@
|
|||
finally
|
||||
{
|
||||
_isLoading = false;
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task LoadEventNames()
|
||||
{
|
||||
var eventTypes = new[] { ThrowEventType.Strike, ThrowEventType.Circle, ThrowEventType.Bell,
|
||||
ThrowEventType.Gutter, ThrowEventType.NoWood, ThrowEventType.Cleared };
|
||||
foreach (var evt in eventTypes)
|
||||
{
|
||||
_eventNames[evt] = await Term.GetThrowEventName(evt);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -516,6 +530,9 @@
|
|||
return result;
|
||||
}
|
||||
|
||||
private string GetEventName(ThrowEventType type) =>
|
||||
_eventNames.TryGetValue(type, out var name) ? name : type.ToString();
|
||||
|
||||
private static Color GetEventColor(ThrowEventType type) => type switch
|
||||
{
|
||||
ThrowEventType.Strike => Color.Success,
|
||||
|
|
|
|||
Loading…
Reference in New Issue