@page "/operations" @using Hcs.WebApp.BackgroundServices @using Hcs.WebApp.Services @using Microsoft.AspNetCore.Authorization @implements IDisposable @attribute [Authorize] @inject AuthenticationStateProvider AuthenticationStateProvider @inject HeadquartersService HeadquartersService @inject EventsAggregator EventsAggregator Операции @code { PageState state; RadzenDataGrid dataGrid; ICollection? operations; protected override async Task OnAfterRenderAsync(bool firstRender) { await base.OnAfterRenderAsync(firstRender); if (firstRender) { ChangeState(PageState.Loading); var state = await AuthenticationStateProvider.GetAuthenticationStateAsync(); if (state.User.IsOperatorOrHigher()) { operations = await HeadquartersService.GetOperationsAsync(); EventsAggregator.OnOperationCreated += OnOperationCreated; EventsAggregator.OnOperationStarted += OnOperationStarted; EventsAggregator.OnOperationExecuted += OnOperationExecuted; EventsAggregator.OnOperationEnded += OnOperationEnded; } ChangeState(PageState.Idle); } } void ChangeState(PageState state) { if (this.state == state) return; this.state = state; StateHasChanged(); } void OnOperationCreated(Operation operation) { InvokeAsync(() => { operations?.Add(operation); dataGrid.Reload(); }); } void OnOperationStarted(int operationId, int campaignId, DateTime startedAt) { InvokeAsync(() => { var targetOperation = operations?.FirstOrDefault(x => x.Id == operationId); if (targetOperation != null) { targetOperation.StartedAt = startedAt; dataGrid.Reload(); } }); } void OnOperationExecuted(int operationId, int campaignId, string messageGuid) { InvokeAsync(() => { var targetOperation = operations?.FirstOrDefault(x => x.Id == operationId); if (targetOperation != null) { targetOperation.MessageGuid = messageGuid; dataGrid.Reload(); } }); } void OnOperationEnded(int operationId, int campaignId, DateTime endedAt, string failureReason) { InvokeAsync(() => { var targetOperation = operations?.FirstOrDefault(x => x.Id == operationId); if (targetOperation != null) { targetOperation.EndedAt = endedAt; targetOperation.FailureReason = failureReason; dataGrid.Reload(); } }); } public void Dispose() { EventsAggregator.OnOperationCreated -= OnOperationCreated; EventsAggregator.OnOperationStarted -= OnOperationStarted; EventsAggregator.OnOperationExecuted -= OnOperationExecuted; EventsAggregator.OnOperationEnded -= OnOperationEnded; } }