fix(web): add try/finally, concurrency guard, accessible label, registration link to showcase

This commit is contained in:
2026-05-28 16:07:09 +03:00
parent 72f43dbef2
commit 71ffcce06b
+29 -14
View File
@@ -36,8 +36,8 @@
</div>
<div class="showcase-filter-group">
<span class="showcase-filter-label">Система</span>
<select class="gm-form-control showcase-filter-select" @onchange="OnSystemChanged">
<label class="showcase-filter-label" for="system-filter">Система</label>
<select id="system-filter" class="gm-form-control showcase-filter-select" aria-label="Система" @onchange="OnSystemChanged">
<option value="" selected="@(filter.System is null)">Любая</option>
@foreach (var system in Enum.GetValues<GameSystem>())
{
@@ -134,7 +134,7 @@ else
<a class="btn-gm btn-gm-outline" href="@($"/s/{session.Id}")">Подробнее</a>
@if (session.AllowDirectRegistration)
{
<button class="btn-gm btn-gm-primary">Записаться</button>
<a class="btn-gm btn-gm-primary" href="@($"/s/{session.Id}?register=1")">Записаться</a>
}
</div>
</div>
@@ -318,22 +318,37 @@ else
private async Task LoadAsync()
{
loading = true;
page = 1;
sessions.Clear();
var results = await SessionStore.GetShowcaseSessionsAsync(filter, page, PageSize);
sessions.AddRange(results);
hasMore = results.Count == PageSize;
loading = false;
try
{
page = 1;
sessions.Clear();
var results = await SessionStore.GetShowcaseSessionsAsync(filter, page, PageSize);
sessions.AddRange(results);
hasMore = results.Count == PageSize;
}
finally
{
loading = false;
}
}
private async Task LoadMoreAsync()
{
if (loading)
return;
loading = true;
page++;
var results = await SessionStore.GetShowcaseSessionsAsync(filter, page, PageSize);
sessions.AddRange(results);
hasMore = results.Count == PageSize;
loading = false;
try
{
page++;
var results = await SessionStore.GetShowcaseSessionsAsync(filter, page, PageSize);
sessions.AddRange(results);
hasMore = results.Count == PageSize;
}
finally
{
loading = false;
}
}
private async Task OnFilterChanged()