@page "/group/{GroupId:guid}"
@using GmRelay.Web.Services
@using GmRelay.Shared.Domain
@using GmRelay.Web.Services.Portfolio
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.Authorization
@attribute [Authorize]
@inject AuthorizedSessionService SessionService
@inject AuthorizedPortfolioService PortfolioService
@inject AuthorizedMembershipService MembershipService
@inject AuthenticationStateProvider AuthStateProvider
@inject NavigationManager Navigation
Сессии группы — GM-Relay
@if (groupManagement is not null)
{
📊 Статистика
@foreach (var manager in groupManagement.Managers)
{
@FormatManager(manager)
@if (groupManagement.CurrentUserIsOwner && manager.Role == GroupManagerRoleExtensions.CoGmValue)
{
}
}
@if (groupManagement.CurrentUserIsOwner)
{
}
}
@if (publicSettings is not null)
{
@if (PublicClubUrl is not null && publicSettings.PublicScheduleEnabled)
{
Открыть публичную страницу
}
@if (PublicClubUrl is not null && publicSettings.PublicScheduleEnabled)
{
}
}
@if (pendingApplicationsCount > 0)
{
📨 Заявки участников (@pendingApplicationsCount)
Рассмотреть заявки на участие в клубе
}
@if (!string.IsNullOrEmpty(errorMessage))
{
⚠️ @errorMessage
}
@if (!string.IsNullOrEmpty(successMessage))
{
✅ @successMessage
}
@if (portfolioGames is not null)
{
@if (portfolioGames.Count == 0)
{
Приключений пока нет
Создайте первый черновик и добавьте проведённые сессии.
}
else
{
@foreach (var game in portfolioGames)
{
@game.Title
@(game.IsPublic ? "Опубликовано" : "Черновик")
@game.SessionCount игр
@game.MasterCount мастеров
@if (game.PendingReviewCount > 0)
{
@game.PendingReviewCount на модерации
}
}
}
}
@if (campaignTemplates is not null)
{
@if (campaignTemplateModels.Count == 0)
{
Шаблонов пока нет
Создайте шаблоны в отдельной вкладке, а здесь запускайте из них новые batch-расписания.
}
else
{
@foreach (var template in campaignTemplateModels)
{
}
}
}
@if (sessions == null)
{
}
else if (sessions.Count == 0)
{
🎯
Нет предстоящих сессий
Для этой группы пока не запланировано игровых сессий.
}
else
{
@foreach (var batch in batchModels)
{
0 ? "status-warning" : "status-neutral")">
@FormatBatchPublication(batch)
}
@* Desktop table *@
| Название |
Время (МСК) |
Места |
Статус |
Ссылка |
Действие |
@foreach (var session in sessions)
{
var isExpanded = expandedSessions.Contains(session.Id);
|
|
@session.ScheduledAt.FormatMoscow() |
@FormatSeats(session) |
@TranslateStatus(session.Status)
|
Подключиться ↗
|
@FormatPublicationStatus(session)
@if (session.IsPublic && publicSettings?.PublicScheduleEnabled == true)
{
Публичная ссылка
}
✏️ Изменить
📜 История
@if (CanPromote(session))
{
}
|
@if (isExpanded)
{
@if (loadingParticipantsSessionId == session.Id)
{
}
else if (participantsCache.TryGetValue(session.Id, out var participants))
{
@if (participants.Count == 0)
{
}
else
{
@foreach (var p in participants)
{
@p.DisplayName
@FormatParticipantUsername(p)
@TranslateParticipantStatus(p)
@if (!p.IsGm)
{
}
}
}
}
|
}
}
@* Mobile cards *@
@foreach (var session in sessions)
{
var isExpanded = expandedSessions.Contains(session.Id);
🕐 Время
@session.ScheduledAt.FormatMoscow()
👥 Места
@FormatSeats(session)
@if (session.IsPublic && publicSettings?.PublicScheduleEnabled == true)
{
Публичная ссылка
}
✏️ Изменить
📜 История
@if (CanPromote(session))
{
}
@if (isExpanded)
{
@if (loadingParticipantsSessionId == session.Id)
{
}
else if (participantsCache.TryGetValue(session.Id, out var participants))
{
@if (participants.Count == 0)
{
}
else
{
@foreach (var p in participants)
{
@p.DisplayName
@FormatParticipantUsername(p)
@TranslateParticipantStatus(p)
@if (!p.IsGm)
{
}
}
}
}
}
}
}
@code {
[Parameter] public Guid GroupId { get; set; }
private List