@using RackPeek.Domain.Resources.Hardware.Laptops @using RackPeek.Domain.Resources.Hardware.Laptops.Cpus @using RackPeek.Domain.Resources.Hardware.Laptops.Drives @using RackPeek.Domain.Resources.Hardware.Laptops.Gpus @using RackPeek.Domain.Resources.Models @inject GetLaptopUseCase GetLaptopUseCase @inject UpdateLaptopUseCase UpdateLaptopUseCase @inject DeleteLaptopUseCase DeleteLaptopUseCase @inject AddLaptopCpuUseCase AddCpuUseCase @inject UpdateLaptopCpuUseCase UpdateCpuUseCase @inject RemoveLaptopCpuUseCase RemoveCpuUseCase @inject AddLaptopDriveUseCase AddDriveUseCase @inject UpdateLaptopDriveUseCase UpdateDriveUseCase @inject RemoveLaptopDriveUseCase RemoveDriveUseCase @inject AddLaptopGpuUseCase AddGpuUseCase @inject UpdateLaptopGpuUseCase UpdateGpuUseCase @inject RemoveLaptopGpuUseCase RemoveGpuUseCase @inject CloneLaptopUseCase CloneUseCase @inject RenameLaptopUseCase RenameUseCase @inject NavigationManager Nav
@Laptop.Name
@if (!string.IsNullOrWhiteSpace(Laptop.Model)) { @Laptop.Model }
CPU
@if (Laptop.Cpus?.Any() == true) { @foreach (var cpu in Laptop.Cpus) {
} }
RAM
@if (Laptop.Ram is not null) {
}
Drives
@if (Laptop.Drives?.Any() == true) { @foreach (var drive in Laptop.Drives) {
} }
GPUs
@if (Laptop.Gpus?.Any() == true) { @foreach (var gpu in Laptop.Gpus) {
} }
Notes
@if (!_editingNotes) { } else { }
Are you sure you want to delete @Laptop.Name?
This will detach all dependent systems.
@code { [Parameter] [EditorRequired] public Laptop Laptop { get; set; } = default!; #region RAM private bool _isRamModalOpen; private void EditRam() { _isRamModalOpen = true; } private async Task HandleRamSubmit(Ram value) { _isRamModalOpen = false; await UpdateLaptopUseCase.ExecuteAsync(Laptop.Name, Laptop.Model, value.Size, value.Mts, Laptop.Notes); Laptop = await GetLaptopUseCase.ExecuteAsync(Laptop.Name); } #endregion #region CPU bool _cpuModalOpen; int _editingCpuIndex; Cpu? _editingCpu; void OpenAddCpu() { _editingCpuIndex = -1; _editingCpu = null; _cpuModalOpen = true; } void OpenEditCpu(Cpu cpu) { _editingCpu = cpu; Laptop.Cpus ??= new List(); _editingCpuIndex = Laptop.Cpus.IndexOf(cpu); ; _cpuModalOpen = true; } async Task HandleCpuSubmit(Cpu cpu) { Laptop.Cpus ??= new List(); if (_editingCpuIndex < 0) { await AddCpuUseCase.ExecuteAsync(Laptop.Name, cpu.Model, cpu.Cores, cpu.Threads); } else { await UpdateCpuUseCase.ExecuteAsync(Laptop.Name, _editingCpuIndex, cpu.Model, cpu.Cores, cpu.Threads); } Laptop = await GetLaptopUseCase.ExecuteAsync(Laptop.Name); } async Task HandleCpuDelete(Cpu cpu) { await RemoveCpuUseCase.ExecuteAsync(Laptop.Name, _editingCpuIndex); Laptop = await GetLaptopUseCase.ExecuteAsync(Laptop.Name); } #endregion #region Drives bool _driveModalOpen; int _editingDriveIndex; Drive? _editingDrive; void OpenAddDrive() { _editingDriveIndex = -1; _editingDrive = null; _driveModalOpen = true; } void OpenEditDrive(Drive drive) { _editingDrive = drive; Laptop.Drives ??= new List(); _editingDriveIndex = Laptop.Drives.IndexOf(drive); ; _driveModalOpen = true; } async Task HandleDriveSubmit(Drive drive) { Laptop.Drives ??= new List(); if (_editingDriveIndex < 0) { await AddDriveUseCase.ExecuteAsync(Laptop.Name, drive.Type, drive.Size); } else { await UpdateDriveUseCase.ExecuteAsync(Laptop.Name, _editingDriveIndex, drive.Type, drive.Size); } Laptop = await GetLaptopUseCase.ExecuteAsync(Laptop.Name); StateHasChanged(); } async Task HandleDriveDelete(Drive drive) { await RemoveDriveUseCase.ExecuteAsync(Laptop.Name, _editingDriveIndex); Laptop = await GetLaptopUseCase.ExecuteAsync(Laptop.Name); StateHasChanged(); } #endregion #region GPUs bool _gpuModalOpen; int _editingGpuIndex; Gpu? _editingGpu; void OpenAddGpu() { _editingGpuIndex = -1; _editingGpu = null; _gpuModalOpen = true; } void OpenEditGpu(Gpu gpu) { Laptop.Gpus ??= new List(); _editingGpuIndex = Laptop.Gpus.IndexOf(gpu); _editingGpu = gpu; _gpuModalOpen = true; } async Task HandleGpuSubmit(Gpu gpu) { Laptop.Gpus ??= new List(); if (_editingGpuIndex < 0) { await AddGpuUseCase.ExecuteAsync( Laptop.Name, gpu.Model, gpu.Vram); } else { await UpdateGpuUseCase.ExecuteAsync( Laptop.Name, _editingGpuIndex, gpu.Model, gpu.Vram); } Laptop = await GetLaptopUseCase.ExecuteAsync(Laptop.Name); } async Task HandleGpuDelete(Gpu gpu) { await RemoveGpuUseCase.ExecuteAsync(Laptop.Name, _editingGpuIndex); Laptop = await GetLaptopUseCase.ExecuteAsync(Laptop.Name); } #endregion } @code { private bool _confirmDeleteOpen; [Parameter] public EventCallback OnDeleted { get; set; } void ConfirmDelete() { _confirmDeleteOpen = true; } async Task DeleteServer() { _confirmDeleteOpen = false; await DeleteLaptopUseCase.ExecuteAsync(Laptop.Name); if (OnDeleted.HasDelegate) await OnDeleted.InvokeAsync(Laptop.Name); } } @code { bool _renameOpen; void OpenRename() { _renameOpen = true; } async Task HandleRenameSubmit(string newName) { await RenameUseCase.ExecuteAsync(Laptop.Name, newName); Nav.NavigateTo($"resources/hardware/{newName}"); } } @code { bool _cloneOpen; void OpenClone() { _cloneOpen = true; } async Task HandleCloneSubmit(string newName) { await CloneUseCase.ExecuteAsync(Laptop.Name, newName); Nav.NavigateTo($"resources/hardware/{newName}"); } } @code { bool _editingNotes; string? _notesDraft; void BeginNotesEdit() { _editingNotes = true; _notesDraft = Laptop.Notes; // draft buffer } void CancelNotesEdit() { _editingNotes = false; _notesDraft = null; // discard } async Task SaveNotes() { _editingNotes = false; await UpdateLaptopUseCase.ExecuteAsync( Laptop.Name, Laptop.Model, Laptop.Ram?.Size, Laptop.Ram?.Mts, _notesDraft); Laptop = await GetLaptopUseCase.ExecuteAsync(Laptop.Name); _notesDraft = null; } }