From 27f08b37181b0c1621144e8d13a0f6d1fb9b0073 Mon Sep 17 00:00:00 2001 From: James Kolpack Date: Wed, 14 Jan 2026 09:04:55 -0500 Subject: [PATCH] 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. --- .../Features/MeetingSchedule/Index.razor | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/WebApp/Components/Features/MeetingSchedule/Index.razor b/WebApp/Components/Features/MeetingSchedule/Index.razor index 0581bd0..52d9a03 100644 --- a/WebApp/Components/Features/MeetingSchedule/Index.razor +++ b/WebApp/Components/Features/MeetingSchedule/Index.razor @@ -129,13 +129,13 @@ // Track last saved state for dirty/clean comparison private MeetingScheduleState? _lastSavedState; - private async Task OnScheduledTeamsChanged(IEnumerable teams) + private void OnScheduledTeamsChanged(IEnumerable teams) { _scheduledTeams = teams; StateHasChanged(); } - private async Task OnAbsentStudentsChanged(IEnumerable students) + private void OnAbsentStudentsChanged(IEnumerable students) { _absentStudents = students; StateHasChanged(); @@ -145,9 +145,10 @@ { _parameters.TimeSlots = timeSlots; StateHasChanged(); + await Task.CompletedTask; } - private async Task OnExtendedTeamsChanged(IEnumerable teams) + private void OnExtendedTeamsChanged(IEnumerable teams) { _extendedTeams = teams; StateHasChanged(); @@ -197,20 +198,24 @@ 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(); IEnumerable newScheduledTeams; - if (scheduledTeamIds.Contains(unassignedTeam.Id)) - newScheduledTeams = _scheduledTeams.Where(t => t.Id != unassignedTeam.Id); + if (scheduledTeamIds.Contains(matchingTeam.Id)) + newScheduledTeams = _scheduledTeams.Where(t => t.Id != matchingTeam.Id); else { - newScheduledTeams = _scheduledTeams.Concat([unassignedTeam]); + newScheduledTeams = _scheduledTeams.Concat([matchingTeam]); } // Update state and notify component to re-render - await OnScheduledTeamsChanged(newScheduledTeams); + OnScheduledTeamsChanged(newScheduledTeams); } protected override async Task OnInitializedAsync() @@ -377,7 +382,7 @@ 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) {