@using RackPeek.Domain.Resources.Hardware.Firewalls @using RackPeek.Domain.Resources.Hardware.Firewalls.Ports @using RackPeek.Domain.Resources.Models @inject UpdateFirewallUseCase UpdateFirewallUseCase @inject GetFirewallUseCase GetFirewallUseCase @inject AddFirewallPortUseCase AddFirewallPortUseCase @inject UpdateFirewallPortUseCase UpdateFirewallPortUseCase @inject RemoveFirewallPortUseCase RemoveFirewallPortUseCase @inject DeleteFirewallUseCase DeleteUseCase @inject CloneFirewallUseCase CloneUseCase @inject RenameFirewallUseCase RenameUseCase @inject NavigationManager Nav
@Firewall.Name
@if (!_isEditing) { } else { }
Model
@if (_isEditing) { } else if (!string.IsNullOrWhiteSpace(Firewall.Model)) {
@Firewall.Model
}
Features
@if (_isEditing) {
} else {
@if (Firewall.Managed == true) { Managed } @if (Firewall.Poe == true) { PoE }
}
Ports
@if (Firewall.Ports?.Any() == true) { @foreach (var port in Firewall.Ports) {
} }
Notes
@if (_isEditing) { } else { }
Are you sure you want to delete @Firewall.Name? @code { [Parameter][EditorRequired] public Firewall Firewall { get; set; } = default!; bool _isEditing; FirewallEditModel _edit = new(); void BeginEdit() { _edit = FirewallEditModel.From(Firewall); _isEditing = true; } async Task Save() { _isEditing = false; await UpdateFirewallUseCase.ExecuteAsync( Firewall.Name, _edit.Model, _edit.Managed, _edit.Poe, _edit.Notes); Firewall = await GetFirewallUseCase.ExecuteAsync(Firewall.Name); } void Cancel() { _isEditing = false; } #region Ports bool _portModalOpen; int _editingPortIndex; Port? _editingPort; void OpenAddPort() { _editingPortIndex = -1; _editingPort = null; _portModalOpen = true; } void OpenEditPort(Port port) { Firewall.Ports ??= new List(); _editingPortIndex = Firewall.Ports.IndexOf(port); _editingPort = port; _portModalOpen = true; } async Task HandlePortSubmit(Port port) { if (_editingPortIndex < 0) { await AddFirewallPortUseCase.ExecuteAsync( Firewall.Name, port.Type, port.Speed, port.Count); } else { await UpdateFirewallPortUseCase.ExecuteAsync( Firewall.Name, _editingPortIndex, port.Type, port.Speed, port.Count); } Firewall = await GetFirewallUseCase.ExecuteAsync(Firewall.Name); StateHasChanged(); } async Task HandlePortDelete(Port _) { await RemoveFirewallPortUseCase.ExecuteAsync( Firewall.Name, _editingPortIndex); Firewall = await GetFirewallUseCase.ExecuteAsync(Firewall.Name); StateHasChanged(); } #endregion public class FirewallEditModel { public string? Model { get; set; } public bool? Managed { get; set; } public bool? Poe { get; set; } public string? Notes { get; set; } public static FirewallEditModel From(Firewall firewall) { return new FirewallEditModel { Model = firewall.Model, Managed = firewall.Managed, Poe = firewall.Poe, Notes = firewall.Notes }; } } } @code { private bool _confirmDeleteOpen; [Parameter] public EventCallback OnDeleted { get; set; } void ConfirmDelete() { _confirmDeleteOpen = true; } async Task DeleteServer() { _confirmDeleteOpen = false; await DeleteUseCase.ExecuteAsync(Firewall.Name); if (OnDeleted.HasDelegate) await OnDeleted.InvokeAsync(Firewall.Name); } } @code { bool _renameOpen; void OpenRename() { _renameOpen = true; } async Task HandleRenameSubmit(string newName) { await RenameUseCase.ExecuteAsync(Firewall.Name, newName); Nav.NavigateTo($"resources/hardware/{newName}"); } } @code { bool _cloneOpen; void OpenClone() { _cloneOpen = true; } async Task HandleCloneSubmit(string newName) { await CloneUseCase.ExecuteAsync(Firewall.Name, newName); Nav.NavigateTo($"resources/hardware/{newName}"); } }