diff --git a/WebApp/Components/Pages/MeetingSchedulePages/Index.razor b/WebApp/Components/Pages/MeetingSchedulePages/Index.razor
index 6f32c04..cddde50 100644
--- a/WebApp/Components/Pages/MeetingSchedulePages/Index.razor
+++ b/WebApp/Components/Pages/MeetingSchedulePages/Index.razor
@@ -134,6 +134,13 @@
+ Absent Students
+
+
Scheduled Teams
}
-
-
-
-
diff --git a/WebApp/Components/StudentTextBoxSelector.razor b/WebApp/Components/StudentTextBoxSelector.razor
new file mode 100644
index 0000000..60f8987
--- /dev/null
+++ b/WebApp/Components/StudentTextBoxSelector.razor
@@ -0,0 +1,106 @@
+@if (Title != null)
+{
+ @Title
+}
+
+
+
+ @if (ShowFullName)
+ {
+ @student.FirstNameLastName
+ }
+ else
+ {
+ @student.FirstName
+ }
+ @if (ShowGrade)
+ {
+ - Grade @student.Grade
+ }
+
+
+
+@if (SelectedStudents.Any())
+{
+
+ @foreach (var student in SelectedStudents.OrderBy(s => s.FirstName))
+ {
+
+ }
+
+}
+
+@code {
+ [Parameter]
+ public IEnumerable Students { get; set; } = [];
+
+ [Parameter]
+ public IEnumerable SelectedStudents { get; set; } = [];
+
+ [Parameter]
+ public EventCallback> SelectedStudentsChanged { get; set; }
+
+ [Parameter]
+ public string? Title { get; set; }
+
+ [Parameter]
+ public string Label { get; set; } = "Search Students";
+
+ [Parameter]
+ public bool ShowFullName { get; set; } = true;
+
+ [Parameter]
+ public bool ShowGrade { get; set; } = false;
+
+ private Student? _currentStudent
+ {
+ get => _currentStudentValue;
+ set
+ {
+ _currentStudentValue = value;
+ if (value != null && !SelectedStudents.Contains(value))
+ {
+ var updatedList = SelectedStudents.Append(value).ToList();
+ SelectedStudentsChanged.InvokeAsync(updatedList);
+ _currentStudentValue = null;
+ }
+ }
+ }
+
+ private Student? _currentStudentValue;
+ private MudAutocomplete? _autocomplete;
+
+ private async Task> SearchStudents(string? searchText, CancellationToken cancellationToken)
+ {
+ if (string.IsNullOrWhiteSpace(searchText))
+ return Students.Where(s => !SelectedStudents.Contains(s));
+
+ var search = searchText.ToLower();
+ return Students
+ .Where(s => !SelectedStudents.Contains(s))
+ .Where(s => s.FirstName.ToLower().Contains(search) ||
+ s.LastName.ToLower().Contains(search))
+ .OrderBy(s => s.FirstName);
+ }
+
+ private void RemoveStudent(Student student)
+ {
+ var updatedList = SelectedStudents.Where(s => s.Id != student.Id).ToList();
+ SelectedStudentsChanged.InvokeAsync(updatedList);
+ }
+}