@implements IDisposable @inject IHttpClientFactory HttpClientFactory @inject ISnackbar Snackbar @foreach (var zone in Models) { } Update zone @UpdateModel.Id
Cancel Update
@code { [Parameter, EditorRequired] public MapZoneModel Models { get; set; } = null!; [Parameter] public bool IsShow { get; set; } [Parameter] public bool IsSetting { get; set; } [CascadingParameter] protected bool MapIsActive { get; set; } [Parameter] public EditorState EditorState { get; set; } [Parameter] public EventCallback<(ZoneModel, bool)> ActivedZoneChanged { get; set; } private ZoneUpdateModel UpdateModel = new(); private bool UpdateZoneVisiable = false; 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.ActivedZoneChanged += OnActivedZoneChanged; } private void OnActivedZoneChanged(ZoneModel model, bool state) { _ = ActivedZoneChanged.InvokeAsync((model, state)); } private void ZoneDoubleClick(ZoneModel model) { if (model == null || EditorState != EditorState.SettingZone) return; UpdateModel.Id = model.Id; UpdateModel.Type = model.Type; UpdateModel.Name = model.Name; UpdateModel.X1 = model.X1; UpdateModel.Y1 = model.Y1; UpdateModel.X2 = model.X2; UpdateModel.Y2 = model.Y2; UpdateModel.X3 = model.X3; UpdateModel.Y3 = model.Y3; UpdateModel.X4 = model.X4; UpdateModel.Y4 = model.Y4; UpdateZoneVisiable = true; StateHasChanged(); } private void CancelUpdateZone() { UpdateZoneVisiable = false; StateHasChanged(); } private async Task UpdateZone() { var selectedModel = Models.FirstOrDefault(e => e.Id == UpdateModel.Id); if (selectedModel == null) { UpdateZoneVisiable = false; StateHasChanged(); return; } var result = await (await Http.PutAsJsonAsync($"api/Zones", 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); UpdateZoneVisiable = false; Snackbar.Add("Cập nhật thành công", Severity.Success); StateHasChanged(); } public void Dispose() { Models.Changed -= StateHasChanged; Models.ActivedZoneChanged -= OnActivedZoneChanged; GC.SuppressFinalize(this); } }