@page "/materials"
@inject MaterialService MaterialService
@inject NavigationManager Navigation
Materials
Manage your material catalog here. Materials define the types of stock you work with — shape, size, type, and
grade. Once added, materials can be assigned to jobs and used to generate optimized cut lists.
@if (loading)
{
Loading...
}
else if (!string.IsNullOrEmpty(errorMessage))
{
Error loading materials:
@errorMessage
}
else if (materials.Count == 0)
{
}
else
{
Shape
Type
Grade
Size
Actions
@foreach (var material in pagedMaterials)
{
@material.Shape.GetDisplayName()
@material.Type
@material.Grade
@material.Size
Edit
ConfirmDelete(material)">Delete
}
}
@code {
private List materials = new();
private bool loading = true;
private string? errorMessage;
private int currentPage = 1;
private int pageSize = 25;
private ConfirmDialog deleteDialog = null!;
private Material? materialToDelete;
private string deleteMessage = "";
private IEnumerable pagedMaterials => materials.Skip((currentPage - 1) * pageSize).Take(pageSize);
protected override async Task OnInitializedAsync()
{
try
{
materials = await MaterialService.GetAllAsync();
}
catch (Exception ex)
{
errorMessage = ex.ToString();
}
finally
{
loading = false;
}
}
private void ConfirmDelete(Material material)
{
materialToDelete = material;
deleteMessage = $"Are you sure you want to delete \"{material.Shape} - {material.Size}\"?";
deleteDialog.Show();
}
private async Task DeleteConfirmed()
{
if (materialToDelete != null)
{
await MaterialService.DeleteAsync(materialToDelete.Id);
materials = await MaterialService.GetAllAsync();
var totalPages = (int)Math.Ceiling((double)materials.Count / pageSize);
if (currentPage > totalPages && totalPages > 0)
currentPage = totalPages;
}
}
private void OnPageChanged(int page) => currentPage = page;
}