labdb/Pages/Labs/List.razor
2022-11-15 18:07:10 +01:00

94 lines
2 KiB
Plaintext

@page "/labs"
@using Microsoft.EntityFrameworkCore
<PageTitle>Labs</PageTitle>
<h1>Labs</h1>
<a href="/labs/add" class="btn btn-primary">Add new</a>
<table class="table table-striped">
<thead>
<tr>
<td>Name</td>
<td>Location</td>
</tr>
</thead>
<tbody>
@foreach (var lab in Labs)
{
<tr>
<td>
<a href="@($"/labs/{lab.Id.Value}")">@lab.Name</a>
</td>
<td>
@if (!string.IsNullOrEmpty(lab.AddressCity))
{
<span>@lab.AddressCity</span>@(", ")
}
<span>@lab.Country.Name</span>
</td>
</tr>
}
</tbody>
</table>
<div>
<ul class="pagination">
@for (var i = 1; i <= TotalPages; i++)
{
var p = i;
<li class="page-item @(i == CurrentPage ? "active" : "")">
<a class="page-link" href="@($"/labs?page={p}")">@p</a>
</li>
}
</ul>
</div>
@code {
[Inject]
public IDbContextFactory<AppDbContext> DbContextFactory { get; set; } = null!;
[Parameter]
[SupplyParameterFromQuery(Name = "page")]
public int? CurrentPage { get; set; }
private int Count { get; set; }
private int PageSize { get; set; } = 10;
private int TotalPages => (int)Math.Ceiling(decimal.Divide(Count, PageSize));
private List<Lab> Labs { get; set; } = new();
private void Load()
{
using var ctx = DbContextFactory.CreateDbContext();
Count = ctx.Set<Lab>().Count();
var page = CurrentPage ?? 1;
Labs = ctx.Set<Lab>()
.OrderBy(x => x.Id)
.Skip((page - 1) * PageSize)
.Take(PageSize)
.Include(x => x.Country)
.ToList();
}
protected override void OnInitialized()
{
base.OnInitialized();
Load();
}
protected override void OnParametersSet()
{
base.OnParametersSet();
Load();
}
}