MudTable is now sortable

This commit is contained in:
Rhywden
2026-08-24 13:11:28 +02:00
parent a030cc517a
commit c071489eec
@@ -8,13 +8,15 @@
<PageTitle>User Comparison</PageTitle>
<button class="btn btn-primary" @onclick="DownloadCsvAsync" disabled="@(!LdapUsers.Any())">Export CSV</button>
<MudButton OnClick="DownloadCsvAsync" Disabled="@(!LdapUsers.Any())">Export CSV</MudButton>
<h1>User Comparison</h1>
<MudText Typo="Typo.h1">User Comparison</MudText>
@if (!AdminState.Value.LdapUsersLoaded || !AdminState.Value.MoodleUsersLoaded)
{
<p><em>Loading users...</em></p>
<MudAlert Severity="Severity.Info" Variant="Variant.Outlined">
Loading @string.Join(" and ", PendingUserImports, " users")...
</MudAlert>
}
else
{
@@ -27,19 +29,21 @@ else
@if (!CombinedUsers.Any())
{
<p>No users found.</p>
<MudAlert Severity="Severity.Warning" Variant="Variant.Outlined">
No users found.
</MudAlert>
}
else
{
<MudTable T="CombinedUser" Items="@CombinedUsers" Hover="true" Dense="true" RowsPerPage="25">
<HeaderContent>
<MudTh>Username</MudTh>
<MudTh>Classroom</MudTh>
<MudTh>Surname</MudTh>
<MudTh>Given name</MudTh>
<MudTh>Role</MudTh>
<MudTh>Exists in LDAP</MudTh>
<MudTh>Exists in Moodle</MudTh>
<MudTh><MudTableSortLabel SortBy="SortByUsername">Username</MudTableSortLabel></MudTh>
<MudTh><MudTableSortLabel SortBy="SortByClassroom">Classroom</MudTableSortLabel></MudTh>
<MudTh><MudTableSortLabel SortBy="SortBySurname">Surname</MudTableSortLabel></MudTh>
<MudTh><MudTableSortLabel SortBy="SortByGivenName">Given name</MudTableSortLabel></MudTh>
<MudTh><MudTableSortLabel SortBy="SortByRole">Role</MudTableSortLabel></MudTh>
<MudTh><MudTableSortLabel SortBy="SortByLdapExistence">Exists in LDAP</MudTableSortLabel></MudTh>
<MudTh><MudTableSortLabel SortBy="SortByMoodleExistence">Exists in Moodle</MudTableSortLabel></MudTh>
</HeaderContent>
<RowTemplate>
<MudTd DataLabel="Username">@context.Username</MudTd>
@@ -58,8 +62,32 @@ else
}
@code {
private static readonly Func<CombinedUser, object> SortByUsername = user => user.Username;
private static readonly Func<CombinedUser, object> SortByClassroom = user => user.Classroom ?? string.Empty;
private static readonly Func<CombinedUser, object> SortBySurname = user => user.Surname ?? string.Empty;
private static readonly Func<CombinedUser, object> SortByGivenName = user => user.GivenName ?? string.Empty;
private static readonly Func<CombinedUser, object> SortByRole = user => user.Role?.ToString() ?? string.Empty;
private static readonly Func<CombinedUser, object> SortByLdapExistence = user => user.ExistsInLdap;
private static readonly Func<CombinedUser, object> SortByMoodleExistence = user => user.ExistsInMoodle;
private IEnumerable<Wollmilchsau.Models.LdapUser> LdapUsers => AdminState.Value.LdapUsers.Values;
private IEnumerable<string> PendingUserImports
{
get
{
if (!AdminState.Value.LdapUsersLoaded)
{
yield return "LDAP";
}
if (!AdminState.Value.MoodleUsersLoaded)
{
yield return "Moodle";
}
}
}
private IEnumerable<CombinedUser> CombinedUsers
{
get