feat: Update UI for Jobs and enhanced Materials

Navigation:
- Rename Projects to Jobs in NavMenu
- Add new icon for multi-material boxes

Home page:
- Update references from Projects to Jobs

Materials pages:
- Add Type and Grade columns to index
- Shape-specific dimension editing with typed inputs
- Error handling with detailed messages

Stock pages:
- Show Shape, Type, Grade, Size columns
- Display QuantityOnHand with badges

Shared components:
- LengthInput: Add nullable binding mode for optional dimensions
- LengthInput: Format on blur for better UX
- CutListReport: Update for Job model references

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-04 23:38:15 -05:00
parent c5da5dda98
commit 6388e003d3
11 changed files with 627 additions and 235 deletions

View File

@@ -1,5 +1,5 @@
@page "/tools"
@inject ProjectService ProjectService
@inject JobService JobService
@using CutList.Core.Formatting
<PageTitle>Cutting Tools</PageTitle>
@@ -122,7 +122,7 @@ else
protected override async Task OnInitializedAsync()
{
tools = await ProjectService.GetCuttingToolsAsync();
tools = await JobService.GetCuttingToolsAsync();
loading = false;
}
@@ -177,14 +177,14 @@ else
if (editingTool == null)
{
await ProjectService.CreateCuttingToolAsync(formTool);
await JobService.CreateCuttingToolAsync(formTool);
}
else
{
await ProjectService.UpdateCuttingToolAsync(formTool);
await JobService.UpdateCuttingToolAsync(formTool);
}
tools = await ProjectService.GetCuttingToolsAsync();
tools = await JobService.GetCuttingToolsAsync();
showForm = false;
editingTool = null;
}
@@ -205,8 +205,8 @@ else
{
if (toolToDelete != null)
{
await ProjectService.DeleteCuttingToolAsync(toolToDelete.Id);
tools = await ProjectService.GetCuttingToolsAsync();
await JobService.DeleteCuttingToolAsync(toolToDelete.Id);
tools = await JobService.GetCuttingToolsAsync();
}
}