@page "/navigation-maps/elements/{Id:guid}"
@attribute [Authorize]
@using RobotNet.MapShares.Dtos
@using RobotNet.Shares
@using RobotNet.WebApp.Maps.Components.Element
@inject IJSRuntime JSRuntime
@inject IHttpClientFactory HttpClientFactory
@inject ISnackbar Snackbar
Map Element
@code {
[Parameter, EditorRequired]
public Guid Id { get; set; }
public List ElementModels { get; set; } = [];
public List Elements { get; set; } = [];
private bool IsLoading { get; set; }
private MapInfoDto MapInfo = new();
private ElementDefaultProperty ElementDefaultPropertyRef = default!;
private ElementImage ElementImageRef = default!;
private MapElement MapElementRef = default!;
private ElementPropertyTable ElementPropertyRef = default!;
private HttpClient Http = default!;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await base.OnAfterRenderAsync(firstRender);
if (!firstRender) return;
Http = HttpClientFactory.CreateClient("MapManagerAPI");
var reponse = await Http.GetFromJsonAsync>($"api/MapsManager/{Id}");
if (reponse is not null && reponse.Data is not null) MapInfo = reponse.Data;
await LoadElementModels();
StateHasChanged();
}
private async Task LoadElementModels()
{
IsLoading = true;
ElementModels.Clear();
StateHasChanged();
var elModels = await Http.GetFromJsonAsync>>($"api/ElementModels/map/{Id}");
if (elModels is null) Snackbar.Add("Lỗi giao tiếp với hệ thống", Severity.Error);
else if (!elModels.IsSuccess) Snackbar.Add($"Có lỗi xảy ra: {elModels.Message}", Severity.Error);
else if (elModels.Data is null || !elModels.Data.Any())
{
Snackbar.Add("Không có mô hình phần tử nào được tìm thấy", Severity.Warning);
}
else
{
ElementModels.AddRange(elModels.Data.OrderBy(el => el.Name));
}
IsLoading = false;
StateHasChanged();
}
private async Task ElementModelSelectChanged(ElementModelDto? model)
{
ElementDefaultPropertyRef.SetElementModel(model);
ElementImageRef.SetElementModel(model);
await MapElementRef.SetData(model);
}
private void ElementSelectChanged(ElementDto? model) => ElementPropertyRef.SetProperties(model);
}