@using ZB.MOM.WW.OtOpcUa.Admin.Services @* Per-section diff renderer — the base used by DiffViewer for every known TableName. Caps output at RowCap rows so a pathological draft (e.g. 20k tags churned) can't freeze the Blazor render; overflow banner tells operator how many rows were hidden. *@
@Title @Description
@if (_added > 0) { +@_added } @if (_removed > 0) { −@_removed } @if (_modified > 0) { ~@_modified } @if (_total == 0) { no changes }
@if (_total == 0) {
No changes in this section.
} else { @if (_total > RowCap) {
Showing the first @RowCap of @_total rows — cap protects the browser from megabyte-class diffs. Inspect the remainder via the SQL sp_ComputeGenerationDiff directly.
}
@foreach (var r in _visibleRows) { }
LogicalIdChange
@r.LogicalId @switch (r.ChangeKind) { case "Added": @r.ChangeKind break; case "Removed": @r.ChangeKind break; case "Modified": @r.ChangeKind break; default: @r.ChangeKind break; }
}
@code { /// Default row-cap per section — matches task #156's acceptance criterion. public const int DefaultRowCap = 1000; [Parameter, EditorRequired] public string Title { get; set; } = string.Empty; [Parameter] public string Description { get; set; } = string.Empty; [Parameter, EditorRequired] public IReadOnlyList Rows { get; set; } = []; [Parameter] public int RowCap { get; set; } = DefaultRowCap; private int _total; private int _added; private int _removed; private int _modified; private List _visibleRows = []; protected override void OnParametersSet() { _total = Rows.Count; _added = 0; _removed = 0; _modified = 0; foreach (var r in Rows) { switch (r.ChangeKind) { case "Added": _added++; break; case "Removed": _removed++; break; case "Modified": _modified++; break; } } _visibleRows = _total > RowCap ? Rows.Take(RowCap).ToList() : Rows.ToList(); } }