@inject IDialogService Dialog @inject ISnackbar Snackbar @inject IHttpClientFactory HttpClientFactory
Default 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()) { }
}
Create Element Property
@foreach (var type in ElementProperty.PropertyTypes) { @ElementProperty.GetPropertyTypeName(type) }
Cancel Create
@code { private bool CreatePropertyIsVisible; private ElementProperty ElementPropertyCreateModel = new(); private ElementModelDto? ElementModel = null; private List ElementProperties = []; private bool createPropertyValidate; private MudForm Form = default!; private bool IsEdit = false; private HttpClient Http = default!; protected override async Task OnAfterRenderAsync(bool firstRender) { await base.OnAfterRenderAsync(firstRender); if (!firstRender) return; Http = HttpClientFactory.CreateClient("MapManagerAPI"); } private void OpenElementProperty() { ElementPropertyCreateModel.Name = ""; ElementPropertyCreateModel.Type = ElementProperty.PropertyTypes[0].ToString(); ElementPropertyCreateModel.DefaultValue = ""; ElementPropertyCreateModel.ReadOnly = false; CreatePropertyIsVisible = true; StateHasChanged(); } public void SetElementModel(ElementModelDto? model) { ElementModel = model; ElementProperties.Clear(); if (model is not null && !string.IsNullOrEmpty(model.Content)) { var properties = JsonSerializer.Deserialize>(model.Content, JsonOptionExtends.Read); if (properties is not null) ElementProperties = [.. properties]; } StateHasChanged(); } private async Task CreateProperty() { if (string.IsNullOrEmpty(ElementPropertyCreateModel.Name)) { Snackbar.Add("Name không được để trống.", Severity.Warning); return; } if (ElementProperties.Any(p => p.Name == ElementPropertyCreateModel.Name)) { Snackbar.Add($"Tên Property {ElementPropertyCreateModel.Name} đã tồn tại, vui lòng chon tên khác!", Severity.Warning); return; } ElementProperties.Add(new ElementProperty() { Id = Guid.NewGuid(), Name = ElementPropertyCreateModel.Name, Type = ElementPropertyCreateModel.Type, DefaultValue = ElementPropertyCreateModel.DefaultValue, ReadOnly = ElementPropertyCreateModel.ReadOnly, }); await Save(); CreatePropertyIsVisible = false; StateHasChanged(); } public IEnumerable DefaultValidation(string value) { if (ElementPropertyCreateModel.Type == typeof(int).ToString()) { if (!int.TryParse(value, out _)) yield return "Giá trị mặc định không hợp lệ"; } else if (ElementPropertyCreateModel.Type == typeof(double).ToString()) { if (!double.TryParse(value, out _)) yield return "Giá trị mặc định không hợp lệ"; } else if (ElementPropertyCreateModel.Type == typeof(bool).ToString()) { if (!bool.TryParse(value, out _)) yield return "Giá trị mặc định không hợp lệ"; } } 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 DeleteProperty(ElementProperty property) { var parameters = new DialogParameters { { x => x.Content, $"Bạn có chắc chắn muốn xóa property {property.Name} đi không?" }, { x => x.ConfirmText, "Delete" }, { x => x.Color, Color.Secondary } }; var ConfirmDelete = await Dialog.ShowAsync("Xoá Property", parameters); var result = await ConfirmDelete.Result; if (result is not null && result.Data is not null && bool.TryParse(result.Data.ToString(), out bool data) && data) { var prope = ElementProperties.Remove(property); } StateHasChanged(); } private async Task Save() { if (ElementModel is null) return; var result = await (await Http.PutAsJsonAsync($"api/ElementModels", new ElementModelUpdateModel() { Id = ElementModel.Id, Name = ElementModel.Name, MapId = ElementModel.MapId, Width = ElementModel.Width, Height = ElementModel.Height, 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 Snackbar.Add("Cập nhật thành công", Severity.Success); IsEdit = false; StateHasChanged(); } }