@using ZB.MOM.WW.OtOpcUa.Admin.Services @using ZB.MOM.WW.OtOpcUa.Configuration.Entities @inject DriverInstanceService DriverSvc @inject NamespaceService NsSvc

DriverInstances

@if (_drivers is null) {

Loading…

} else if (_drivers.Count == 0) {

No drivers configured in this draft.

} else { @foreach (var d in _drivers) { }
DriverInstanceIdNameTypeNamespace
@d.DriverInstanceId@d.Name@d.DriverType@d.NamespaceId
} @if (_showForm && _namespaces is not null) {
Phase 1: generic JSON editor — per-driver schema validation arrives in each driver's phase (decision #94).
@if (_error is not null) {
@_error
}
} @code { [Parameter] public long GenerationId { get; set; } [Parameter] public string ClusterId { get; set; } = string.Empty; private List? _drivers; private List? _namespaces; private bool _showForm; private string _name = string.Empty; private string _type = "ModbusTcp"; private string _nsId = string.Empty; private string _config = "{}"; private string? _error; protected override async Task OnParametersSetAsync() => await ReloadAsync(); private async Task ReloadAsync() { _drivers = await DriverSvc.ListAsync(GenerationId, CancellationToken.None); _namespaces = await NsSvc.ListAsync(GenerationId, CancellationToken.None); _nsId = _namespaces.FirstOrDefault()?.NamespaceId ?? string.Empty; } private async Task SaveAsync() { _error = null; if (string.IsNullOrWhiteSpace(_name) || string.IsNullOrWhiteSpace(_nsId)) { _error = "Name and Namespace are required"; return; } try { await DriverSvc.AddAsync(GenerationId, ClusterId, _nsId, _name, _type, _config, CancellationToken.None); _name = string.Empty; _config = "{}"; _showForm = false; await ReloadAsync(); } catch (Exception ex) { _error = ex.Message; } } }