@inject IHttpClientFactory HttpClientFactory @inject ISnackbar Snackbar @inject IDialogService Dialog
Properties
@foreach (var property in ElementProperties) {
@if (property.Type == typeof(int).ToString()) { if (int.TryParse(property.DefaultValue, out int value)) { } } else if (property.Type == typeof(double).ToString()) { if (double.TryParse(property.DefaultValue, out double value)) { } } else if (property.Type == typeof(bool).ToString()) { if (bool.TryParse(property.DefaultValue, out bool value)) { } } else if (property.Type == typeof(string).ToString()) { }
}
@code { [Parameter] public EventCallback ElementPropertyChagned { get; set; } private List ElementProperties = []; private bool IsEdit = false; private ElementDto? Element = null; private HttpClient Http = default!; protected override async Task OnAfterRenderAsync(bool firstRender) { await base.OnAfterRenderAsync(firstRender); if (!firstRender) return; Http = HttpClientFactory.CreateClient("MapManagerAPI"); } public void SetProperties(ElementDto? element) { ElementProperties.Clear(); Element = element; if (element is not null && !string.IsNullOrEmpty(element.Content)) { var properties = JsonSerializer.Deserialize>(element.Content, JsonOptionExtends.Read); if (properties is not null) ElementProperties.AddRange(properties); } StateHasChanged(); } private void DefaultIntValueChanged(Guid id, int value) { var property = ElementProperties.FirstOrDefault(p => p.Id == id); if (property is null) return; property.DefaultValue = value.ToString(); } private void DefaultDoubleValueChanged(Guid id, double value) { var property = ElementProperties.FirstOrDefault(p => p.Id == id); if (property is null) return; property.DefaultValue = value.ToString(); } private void DefaultBooleanValueChanged(Guid id, bool value) { var property = ElementProperties.FirstOrDefault(p => p.Id == id); if (property is null) return; property.DefaultValue = value.ToString(); } private async Task Save() { if (Element is null) return; var result = await (await Http.PutAsJsonAsync($"api/Elements", new ElementUpdateModel() { Id = Element.Id, Name = Element.Name, IsOpen = Element.IsOpen, OffsetX = Element.OffsetX, OffsetY = Element.OffsetY, Content = JsonSerializer.Serialize(ElementProperties, JsonOptionExtends.Write), })).Content.ReadFromJsonAsync>(); if (result == null) Snackbar.Add("Lỗi giao tiếp với hệ thống", Severity.Error); else if (!result.IsSuccess) Snackbar.Add(result.Message, Severity.Error); else if (result.Data is null) Snackbar.Add("Lỗi dữ liệu", Severity.Error); else { await ElementPropertyChagned.InvokeAsync(result.Data); Snackbar.Add("Cập nhật thành công", Severity.Success); } IsEdit = false; StateHasChanged(); } private async Task SynchronizeProperty() { if (Element is null) return; var parameters = new DialogParameters { { x => x.Content, $"Bạn có chắc chắn muốn đồng bộ tham số với Element Model không?" }, { x => x.ConfirmText, "Yes" }, { x => x.Color, Color.Primary } }; var confirm = await Dialog.ShowAsync("Đồng bộ tham số", parameters); var result = await confirm.Result; if (result is not null && result.Data is not null && bool.TryParse(result.Data.ToString(), out bool data) && data) { var elementModel = await LoadElementModels(Element.ModelId); if (elementModel is null) Snackbar.Add("Element Model không tồn tại", Severity.Error); else { List ModelProperties = []; var modelProperties = JsonSerializer.Deserialize>(elementModel.Content, JsonOptionExtends.Read); if (modelProperties is not null) ModelProperties.AddRange(modelProperties); parameters = new DialogParameters { { x => x.Content, $"Bạn có muốn đồng bộ giá trị với Element Model không?" }, { x => x.CancelText, "No" }, { x => x.ConfirmText, "Yes" }, { x => x.Color, Color.Primary } }; confirm = await Dialog.ShowAsync("Đồng bộ tham số", parameters); result = await confirm.Result; if (result is not null) { var valueSynchronize = result.Data is not null && bool.TryParse(result.Data.ToString(), out _); foreach (var modelProperty in ModelProperties) { var property = ElementProperties.FirstOrDefault(em => em.Id == modelProperty.Id); if(property is null) ElementProperties.Add(modelProperty); else { property.Name = modelProperty.Name; property.DefaultValue = valueSynchronize ? modelProperty.DefaultValue : property.DefaultValue; } } ElementProperties.RemoveAll(ep => !ModelProperties.Any(mp => mp.Id == ep.Id)); await Save(); } } StateHasChanged(); } } private async Task LoadElementModels(Guid modelId) { var elModel = await Http.GetFromJsonAsync>($"api/ElementModels/{modelId}"); if (elModel is null) Snackbar.Add("Lỗi giao tiếp với hệ thống", Severity.Error); else if (!elModel.IsSuccess) Snackbar.Add($"Có lỗi xảy ra: {elModel.Message}", Severity.Error); else return elModel.Data; return null; } }