Skip to content

Commit 30b74ee

Browse files
committed
feat: Clearable
1 parent cc13754 commit 30b74ee

File tree

1 file changed

+60
-4
lines changed
  • grade-management-new/GradeManagement.Client/Pages

1 file changed

+60
-4
lines changed

grade-management-new/GradeManagement.Client/Pages/Main.razor

Lines changed: 60 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,24 +36,56 @@
3636
<MudDivider Class="mb-4"/>
3737

3838
<MudStack Row="true" Class="mt-6">
39-
<MudSelectExtended ItemCollection="_courses?.ToList()" SearchBox="true" SelectAllPosition="SelectAllPosition.AfterSearchBox" SelectAll="true" MultiSelection="true" @bind-SelectedValues="_selectedCourse" @bind-SelectedValues:after="FilterChanged" T="string" Label="Course" AdornmentIcon="@Icons.Material.Filled.Search" AnchorOrigin="Origin.BottomCenter" Variant="Variant.Outlined">
39+
<MudSelectExtended Clearable="true" ItemCollection="_courses?.ToList()" SearchBox="true" SelectAllPosition="SelectAllPosition.AfterSearchBox" SelectAll="true" MultiSelection="true" @bind-SelectedValues="_selectedCourse" @bind-SelectedValues:after="FilterChanged" T="string" Label="Course" AdornmentIcon="@Icons.Material.Filled.Search" AnchorOrigin="Origin.BottomCenter" Variant="Variant.Outlined">
4040
@foreach (var course in _courses)
4141
{
4242
<MudSelectItemExtended T="string" Value="@course" Text="@course"/>
4343
}
4444
</MudSelectExtended>
4545
<MudSpacer/>
46-
<MudSelectExtended ItemCollection="_tasks?.ToList()" SearchBox="true" SelectAllPosition="SelectAllPosition.AfterSearchBox" SelectAll="true" MultiSelection="true" @bind-SelectedValues="_selectedExercise" @bind-SelectedValues:after="FilterChanged" T="string" Label="Exercise" AdornmentIcon="@Icons.Material.Filled.Search" AnchorOrigin="Origin.BottomCenter" Variant="Variant.Outlined">
46+
<MudSelectExtended Clearable="true" ItemCollection="_tasks?.ToList()" SearchBox="true" SelectAllPosition="SelectAllPosition.AfterSearchBox" SelectAll="true" MultiSelection="true" @bind-SelectedValues="_selectedExercise" @bind-SelectedValues:after="FilterChanged" T="string" Label="Exercise" AdornmentIcon="@Icons.Material.Filled.Search" AnchorOrigin="Origin.BottomCenter" Variant="Variant.Outlined">
4747
@foreach (var task in _tasks)
4848
{
4949
<MudSelectItemExtended T="string" Value="@task" Text="@task"/>
5050
}
5151
</MudSelectExtended>
5252
<MudSpacer/>
53+
<MudSelect T="string"
54+
Label="Status Filter"
55+
MultiSelection="true"
56+
@bind-SelectedValues="selectedStatuses"
57+
OnClose="ApplyFilter"
58+
Clearable="true"
59+
Variant="Variant.Outlined">
60+
<MudSelectItem T="string" Value="@("Merged")">
61+
<div class="d-flex align-center gap-2">
62+
<MudIcon Icon="@Icons.Material.Filled.Verified" Color="Color.Success" Size="Size.Small"/>
63+
<MudText>Merged</MudText>
64+
</div>
65+
</MudSelectItem>
66+
<MudSelectItem T="string" Value="@("Checked")">
67+
<div class="d-flex align-center gap-2">
68+
<MudIcon Icon="@Icons.Material.Filled.Check" Color="Color.Success" Size="Size.Small"/>
69+
<MudText>Teacher Checked</MudText>
70+
</div>
71+
</MudSelectItem>
72+
<MudSelectItem T="string" Value="@("CiRun")">
73+
<div class="d-flex align-center gap-2">
74+
<MudIcon Icon="@Icons.Material.Filled.Warning" Color="Color.Warning" Size="Size.Small"/>
75+
<MudText>CI Flow Ran</MudText>
76+
</div>
77+
</MudSelectItem>
78+
<MudSelectItem T="string" Value="@("NoCi")">
79+
<div class="d-flex align-center gap-2">
80+
<MudIcon Icon="@Icons.Material.Filled.Warning" Color="Color.Error" Size="Size.Small"/>
81+
<MudText>CI Did Not Run</MudText>
82+
</div>
83+
</MudSelectItem>
84+
</MudSelect>
5385

5486
<MudIconButton Icon="@Icons.Material.Filled.Download" Color="Color.Inherit" Edge="Edge.End" Size="Size.Large"/>
5587
</MudStack>
56-
<MudDataGrid Items="@_filteredData" T="Dashboard" Class="custom-grid">
88+
<MudDataGrid Items="@_filteredData" T="Dashboard" Class="custom-grid" FilterDefinitions="@FilterDefinitions">
5789
<Columns>
5890
<PropertyColumn Property="x => x.CourseName" Title="Course"/>
5991
<PropertyColumn Property="x => x.ExerciseName" Title="Exercise"/>
@@ -204,8 +236,14 @@
204236
private IEnumerable<string>? _tasks = new List<string>();
205237
private ICollection<Dashboard> _dashboardData = new List<Dashboard>();
206238
private ICollection<Dashboard> _filteredData = new List<Dashboard>();
239+
private IEnumerable<string> selectedStatuses = [];
240+
private List<IFilterDefinition<Dashboard>> FilterDefinitions = [];
207241

208242

243+
private void ApplyFilter()
244+
{
245+
}
246+
209247
private async Task Loading()
210248
{
211249
_selectedSubject = SubjectService.CurrentSubject;
@@ -241,7 +279,7 @@
241279

242280
private void FilterChanged()
243281
{
244-
_filteredData = _dashboardData.Where(x => (_selectedCourse.Contains(x.CourseName)) && ( _selectedExercise.Contains(x.ExerciseName))).ToList();
282+
_filteredData = _dashboardData.Where(x => (_selectedCourse.Contains(x.CourseName)) && (_selectedExercise.Contains(x.ExerciseName))).ToList();
245283
_courses = _dashboardData?.Select(x => x.CourseName).Distinct();
246284
_tasks = _dashboardData?.Select(x => x.ExerciseName).Distinct();
247285
}
@@ -254,5 +292,23 @@
254292
protected override void OnInitialized()
255293
{
256294
SubjectService.OnChange += OnSubjectChanged;
295+
296+
FilterDefinitions.Add(new FilterDefinition<Dashboard>
297+
{
298+
FilterFunction = x =>
299+
{
300+
if (!selectedStatuses.Any())
301+
return true;
302+
if (selectedStatuses.Contains("Merged") && MergedEntry(x))
303+
return true;
304+
if (selectedStatuses.Contains("Checked") && CheckedEntry(x) && !MergedEntry(x))
305+
return true;
306+
if (selectedStatuses.Contains("CiRun") && CiRunOnEntry(x) && !CheckedEntry(x) && !MergedEntry(x))
307+
return true;
308+
if (selectedStatuses.Contains("NoCi") && !CiRunOnEntry(x) && !CheckedEntry(x) && !MergedEntry(x))
309+
return true;
310+
return false;
311+
}
312+
});
257313
}
258314
}

0 commit comments

Comments
 (0)