Files
chapter-organizer/WebApp/Components/Pages/StudentPages/Index.razor
T
2025-09-26 11:33:25 -04:00

102 lines
3.8 KiB
Plaintext

@page "/students"
@using Microsoft.EntityFrameworkCore
@using WebApp.Models
@inject AppDbContext Context
@inject IDialogService DialogService
<PageTitle>Students - TSA Chapter Organizer</PageTitle>
<MudText Typo="Typo.h3">Students</MudText>
<MudButton StartIcon="@Icons.Material.Filled.Create" Href="students/create">Create New</MudButton>
<MudButton StartIcon="@AppIcons.EventRank" Href="students/event-ranking">Event Rankings</MudButton>
<MudDataGrid T="Student" ServerData="ServerReload" @ref="_dataGrid" Filterable="true" RowsPerPage="25">
<Columns>
@* <PropertyColumn Property="@(e => e.Name)" Title="First Name" SortBy="e => e.FirstName" /> *@
<TemplateColumn Title="Name" SortBy="e => e.LastName" Sortable="true" >
<CellTemplate>
@context.Item.LastNameFirstName
@if (context.Item.OfficerRole != null)
{
<MudChip T="string" Icon="@(AppIcons.OfficerRoleIcon(context.Item.OfficerRole.Value))">@context.Item.OfficerRole</MudChip>
}
</CellTemplate>
</TemplateColumn>
<TemplateColumn Title="Grade (TSA Year)" SortBy="e => e.Grade" Sortable="true">
<CellTemplate>
@context.Item.Grade (@context.Item.TsaYear)
</CellTemplate>
</TemplateColumn>
<TemplateColumn>
<CellTemplate>
<MudStack Row>
<MudButtonGroup Size="Size.Small">
<MudTooltip Text="Details">
<MudIconButton Href="@($"/students/details?id={context.Item.Id}")" Icon="@Icons.Material.Filled.Description" />
</MudTooltip>
<MudTooltip Text="Edit">
<MudIconButton Href="@($"/students/edit?id={context.Item.Id}")" Icon="@Icons.Material.Filled.Edit" />
</MudTooltip>
<MudTooltip Text="Delete">
<MudIconButton Icon="@Icons.Material.Outlined.Delete"
Color="Color.Error"
OnClick="() => DeleteElement(context.Item)" />
</MudTooltip>
</MudButtonGroup>
</MudStack>
</CellTemplate>
</TemplateColumn>
</Columns>
<PagerContent>
<MudDataGridPager T="Student"></MudDataGridPager>
</PagerContent>
</MudDataGrid>
@code {
MudDataGrid<Student> _dataGrid = null!;
private async Task<GridData<Student>> ServerReload(GridState<Student> state)
{
var query =
Context.Students.OrderBy(e => e.LastName)
.Where(state.FilterDefinitions).OrderBy(state.SortDefinitions);
var totalItems = await query.CountAsync();
var pagedData = await query.Skip(state.Page * state.PageSize).Take(state.PageSize).ToArrayAsync();
return new GridData<Student>
{
TotalItems = totalItems,
Items = pagedData
};
}
private async Task DeleteElement(object obj)
{
//_isRowBlocked = true;
if (obj is Student student)
{
var result = await DialogService
.ShowMessageBox("Delete student",
(MarkupString)$"Are you sure want to delete <b>{student.Name}</b>?",
yesText:"Yes",
noText:"Cancel");
if (result == true)
{
Context.Students.Remove(student!);
await Context.SaveChangesAsync();
//Snackbar.Add($"Delete event: Delete of Element {element.Name}", Severity.Info);
}
}
//_isRowBlocked = false;
StateHasChanged();
_dataGrid.ReloadServerData();
}
}