124 lines
5.2 KiB
Plaintext
124 lines
5.2 KiB
Plaintext
<MudPaper Class="pa-4 h-100 d-flex flex-column" Elevation="2">
|
|
<MudStack Row AlignItems="AlignItems.Center" Justify="Justify.SpaceBetween"
|
|
Class="mb-4 flex-shrink-0">
|
|
<MudText Typo="Typo.h6">🔗 Edges</MudText>
|
|
|
|
<MudButton Variant="Variant.Filled"
|
|
Color="Color.Primary"
|
|
StartIcon="@Icons.Material.Filled.Add"
|
|
OnClick="AddEdgeAsync">
|
|
Add Edge
|
|
</MudButton>
|
|
</MudStack>
|
|
|
|
<div class="flex-grow-1" style="overflow:auto;">
|
|
<MudExpansionPanels MultiExpansion>
|
|
@foreach (var edge in Order.Edges)
|
|
{
|
|
<MudExpansionPanel @key="edge">
|
|
<!-- ================= HEADER ================= -->
|
|
<TitleContent>
|
|
<div class="d-flex align-center justify-space-between w-100">
|
|
|
|
<!-- LEFT: Edge information -->
|
|
<div class="d-flex align-center gap-3">
|
|
<MudText Typo="Typo.subtitle1" Class="fw-bold">
|
|
@edge.EdgeId
|
|
</MudText>
|
|
|
|
<MudChip T="string"
|
|
Size="Size.Small"
|
|
Color="Color.Info"
|
|
Variant="Variant.Outlined">
|
|
@edge.StartNodeId → @edge.EndNodeId
|
|
</MudChip>
|
|
</div>
|
|
|
|
<!-- RIGHT: Delete -->
|
|
<MudIconButton Icon="@Icons.Material.Filled.Delete"
|
|
Color="Color.Error"
|
|
Size="Size.Small"
|
|
OnClick="@(() => RemoveEdgeAsync(edge))" />
|
|
</div>
|
|
</TitleContent>
|
|
|
|
<!-- ================= BODY ================= -->
|
|
<ChildContent>
|
|
<MudGrid Spacing="3">
|
|
|
|
<!-- Edge ID -->
|
|
<MudItem xs="12">
|
|
<MudTextField Value="@edge.EdgeId"
|
|
ValueChanged="@((string v) => SetValue(() => edge.EdgeId = v))"
|
|
Immediate="true"
|
|
Label="Edge ID" />
|
|
</MudItem>
|
|
|
|
<!-- Start Node -->
|
|
<MudItem xs="12">
|
|
<MudSelect T="string"
|
|
Value="@edge.StartNodeId"
|
|
ValueChanged="@((string v) => SetValue(() => edge.StartNodeId = v))"
|
|
Dense
|
|
Label="Start Node"
|
|
Required="true">
|
|
@foreach (var n in Order.Nodes)
|
|
{
|
|
<MudSelectItem Value="@n.NodeId">
|
|
@n.NodeId
|
|
</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
</MudItem>
|
|
|
|
<!-- End Node -->
|
|
<MudItem xs="12">
|
|
<MudSelect T="string"
|
|
Value="@edge.EndNodeId"
|
|
ValueChanged="@((string v) => SetValue(() => edge.EndNodeId = v))"
|
|
Dense
|
|
Label="End Node"
|
|
Required="true">
|
|
@foreach (var n in Order.Nodes)
|
|
{
|
|
<MudSelectItem Value="@n.NodeId">
|
|
@n.NodeId
|
|
</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
</MudItem>
|
|
</MudGrid>
|
|
</ChildContent>
|
|
</MudExpansionPanel>
|
|
}
|
|
</MudExpansionPanels>
|
|
</div>
|
|
</MudPaper>
|
|
|
|
@code {
|
|
[Parameter] public OrderMessage Order { get; set; } = default!;
|
|
|
|
[Parameter] public EventCallback OnAddEdge { get; set; }
|
|
[Parameter] public EventCallback<VDA5050.Order.Edge> OnRemoveEdge { get; set; }
|
|
|
|
[Parameter] public EventCallback OnOrderChanged { get; set; }
|
|
|
|
private async Task SetValue(System.Action setter)
|
|
{
|
|
setter();
|
|
await OnOrderChanged.InvokeAsync();
|
|
}
|
|
|
|
private async Task AddEdgeAsync()
|
|
{
|
|
await OnAddEdge.InvokeAsync();
|
|
await OnOrderChanged.InvokeAsync();
|
|
}
|
|
|
|
private async Task RemoveEdgeAsync(VDA5050.Order.Edge edge)
|
|
{
|
|
await OnRemoveEdge.InvokeAsync(edge);
|
|
await OnOrderChanged.InvokeAsync();
|
|
}
|
|
}
|