This commit introduces the TeamMeetingToggleSelector component, which allows for the selection and management of teams within the meeting schedule. The Index.razor component has been updated to utilize this new selector, enhancing the user interface for managing scheduled and extended teams. Additionally, new methods for saving and loading extended teams have been added, improving the overall functionality and user experience in team scheduling. These changes contribute to better organization and management of team events in the application.
109 lines
3.8 KiB
Plaintext
109 lines
3.8 KiB
Plaintext
@using WebApp.Models
|
|
@using Core.Utility
|
|
|
|
@if (Title != null)
|
|
{
|
|
<MudText Typo="Typo.h4">@Title</MudText>
|
|
}
|
|
|
|
<MudToggleGroup T="Team"
|
|
SelectionMode="SelectionMode.MultiSelection"
|
|
Values="@SelectedTeams"
|
|
ValuesChanged="@OnSelectedTeamsChanged"
|
|
Vertical="true"
|
|
CheckMark>
|
|
@foreach (var team in Teams.OrderByEventFormatFirst().ThenBy(e => e.Event.Name))
|
|
{
|
|
<MudToggleItem Value="@team" Style="font-size: .75rem;">
|
|
<div style="display: flex; align-items: center; justify-content: space-between; gap: 4px; width: 100%;">
|
|
<MudTooltip Text="@TeamStudentNameFormatter.FormatStudentList(
|
|
team,
|
|
new TeamStudentNameFormatter.FormatOptions
|
|
{
|
|
CaptainIndicator = TeamStudentNameFormatter.CaptainIndicatorStyle.Captain,
|
|
Ordering = TeamStudentNameFormatter.OrderingStyle.None
|
|
})">
|
|
<span class="ellipsis" style="flex: 1; min-width: 0;">@team.ToString()</span>
|
|
</MudTooltip>
|
|
@if (IsSelected(team))
|
|
{
|
|
var isExtended = IsExtended(team);
|
|
<MudTooltip Text="@(isExtended ? "Remove from extended teams" : "Extend to 2 time slots")">
|
|
<MudIconButton Icon="@(isExtended ? Icons.Material.Filled.AddCircle : Icons.Material.Filled.Add)"
|
|
Size="Size.Small"
|
|
Color="@(isExtended ? Color.Primary : Color.Default)"
|
|
Variant="@(isExtended ? Variant.Filled : Variant.Text)"
|
|
OnClick="@(() => ToggleExtended(team))"
|
|
Style="margin-left: 4px; padding: 2px;" />
|
|
</MudTooltip>
|
|
}
|
|
@if (ShowEventAttributes)
|
|
{
|
|
<EventAttributes EventDefinition="@team.Event"></EventAttributes>
|
|
}
|
|
</div>
|
|
</MudToggleItem>
|
|
}
|
|
</MudToggleGroup>
|
|
|
|
@code {
|
|
[Parameter]
|
|
public IEnumerable<Team> Teams { get; set; } = [];
|
|
|
|
[Parameter]
|
|
public IEnumerable<Team> SelectedTeams { get; set; } = [];
|
|
|
|
[Parameter]
|
|
public EventCallback<IEnumerable<Team>> SelectedTeamsChanged { get; set; }
|
|
|
|
[Parameter]
|
|
public IEnumerable<Team> ExtendedTeams { get; set; } = [];
|
|
|
|
[Parameter]
|
|
public EventCallback<IEnumerable<Team>> ExtendedTeamsChanged { get; set; }
|
|
|
|
[Parameter]
|
|
public string? Title { get; set; }
|
|
|
|
[Parameter]
|
|
public bool ShowEventAttributes { get; set; } = true;
|
|
|
|
private bool IsSelected(Team team)
|
|
{
|
|
var selectedTeamIds = SelectedTeams.Select(t => t.Id).ToHashSet();
|
|
return selectedTeamIds.Contains(team.Id);
|
|
}
|
|
|
|
private bool IsExtended(Team team)
|
|
{
|
|
var extendedTeamIds = ExtendedTeams.Select(t => t.Id).ToHashSet();
|
|
return extendedTeamIds.Contains(team.Id);
|
|
}
|
|
|
|
private async Task OnSelectedTeamsChanged(IEnumerable<Team> value)
|
|
{
|
|
SelectedTeams = value;
|
|
await SelectedTeamsChanged.InvokeAsync(value);
|
|
}
|
|
|
|
private async Task ToggleExtended(Team team)
|
|
{
|
|
var extendedTeamIds = ExtendedTeams.Select(t => t.Id).ToHashSet();
|
|
IEnumerable<Team> newExtendedTeams;
|
|
|
|
if (extendedTeamIds.Contains(team.Id))
|
|
{
|
|
// Remove from extended teams
|
|
newExtendedTeams = ExtendedTeams.Where(t => t.Id != team.Id);
|
|
}
|
|
else
|
|
{
|
|
// Add to extended teams
|
|
newExtendedTeams = ExtendedTeams.Concat([team]);
|
|
}
|
|
|
|
ExtendedTeams = newExtendedTeams;
|
|
await ExtendedTeamsChanged.InvokeAsync(newExtendedTeams);
|
|
}
|
|
}
|