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> <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) @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 else
{ {
@@ -27,19 +29,21 @@ else
@if (!CombinedUsers.Any()) @if (!CombinedUsers.Any())
{ {
<p>No users found.</p> <MudAlert Severity="Severity.Warning" Variant="Variant.Outlined">
No users found.
</MudAlert>
} }
else else
{ {
<MudTable T="CombinedUser" Items="@CombinedUsers" Hover="true" Dense="true" RowsPerPage="25"> <MudTable T="CombinedUser" Items="@CombinedUsers" Hover="true" Dense="true" RowsPerPage="25">
<HeaderContent> <HeaderContent>
<MudTh>Username</MudTh> <MudTh><MudTableSortLabel SortBy="SortByUsername">Username</MudTableSortLabel></MudTh>
<MudTh>Classroom</MudTh> <MudTh><MudTableSortLabel SortBy="SortByClassroom">Classroom</MudTableSortLabel></MudTh>
<MudTh>Surname</MudTh> <MudTh><MudTableSortLabel SortBy="SortBySurname">Surname</MudTableSortLabel></MudTh>
<MudTh>Given name</MudTh> <MudTh><MudTableSortLabel SortBy="SortByGivenName">Given name</MudTableSortLabel></MudTh>
<MudTh>Role</MudTh> <MudTh><MudTableSortLabel SortBy="SortByRole">Role</MudTableSortLabel></MudTh>
<MudTh>Exists in LDAP</MudTh> <MudTh><MudTableSortLabel SortBy="SortByLdapExistence">Exists in LDAP</MudTableSortLabel></MudTh>
<MudTh>Exists in Moodle</MudTh> <MudTh><MudTableSortLabel SortBy="SortByMoodleExistence">Exists in Moodle</MudTableSortLabel></MudTh>
</HeaderContent> </HeaderContent>
<RowTemplate> <RowTemplate>
<MudTd DataLabel="Username">@context.Username</MudTd> <MudTd DataLabel="Username">@context.Username</MudTd>
@@ -58,8 +62,32 @@ else
} }
@code { @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<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 private IEnumerable<CombinedUser> CombinedUsers
{ {
get get