@using ZB.MOM.WW.OtOpcUa.Admin.Services @using ZB.MOM.WW.OtOpcUa.Configuration.Entities @using ZB.MOM.WW.OtOpcUa.Configuration.Validation @inject EquipmentService EquipmentSvc @inject NavigationManager Nav

Equipment (draft gen @GenerationId)

@if (_equipment is null) {

Loading…

} else if (_equipment.Count == 0 && !_showForm) {

No equipment in this draft yet.

} else if (_equipment.Count > 0) { @foreach (var e in _equipment) { }
EquipmentIdNameMachineCodeZTagSAPID Manufacturer / ModelSerial
@e.EquipmentId @e.Name @e.MachineCode @e.ZTag @e.SAPID @e.Manufacturer / @e.Model @e.SerialNumber
} @if (_showForm) {
@(_editMode ? "Edit equipment" : "New equipment")
@if (_error is not null) {
@_error
}
} @code { [Parameter] public long GenerationId { get; set; } [Parameter] public string ClusterId { get; set; } = string.Empty; private void GoImport() => Nav.NavigateTo($"/clusters/{ClusterId}/draft/{GenerationId}/import-equipment"); private List? _equipment; private bool _showForm; private bool _editMode; private Equipment _draft = NewBlankDraft(); private string? _error; private static Equipment NewBlankDraft() => new() { EquipmentId = string.Empty, DriverInstanceId = string.Empty, UnsLineId = string.Empty, Name = string.Empty, MachineCode = string.Empty, }; protected override async Task OnParametersSetAsync() => await ReloadAsync(); private async Task ReloadAsync() { _equipment = await EquipmentSvc.ListAsync(GenerationId, CancellationToken.None); } private void StartAdd() { _draft = NewBlankDraft(); _editMode = false; _error = null; _showForm = true; } private void StartEdit(Equipment row) { // Shallow-clone so Cancel doesn't mutate the list-displayed row with in-flight form edits. _draft = new Equipment { EquipmentRowId = row.EquipmentRowId, GenerationId = row.GenerationId, EquipmentId = row.EquipmentId, EquipmentUuid = row.EquipmentUuid, DriverInstanceId = row.DriverInstanceId, DeviceId = row.DeviceId, UnsLineId = row.UnsLineId, Name = row.Name, MachineCode = row.MachineCode, ZTag = row.ZTag, SAPID = row.SAPID, Manufacturer = row.Manufacturer, Model = row.Model, SerialNumber = row.SerialNumber, HardwareRevision = row.HardwareRevision, SoftwareRevision = row.SoftwareRevision, YearOfConstruction = row.YearOfConstruction, AssetLocation = row.AssetLocation, ManufacturerUri = row.ManufacturerUri, DeviceManualUri = row.DeviceManualUri, EquipmentClassRef = row.EquipmentClassRef, Enabled = row.Enabled, }; _editMode = true; _error = null; _showForm = true; } private void Cancel() { _showForm = false; _editMode = false; } private async Task SaveAsync() { _error = null; try { if (_editMode) { await EquipmentSvc.UpdateAsync(_draft, CancellationToken.None); } else { _draft.EquipmentUuid = Guid.NewGuid(); _draft.EquipmentId = DraftValidator.DeriveEquipmentId(_draft.EquipmentUuid); _draft.GenerationId = GenerationId; await EquipmentSvc.CreateAsync(GenerationId, _draft, CancellationToken.None); } _showForm = false; _editMode = false; await ReloadAsync(); } catch (Exception ex) { _error = ex.Message; } } private async Task DeleteAsync(Guid id) { await EquipmentSvc.DeleteAsync(id, CancellationToken.None); await ReloadAsync(); } }