@implements IDisposable @inject IJSRuntime JSRuntime @inject IHttpClientFactory HttpClientFactory @inject ISnackbar Snackbar @foreach (var edge in Models) { } @foreach (var edge in Models) { } Update edge @UpdateModel.Id
Length: @SelectModelLength m
@foreach (var action in Actions) { @action.Name }
@foreach (var actionId in UpdateModel.Actions) {
@(Actions.FirstOrDefault(ac => ac.Id == actionId)?.Name)
}
Cancel Update
@code { [Parameter, EditorRequired] public MapEdgeModel Models { get; set; } = null!; [CascadingParameter] protected bool MapIsActive { get; set; } [Parameter] public EventCallback EdgeSelectedChanged { get; set; } [Parameter] public EditorState EditorState { get; set; } private EdgeUpdateModel UpdateModel = new(); private bool updateEdgeVisible; private string ActionsText { get; set; } = ""; private double SelectModelLength; private List Actions = []; private ActionDto? ActionSelected = null; private HttpClient Http = default!; protected override async Task OnAfterRenderAsync(bool firstRender) { await base.OnAfterRenderAsync(firstRender); if (!firstRender) return; Http = HttpClientFactory.CreateClient("MapManagerAPI"); Models.Changed += StateHasChanged; Models.EdgeSelectedChanged += async (model) => await EdgeSelectedChanged.InvokeAsync(model); } private async Task LoadActionAsync(Guid mapVersionId) { var result = await Http.GetFromJsonAsync>($"api/Actions/{mapVersionId}"); if (result is not null && result.Any()) { Actions.Clear(); Actions.AddRange(result); } if (Actions.Any()) ActionSelected = Actions.First(); StateHasChanged(); } private void AddAction() { if (ActionSelected is null) return; if (UpdateModel.Actions.Any(action => action == ActionSelected.Id)) { Snackbar.Add("Action đã tồn tại", Severity.Warning); return; } UpdateModel.Actions = [.. UpdateModel.Actions, ActionSelected.Id]; StateHasChanged(); } private void DeleteAction(Guid actionId) { UpdateModel.Actions = UpdateModel.Actions.Where(a => actionId != a).ToArray(); StateHasChanged(); } private async Task OnEdgeDoubleClick(EdgeModel model) { if (model == null || EditorState != EditorState.NavigationEdit) return; await LoadActionAsync(model.MapId); UpdateModel.Id = model.Id; UpdateModel.ControlPoint1X = model.ControlPoint1X; UpdateModel.ControlPoint1Y = model.ControlPoint1Y; UpdateModel.ControlPoint2X = model.ControlPoint2X; UpdateModel.ControlPoint2Y = model.ControlPoint2Y; UpdateModel.DirectionAllowed = model.DirectionAllowed; UpdateModel.MaxSpeed = model.MaxSpeed; UpdateModel.MaxHeight = model.MaxHeight; UpdateModel.MinHeight = model.MinHeight; UpdateModel.RotationAllowed = model.RotationAllowed; UpdateModel.MaxRotationSpeed = model.MaxRotationSpeed; UpdateModel.AllowedDeviationXy = model.AllowedDeviationXy; UpdateModel.AllowedDeviationTheta = model.AllowedDeviationTheta; UpdateModel.Actions = []; var actions = JsonSerializer.Deserialize(model.Actions); if (actions is not null && actions.Length > 0) { UpdateModel.Actions = [.. actions]; } SelectModelLength = MapEditorHelper.GetEdgeLength(new() { TrajectoryDegree = model.TrajectoryDegree, X1 = model.X1, Y1 = model.Y1, X2 = model.X2, Y2 = model.Y2, ControlPoint1X = model.ControlPoint1X, ControlPoint1Y = model.ControlPoint1Y, ControlPoint2X = model.ControlPoint2X, ControlPoint2Y = model.ControlPoint2Y, }); updateEdgeVisible = true; StateHasChanged(); } private void CancelUpdateEdge() { updateEdgeVisible = false; StateHasChanged(); } private async Task UpdateEdge() { var selectedModel = Models.FirstOrDefault(e => e.Id == UpdateModel.Id); if (selectedModel == null) { updateEdgeVisible = false; StateHasChanged(); return; } var result = await (await Http.PutAsJsonAsync($"api/Edges", UpdateModel)).Content.ReadFromJsonAsync(); if (result is null) { Snackbar.Add("Lỗi giao tiếp với hệ thống", Severity.Error); return; } else if (!result.IsSuccess) { Snackbar.Add(result.Message, Severity.Error); return; } selectedModel.UpdateData(UpdateModel); updateEdgeVisible = false; Snackbar.Add("Cập nhật thành công", Severity.Success); StateHasChanged(); } public void Dispose() { Models.Changed -= StateHasChanged; GC.SuppressFinalize(this); } }