@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);
}
}