@page "/club/{Slug}" @layout PublicLayout @inject ISessionStore SessionStore @inject NavigationManager Navigation @PageTitleText @if (loaded && club is null) {
Недоступно

Публичная страница не найдена

Расписание клуба выключено или адрес больше не используется.

} else if (!loaded) {
} else if (club is not null) {
Публичное расписание

@club.Name

Открытые игры клуба без состава игроков, личных данных и приватных ссылок.

Ссылка клуба @PublicClubUrl
@if (club.Sessions.Count == 0) {

Опубликованных игр пока нет

Когда owner или co-GM откроет сессии для публичного расписания, они появятся здесь.

} else {
@foreach (var session in club.Sessions) {
@TranslateStatus(session.Status)

@session.Title

@session.ScheduledAt.FormatMoscow() @FormatSeats(session)
Открыть
}
} } @code { [Parameter] public string? Slug { get; set; } private WebPublicClub? club; private bool loaded; private string PageTitleText => club is null ? "Публичный клуб — GM-Relay" : $"{club.Name} — GM-Relay"; private string PublicClubUrl => club is null ? Navigation.ToAbsoluteUri($"/club/{Slug}").ToString() : Navigation.ToAbsoluteUri($"/club/{club.Slug}").ToString(); protected override async Task OnParametersSetAsync() { loaded = false; club = string.IsNullOrWhiteSpace(Slug) ? null : await SessionStore.GetPublicClubBySlugAsync(Slug.Trim()); loaded = true; } private string PublicSessionPath(Guid sessionId) => $"/s/{sessionId}"; private static string FormatSeats(WebPublicSession session) { var seats = session.MaxPlayers.HasValue ? $"{session.ActivePlayerCount}/{session.MaxPlayers.Value}" : $"{session.ActivePlayerCount} игроков"; return session.WaitlistedPlayerCount > 0 ? $"{seats}, ожидание {session.WaitlistedPlayerCount}" : seats; } private static string GetStatusClass(string status) => status switch { SessionStatus.Confirmed => "status-success", SessionStatus.ConfirmationSent => "status-warning", SessionStatus.Planned => "status-info", _ => "status-neutral" }; private static string TranslateStatus(string status) => status switch { SessionStatus.Planned => "Запланировано", SessionStatus.ConfirmationSent => "Ждем подтверждения", SessionStatus.Confirmed => "Подтверждено", _ => status }; }