@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 { @foreach (var g in _generations) { }
IDStatusCreatedPublishedPublishedByNotes
@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}"), }; }