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