@inherits MudComponentBase @using RobotApp.VDA5050.InstantAction @using System.Text.Json @using System.Text.Json.Serialization @using RobotApp.VDA5050.Order @using RobotApp.VDA5050.Type Edit Node: @Node.NodeId Actions @foreach (var act in Node.Actions) { @foreach (var at in Enum.GetValues()) { @at } NONE SOFT HARD Action Parameters @{ var parameters = act.ActionParameters ?? Array.Empty(); } @foreach (var p in parameters.Cast().ToList()) { var param = p; // capture cho lambda } Add Parameter Remove Action } Add Action Cancel Save @code { [CascadingParameter] public IMudDialogInstance MudDialog { get; set; } = default!; [Parameter] public Node Node { get; set; } = default!; private void Cancel() => MudDialog.Cancel(); private void Submit() => MudDialog.Close(DialogResult.Ok(true)); private void RemoveAction(VDA5050.InstantAction.Action actToRemove) { Node.Actions = Node.Actions .Where(a => a != actToRemove) .ToArray(); } private void AddNewAction() { Node.Actions = Node.Actions .Append(new VDA5050.InstantAction.Action { ActionId = Guid.NewGuid().ToString(), ActionType = ActionType.startPause.ToString(), BlockingType = "NONE", ActionParameters = Array.Empty() }) .ToArray(); } private void AddParameter(VDA5050.InstantAction.Action act) { var newParam = new UiActionParameter(); if (act.ActionParameters == null || act.ActionParameters.Length == 0) { act.ActionParameters = new[] { newParam }; } else { var list = act.ActionParameters.ToList(); list.Add(newParam); act.ActionParameters = list.ToArray(); } } private void RemoveParameter(VDA5050.InstantAction.Action act, UiActionParameter paramToRemove) { if (act.ActionParameters == null || act.ActionParameters.Length == 0) return; act.ActionParameters = act.ActionParameters .Where(p => p != paramToRemove) // so sánh reference .ToArray(); } // UiActionParameter vẫn giữ như cũ trong trang chính public class UiActionParameter : ActionParameter { [JsonIgnore] public string ValueString { get => Value?.ToString() ?? ""; set => Value = value; } } }