@using RackPeek.Domain.Resources.Connections @using RackPeek.Domain.Resources.SubResources @using RackPeek.Domain.UseCases.Ports @using Shared.Rcl.Connections @typeparam T where T : RackPeek.Domain.Resources.Resource, RackPeek.Domain.Resources.Servers.IPortResource @inject IAddPortUseCase AddNicUseCase @inject IUpdatePortUseCase UpdateNicUseCase @inject IRemovePortUseCase RemoveNicUseCase @inject IGetResourceByNameUseCase GetByNameUseCase
Ports
@if (Resource.Ports?.Any() == true) { @foreach (var nic in Resource.Ports) { var idx = GetPortIndex(nic);
} }
@code { [Parameter][EditorRequired] public T Resource { get; set; } = default!; [Parameter] public EventCallback OnResourceChanged { get; set; } [Parameter] public string? TestIdPrefix { get; set; } private string BaseTestId => string.IsNullOrWhiteSpace(TestIdPrefix) ? "port-group-editor" : $"{TestIdPrefix}-port-group"; bool _nicModalOpen; bool _connectionModalOpen; int _editingNicIndex; Port? _editingNic; PortReference? _selectedPort; void OpenAddNic() { _editingNicIndex = -1; _editingNic = null; _nicModalOpen = true; } void OpenEditNic(Port nic) { Resource.Ports ??= new List(); _editingNicIndex = Resource.Ports.IndexOf(nic); _editingNic = nic; _nicModalOpen = true; } async Task HandleNicSubmit(Port nic) { Resource.Ports ??= new List(); if (_editingNicIndex < 0) { await AddNicUseCase.ExecuteAsync( Resource.Name, nic.Type, nic.Speed, nic.Count); } else { await UpdateNicUseCase.ExecuteAsync( Resource.Name, _editingNicIndex, nic.Type, nic.Speed, nic.Count); } await RefreshResource(); } async Task HandleNicDelete(Port nic) { await RemoveNicUseCase.ExecuteAsync(Resource.Name, _editingNicIndex); await RefreshResource(); } async Task RefreshResource() { Resource = await GetByNameUseCase.ExecuteAsync(Resource.Name); if (OnResourceChanged.HasDelegate) await OnResourceChanged.InvokeAsync(Resource); StateHasChanged(); } int GetPortIndex(Port port) { Resource.Ports ??= new List(); return Resource.Ports.IndexOf(port); } void HandlePortClicked(PortReference port) { _selectedPort = port; _connectionModalOpen = true; } }