Improve team identifier handling

This commit is contained in:
2025-11-23 13:30:24 -05:00
parent 1aaebe5dce
commit d8f2a3cf52
6 changed files with 222 additions and 44 deletions
+18 -27
View File
@@ -20,28 +20,15 @@ else
<MudGrid>
<MudItem xs="12" sm="7">
<MudPaper Class="pa-4">
<MudSelect
T="Student"
MultiSelection="true"
@bind-SelectedValues="@_selectedStudents"
ToStringFunc="e => e.Name"
Label="Students">
@foreach (var student in _students.OrderBy(e => e.FirstName))
{
<MudSelectItem T="Student" Value="@student">@student.Name</MudSelectItem>
}
</MudSelect>
<MudStack>
<MudText>Captain</MudText>
<MudToggleGroup T="Student" SelectionMode="SelectionMode.ToggleSelection" @bind-Value="Team.Captain" CheckMark>
@foreach (var student in _selectedStudents.OrderBy(e => e.FirstName))
{
<MudToggleItem Value="@(student)" Text="@student.Name" />
}
</MudToggleGroup>
<StudentToggleSelector Students="@_students"
@bind-SelectedStudents="_selectedStudents"
Title="Students"
ShowFullName="true" />
<MudStack Class="mt-4">
<TeamCaptainSelector Students="@_selectedStudents"
@bind-SelectedCaptain="Team.Captain"
Title="Captain" />
</MudStack>
<MudTextField T="string?" Label="Identifier" @bind-Value="Team.Identifier" For="@(() => Team.Identifier)" Required="false" Clearable="true"></MudTextField>
</MudPaper>
</MudItem>
</MudGrid>
@@ -57,7 +44,7 @@ else
[SupplyParameterFromForm]
private Team? Team { get; set; }
private IEnumerable<Student> _selectedStudents = new HashSet<Student>();
private IEnumerable<Student> _selectedStudents = [];
private List<Student> _students = [];
protected override async Task OnInitializedAsync()
@@ -67,10 +54,7 @@ else
.Include(e => e.Students)
.FirstOrDefaultAsync(m => m.Id == Id);
_students = await Context.Students.ToListAsync();
foreach (var s in Team.Students)
{
((HashSet<Student>)_selectedStudents).Add(s);
}
_selectedStudents = Team.Students.ToList();
if (Team is null)
{
@@ -89,7 +73,7 @@ else
// To protect from overposting attacks, enable the specific properties you want to bind to.
// For more information, see https://learn.microsoft.com/aspnet/core/blazor/forms/#mitigate-overposting-attacks.
private async Task UpdateTeam()
{
{
//Context.Attach(Team!).Entity = EntityState.Modified;
Team.Students.Clear();
foreach (var s in _selectedStudents)
@@ -97,6 +81,13 @@ else
Team.Students.Add(s);
}
// Update identifier for individual events
if (Team.Event.EventFormat == EventFormat.Individual && Team.Students.Count == 1)
{
Team.Captain ??= Team.Students[0];
Team.Identifier = Team.Captain.FirstName;
}
try
{
await Context.SaveChangesAsync();