@using RackPeek.Domain.Resources.Hardware.Desktops @using RackPeek.Domain.Resources.Hardware.Desktops.Cpus @using RackPeek.Domain.Resources.Hardware.Desktops.Drives @using RackPeek.Domain.Resources.Hardware.Desktops.Gpus @using RackPeek.Domain.Resources.Hardware.Desktops.Nics @using RackPeek.Domain.Resources.Models @using Shared.Rcl.Modals @inject GetDesktopUseCase GetDesktopUseCase @inject UpdateDesktopUseCase UpdateDesktopUseCase @inject DeleteDesktopUseCase DeleteDesktopUseCase @inject AddDesktopCpuUseCase AddCpuUseCase @inject UpdateDesktopCpuUseCase UpdateCpuUseCase @inject RemoveDesktopCpuUseCase RemoveCpuUseCase @inject AddDesktopDriveUseCase AddDriveUseCase @inject UpdateDesktopDriveUseCase UpdateDriveUseCase @inject RemoveDesktopDriveUseCase RemoveDriveUseCase @inject AddDesktopNicUseCase AddNicUseCase @inject UpdateDesktopNicUseCase UpdateNicUseCase @inject RemoveDesktopNicUseCase RemoveNicUseCase @inject AddDesktopGpuUseCase AddGpuUseCase @inject UpdateDesktopGpuUseCase UpdateGpuUseCase @inject RemoveDesktopGpuUseCase RemoveGpuUseCase @inject CloneDesktopUseCase CloneUseCase @inject RenameDesktopUseCase RenameUseCase @inject NavigationManager Nav
@Desktop.Name
@if (!string.IsNullOrWhiteSpace(Desktop.Model)) { @Desktop.Model }
CPU
@if (Desktop.Cpus?.Any() == true) { @foreach (var cpu in Desktop.Cpus) {
} }
RAM
@if (Desktop.Ram is not null) {
}
Drives
@if (Desktop.Drives?.Any() == true) { @foreach (var drive in Desktop.Drives) {
} }
NICs
@if (Desktop.Nics?.Any() == true) { @foreach (var nic in Desktop.Nics) {
} }
GPUs
@if (Desktop.Gpus?.Any() == true) { @foreach (var gpu in Desktop.Gpus) {
} }
Notes
@if (!_editingNotes) { } else { }
Are you sure you want to delete @Desktop.Name?
This will detach all dependent systems.
@code { [Parameter] [EditorRequired] public Desktop Desktop { get; set; } = default!; #region RAM private bool _isRamModalOpen; private void EditRam() { _isRamModalOpen = true; } private async Task HandleRamSubmit(Ram value) { _isRamModalOpen = false; await UpdateDesktopUseCase.ExecuteAsync(Desktop.Name, Desktop.Model, value.Size, value.Mts); Desktop = await GetDesktopUseCase.ExecuteAsync(Desktop.Name); } #endregion #region CPU bool _cpuModalOpen; int _editingCpuIndex; Cpu? _editingCpu; void OpenAddCpu() { _editingCpuIndex = -1; _editingCpu = null; _cpuModalOpen = true; } void OpenEditCpu(Cpu cpu) { _editingCpu = cpu; Desktop.Cpus ??= new List(); _editingCpuIndex = Desktop.Cpus.IndexOf(cpu); ; _cpuModalOpen = true; } async Task HandleCpuSubmit(Cpu cpu) { Desktop.Cpus ??= new List(); if (_editingCpuIndex < 0) { await AddCpuUseCase.ExecuteAsync(Desktop.Name, cpu.Model, cpu.Cores, cpu.Threads); } else { await UpdateCpuUseCase.ExecuteAsync(Desktop.Name, _editingCpuIndex, cpu.Model, cpu.Cores, cpu.Threads); } Desktop = await GetDesktopUseCase.ExecuteAsync(Desktop.Name); } async Task HandleCpuDelete(Cpu cpu) { await RemoveCpuUseCase.ExecuteAsync(Desktop.Name, _editingCpuIndex); Desktop = await GetDesktopUseCase.ExecuteAsync(Desktop.Name); } #endregion #region Drives bool _driveModalOpen; int _editingDriveIndex; Drive? _editingDrive; void OpenAddDrive() { _editingDriveIndex = -1; _editingDrive = null; _driveModalOpen = true; } void OpenEditDrive(Drive drive) { _editingDrive = drive; Desktop.Drives ??= new List(); _editingDriveIndex = Desktop.Drives.IndexOf(drive); ; _driveModalOpen = true; } async Task HandleDriveSubmit(Drive drive) { Desktop.Drives ??= new List(); if (_editingDriveIndex < 0) { await AddDriveUseCase.ExecuteAsync(Desktop.Name, drive.Type, drive.Size); } else { await UpdateDriveUseCase.ExecuteAsync(Desktop.Name, _editingDriveIndex, drive.Type, drive.Size); } Desktop = await GetDesktopUseCase.ExecuteAsync(Desktop.Name); StateHasChanged(); } async Task HandleDriveDelete(Drive drive) { await RemoveDriveUseCase.ExecuteAsync(Desktop.Name, _editingDriveIndex); Desktop = await GetDesktopUseCase.ExecuteAsync(Desktop.Name); StateHasChanged(); } #endregion #region NICs bool _nicModalOpen; int _editingNicIndex; Nic? _editingNic; void OpenAddNic() { _editingNicIndex = -1; _editingNic = null; _nicModalOpen = true; } void OpenEditNic(Nic nic) { Desktop.Nics ??= new List(); _editingNicIndex = Desktop.Nics.IndexOf(nic); _editingNic = nic; _nicModalOpen = true; } async Task HandleNicSubmit(Nic nic) { Desktop.Nics ??= new List(); if (_editingNicIndex < 0) { await AddNicUseCase.ExecuteAsync( Desktop.Name, nic.Type, nic.Speed, nic.Ports); } else { await UpdateNicUseCase.ExecuteAsync( Desktop.Name, _editingNicIndex, nic.Type, nic.Speed, nic.Ports); } Desktop = await GetDesktopUseCase.ExecuteAsync(Desktop.Name); } async Task HandleNicDelete(Nic nic) { await RemoveNicUseCase.ExecuteAsync(Desktop.Name, _editingNicIndex); Desktop = await GetDesktopUseCase.ExecuteAsync(Desktop.Name); } #endregion #region GPUs bool _gpuModalOpen; int _editingGpuIndex; Gpu? _editingGpu; void OpenAddGpu() { _editingGpuIndex = -1; _editingGpu = null; _gpuModalOpen = true; } void OpenEditGpu(Gpu gpu) { Desktop.Gpus ??= new List(); _editingGpuIndex = Desktop.Gpus.IndexOf(gpu); _editingGpu = gpu; _gpuModalOpen = true; } async Task HandleGpuSubmit(Gpu gpu) { Desktop.Gpus ??= new List(); if (_editingGpuIndex < 0) { await AddGpuUseCase.ExecuteAsync( Desktop.Name, gpu.Model, gpu.Vram); } else { await UpdateGpuUseCase.ExecuteAsync( Desktop.Name, _editingGpuIndex, gpu.Model, gpu.Vram); } Desktop = await GetDesktopUseCase.ExecuteAsync(Desktop.Name); } async Task HandleGpuDelete(Gpu gpu) { await RemoveGpuUseCase.ExecuteAsync(Desktop.Name, _editingGpuIndex); Desktop = await GetDesktopUseCase.ExecuteAsync(Desktop.Name); } #endregion } @code { private bool _confirmDeleteOpen; [Parameter] public EventCallback OnDeleted { get; set; } void ConfirmDelete() { _confirmDeleteOpen = true; } async Task DeleteServer() { _confirmDeleteOpen = false; await DeleteDesktopUseCase.ExecuteAsync(Desktop.Name); if (OnDeleted.HasDelegate) await OnDeleted.InvokeAsync(Desktop.Name); } } @code { bool _renameOpen; void OpenRename() { _renameOpen = true; } async Task HandleRenameSubmit(string newName) { await RenameUseCase.ExecuteAsync(Desktop.Name, newName); Nav.NavigateTo($"resources/hardware/{newName}"); } } @code { bool _cloneOpen; void OpenClone() { _cloneOpen = true; } async Task HandleCloneSubmit(string newName) { await CloneUseCase.ExecuteAsync(Desktop.Name, newName); Nav.NavigateTo($"resources/hardware/{newName}"); } } @code { bool _editingNotes; string? _notesDraft; void BeginNotesEdit() { _editingNotes = true; _notesDraft = Desktop.Notes; // draft buffer } void CancelNotesEdit() { _editingNotes = false; _notesDraft = null; // discard } async Task SaveNotes() { _editingNotes = false; await UpdateDesktopUseCase.ExecuteAsync( Desktop.Name, Desktop.Model, Desktop.Ram?.Size, Desktop.Ram?.Mts, _notesDraft); Desktop = await GetDesktopUseCase.ExecuteAsync(Desktop.Name); _notesDraft = null; } }