Refactor MeetingSchedule component to improve event handling and state management

This commit updates the Index.razor component of the MeetingSchedule feature by refactoring several methods to remove unnecessary asynchronous operations. The OnScheduledTeamsChanged, OnAbsentStudentsChanged, OnExtendedTeamsChanged, ToggleRequiredTeam, and OnToggleStudentExclusion methods have been modified to use synchronous execution, enhancing performance and simplifying the code. Additionally, the logic for toggling required teams has been improved to ensure reference equality with MudToggleGroup. These changes contribute to a more efficient and maintainable scheduling experience.
This commit is contained in:
2026-01-14 09:04:55 -05:00
parent 34658e9697
commit 27f08b3718
@@ -129,13 +129,13 @@
// Track last saved state for dirty/clean comparison // Track last saved state for dirty/clean comparison
private MeetingScheduleState? _lastSavedState; private MeetingScheduleState? _lastSavedState;
private async Task OnScheduledTeamsChanged(IEnumerable<Team> teams) private void OnScheduledTeamsChanged(IEnumerable<Team> teams)
{ {
_scheduledTeams = teams; _scheduledTeams = teams;
StateHasChanged(); StateHasChanged();
} }
private async Task OnAbsentStudentsChanged(IEnumerable<Student> students) private void OnAbsentStudentsChanged(IEnumerable<Student> students)
{ {
_absentStudents = students; _absentStudents = students;
StateHasChanged(); StateHasChanged();
@@ -145,9 +145,10 @@
{ {
_parameters.TimeSlots = timeSlots; _parameters.TimeSlots = timeSlots;
StateHasChanged(); StateHasChanged();
await Task.CompletedTask;
} }
private async Task OnExtendedTeamsChanged(IEnumerable<Team> teams) private void OnExtendedTeamsChanged(IEnumerable<Team> teams)
{ {
_extendedTeams = teams; _extendedTeams = teams;
StateHasChanged(); StateHasChanged();
@@ -197,20 +198,24 @@
StateHasChanged(); StateHasChanged();
} }
private async Task ToggleRequiredTeam(Team unassignedTeam) private void ToggleRequiredTeam(Team unassignedTeam)
{ {
// Find the matching team from _teams to ensure reference equality with MudToggleGroup
var matchingTeam = _teams.FirstOrDefault(t => t.Id == unassignedTeam.Id);
if (matchingTeam == null) return;
var scheduledTeamIds = _scheduledTeams.Select(t => t.Id).ToHashSet(); var scheduledTeamIds = _scheduledTeams.Select(t => t.Id).ToHashSet();
IEnumerable<Team> newScheduledTeams; IEnumerable<Team> newScheduledTeams;
if (scheduledTeamIds.Contains(unassignedTeam.Id)) if (scheduledTeamIds.Contains(matchingTeam.Id))
newScheduledTeams = _scheduledTeams.Where(t => t.Id != unassignedTeam.Id); newScheduledTeams = _scheduledTeams.Where(t => t.Id != matchingTeam.Id);
else else
{ {
newScheduledTeams = _scheduledTeams.Concat([unassignedTeam]); newScheduledTeams = _scheduledTeams.Concat([matchingTeam]);
} }
// Update state and notify component to re-render // Update state and notify component to re-render
await OnScheduledTeamsChanged(newScheduledTeams); OnScheduledTeamsChanged(newScheduledTeams);
} }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
@@ -377,7 +382,7 @@
return 0; // Default to first slot if not found (shouldn't happen in normal flow) return 0; // Default to first slot if not found (shouldn't happen in normal flow)
} }
private async Task OnToggleStudentExclusion((int teamId, int timeSlotIndex, int studentId) key) private void OnToggleStudentExclusion((int teamId, int timeSlotIndex, int studentId) key)
{ {
if (_excludedStudents.TryGetValue(key, out var isExcluded) && isExcluded) if (_excludedStudents.TryGetValue(key, out var isExcluded) && isExcluded)
{ {