📍 Nodes Add Node
@foreach (var node in Order.Nodes) {
@node.NodeId
@* *@ @* *@ @* *@ @* *@ @* *@ Actions @foreach (var act in node.Actions ?? Array.Empty()) { @foreach (var at in Enum.GetValues()) { @at } NONE SOFT HARD Action Parameters @foreach (var p in act.ActionParameters.Cast()) { } Add Parameter Remove Action } Add Action
}
@code { [Parameter] public OrderMessage Order { get; set; } = default!; [Parameter] public EventCallback OnAddNode { get; set; } [Parameter] public EventCallback OnRemoveNode { get; set; } [Parameter] public EventCallback OnEditNode { get; set; } [Parameter] public EventCallback OnAddAction { get; set; } [Parameter] public EventCallback OnRemoveAction { get; set; } [Parameter] public EventCallback OnAddActionParameter { get; set; } [Parameter] public EventCallback OnRemoveActionParameter { get; set; } [Parameter] public EventCallback OnOrderChanged { get; set; } // 🔥 helper realtime – KHÔNG ambiguous private async Task SetValue(System.Action setter) { setter(); await OnOrderChanged.InvokeAsync(); } private async Task AddNodeAsync() { await OnAddNode.InvokeAsync(); await OnOrderChanged.InvokeAsync(); } private async Task RemoveNodeAsync(Node node) { await OnRemoveNode.InvokeAsync(node); await OnOrderChanged.InvokeAsync(); } private async Task EditNodeAsync(Node node) { await OnEditNode.InvokeAsync(node); await OnOrderChanged.InvokeAsync(); } private async Task AddActionAsync(Node node) { await OnAddAction.InvokeAsync(node); await OnOrderChanged.InvokeAsync(); } private async Task RemoveActionAsync(Node node, VDA5050.InstantAction.Action action) { await OnRemoveAction.InvokeAsync(new NodeActionWrapper(node, action)); await OnOrderChanged.InvokeAsync(); } private async Task AddActionParameterAsync(VDA5050.InstantAction.Action act) { await OnAddActionParameter.InvokeAsync(act); await OnOrderChanged.InvokeAsync(); } private async Task RemoveActionParameterAsync(VDA5050.InstantAction.Action act, ActionParameter param) { await OnRemoveActionParameter.InvokeAsync(new ActionParamWrapper(act, param)); await OnOrderChanged.InvokeAsync(); } public record NodeActionWrapper(Node Node, VDA5050.InstantAction.Action Action); public record ActionParamWrapper(VDA5050.InstantAction.Action Action, ActionParameter Parameter); }