@using ZB.MOM.WW.OtOpcUa.Admin.Services
@using ZB.MOM.WW.OtOpcUa.Configuration.Entities
@using ZB.MOM.WW.OtOpcUa.Configuration.Enums
@inject GenerationService GenerationSvc
@inject NavigationManager Nav
Generations
@if (_generations is null) { Loading…
}
else if (_generations.Count == 0) { No generations in this cluster yet.
}
else
{
| ID | Status | Created | Published | PublishedBy | Notes | |
@foreach (var g in _generations)
{
@g.GenerationId |
@StatusBadge(g.Status) |
@g.CreatedAt.ToString("u") by @g.CreatedBy |
@(g.PublishedAt?.ToString("u") ?? "-") |
@g.PublishedBy |
@g.Notes |
@if (g.Status == GenerationStatus.Draft)
{
Open
}
else if (g.Status is GenerationStatus.Published or GenerationStatus.Superseded)
{
}
|
}
}
@if (_error is not null) { @_error
}
@code {
[Parameter] public string ClusterId { get; set; } = string.Empty;
private List? _generations;
private string? _error;
protected override async Task OnParametersSetAsync() => await ReloadAsync();
private async Task ReloadAsync() =>
_generations = await GenerationSvc.ListRecentAsync(ClusterId, 100, CancellationToken.None);
private async Task RollbackAsync(long targetId)
{
_error = null;
try
{
await GenerationSvc.RollbackAsync(ClusterId, targetId, notes: $"Rollback via Admin UI", CancellationToken.None);
await ReloadAsync();
}
catch (Exception ex) { _error = ex.Message; }
}
private static MarkupString StatusBadge(GenerationStatus s) => s switch
{
GenerationStatus.Draft => new MarkupString("Draft"),
GenerationStatus.Published => new MarkupString("Published"),
GenerationStatus.Superseded => new MarkupString("Superseded"),
_ => new MarkupString($"{s}"),
};
}