@using RackPeek.Domain.Resources.Desktops @using RackPeek.Domain.Resources.SubResources @using RackPeek.Domain.UseCases.Cpus @using RackPeek.Domain.UseCases.Drives @using RackPeek.Domain.UseCases.Gpus @using Shared.Rcl.Hardware @inject IGetResourceByNameUseCase GetByNameUseCase @inject UpdateDesktopUseCase UpdateUseCase @inject IDeleteResourceUseCase DeleteUseCase @inject IAddCpuUseCase AddCpuUseCase @inject IUpdateCpuUseCase UpdateCpuUseCase @inject IRemoveCpuUseCase RemoveCpuUseCase @inject IAddDriveUseCase AddDriveUseCase @inject IUpdateDriveUseCase UpdateDriveUseCase @inject IRemoveDriveUseCase RemoveDriveUseCase @inject IAddGpuUseCase AddGpuUseCase @inject IUpdateGpuUseCase UpdateGpuUseCase @inject IRemoveGpuUseCase RemoveGpuUseCase @inject ICloneResourceUseCase CloneUseCase @inject IRenameResourceUseCase 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) {
} }
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? @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 UpdateUseCase.ExecuteAsync(Desktop.Name, Desktop.Model, value?.Size ?? 0, value?.Mts ?? 0); Desktop = await GetByNameUseCase.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 GetByNameUseCase.ExecuteAsync(Desktop.Name); } async Task HandleCpuDelete(Cpu cpu) { await RemoveCpuUseCase.ExecuteAsync(Desktop.Name, _editingCpuIndex); Desktop = await GetByNameUseCase.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 GetByNameUseCase.ExecuteAsync(Desktop.Name); StateHasChanged(); } async Task HandleDriveDelete(Drive drive) { await RemoveDriveUseCase.ExecuteAsync(Desktop.Name, _editingDriveIndex); Desktop = await GetByNameUseCase.ExecuteAsync(Desktop.Name); StateHasChanged(); } #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 GetByNameUseCase.ExecuteAsync(Desktop.Name); } async Task HandleGpuDelete(Gpu gpu) { await RemoveGpuUseCase.ExecuteAsync(Desktop.Name, _editingGpuIndex); Desktop = await GetByNameUseCase.ExecuteAsync(Desktop.Name); } #endregion } @code { private bool _confirmDeleteOpen; [Parameter] public EventCallback OnDeleted { get; set; } void ConfirmDelete() { _confirmDeleteOpen = true; } async Task DeleteServer() { _confirmDeleteOpen = false; await DeleteUseCase.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/{Uri.EscapeDataString(newName)}"); } } @code { bool _cloneOpen; void OpenClone() { _cloneOpen = true; } async Task HandleCloneSubmit(string newName) { await CloneUseCase.ExecuteAsync(Desktop.Name, newName); Nav.NavigateTo($"resources/hardware/{Uri.EscapeDataString(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 UpdateUseCase.ExecuteAsync( Desktop.Name, Desktop.Model, Desktop.Ram?.Size, Desktop.Ram?.Mts, _notesDraft); Desktop = await GetByNameUseCase.ExecuteAsync(Desktop.Name); _notesDraft = null; } }