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:
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user