Files
chapter-organizer/WebApp/Components/Features/Teams/Components/TeamMeetingToggleSelector.razor
T
poprhythm 1601610226 Implement TeamMeetingToggleSelector component and extend team management functionality
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.
2026-01-13 09:32:45 -05:00

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);
}
}