@page "/raw" @attribute [Authorize(Policy = AdminUiPolicies.ConfigEditor)] @rendermode RenderMode.InteractiveServer @using ZB.MOM.WW.OtOpcUa.AdminUI.Uns @using ZB.MOM.WW.OtOpcUa.AdminUI.Components.Shared.Raw @inject IRawTreeService Svc @* Peer of GlobalUns (/uns) for the v3 Raw project tree — the cluster-rooted Enterprise → Cluster → Folder → Driver → Device → TagGroup → Tag hierarchy. Loads the eager roots on init, then hands off to RawTree, which lazily expands each container via IRawTreeService.LoadChildrenAsync and surfaces per-node context menus (real create/configure/tag modals arrive in later Batch-2 waves). *@ Raw

Raw

Changes apply on the next deployment.
Project tree
@if (_loading) {
Loading…
} else if (_loadError is not null) {
@_loadError
} else if (_roots.Count == 0) {
No clusters yet.
} else {
}
@code { private IReadOnlyList _roots = Array.Empty(); private bool _loading = true; private string? _loadError; protected override async Task OnInitializedAsync() { try { _roots = await Svc.LoadRootsAsync(); // Auto-expand the Enterprise roots so the Cluster level (which owns the lazy plumbing) is // visible on load, mirroring GlobalUns.ExpandStructural. Enterprise children (clusters) are // eagerly materialised by LoadRootsAsync, so this needs no lazy fetch; clusters stay // collapsed and load their folders/drivers on first expand. foreach (var enterprise in _roots) enterprise.Expanded = true; } catch (Exception ex) { _loadError = $"Failed to load the Raw tree: {ex.Message}"; } finally { _loading = false; } } }