|
36 | 36 | <MudDivider Class="mb-4"/> |
37 | 37 |
|
38 | 38 | <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"> |
40 | 40 | @foreach (var course in _courses) |
41 | 41 | { |
42 | 42 | <MudSelectItemExtended T="string" Value="@course" Text="@course"/> |
43 | 43 | } |
44 | 44 | </MudSelectExtended> |
45 | 45 | <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"> |
47 | 47 | @foreach (var task in _tasks) |
48 | 48 | { |
49 | 49 | <MudSelectItemExtended T="string" Value="@task" Text="@task"/> |
50 | 50 | } |
51 | 51 | </MudSelectExtended> |
52 | 52 | <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> |
53 | 85 |
|
54 | 86 | <MudIconButton Icon="@Icons.Material.Filled.Download" Color="Color.Inherit" Edge="Edge.End" Size="Size.Large"/> |
55 | 87 | </MudStack> |
56 | | - <MudDataGrid Items="@_filteredData" T="Dashboard" Class="custom-grid"> |
| 88 | + <MudDataGrid Items="@_filteredData" T="Dashboard" Class="custom-grid" FilterDefinitions="@FilterDefinitions"> |
57 | 89 | <Columns> |
58 | 90 | <PropertyColumn Property="x => x.CourseName" Title="Course"/> |
59 | 91 | <PropertyColumn Property="x => x.ExerciseName" Title="Exercise"/> |
|
204 | 236 | private IEnumerable<string>? _tasks = new List<string>(); |
205 | 237 | private ICollection<Dashboard> _dashboardData = new List<Dashboard>(); |
206 | 238 | private ICollection<Dashboard> _filteredData = new List<Dashboard>(); |
| 239 | + private IEnumerable<string> selectedStatuses = []; |
| 240 | + private List<IFilterDefinition<Dashboard>> FilterDefinitions = []; |
207 | 241 |
|
208 | 242 |
|
| 243 | + private void ApplyFilter() |
| 244 | + { |
| 245 | + } |
| 246 | + |
209 | 247 | private async Task Loading() |
210 | 248 | { |
211 | 249 | _selectedSubject = SubjectService.CurrentSubject; |
|
241 | 279 |
|
242 | 280 | private void FilterChanged() |
243 | 281 | { |
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(); |
245 | 283 | _courses = _dashboardData?.Select(x => x.CourseName).Distinct(); |
246 | 284 | _tasks = _dashboardData?.Select(x => x.ExerciseName).Distinct(); |
247 | 285 | } |
|
254 | 292 | protected override void OnInitialized() |
255 | 293 | { |
256 | 294 | 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 | + }); |
257 | 313 | } |
258 | 314 | } |
0 commit comments