From 356ff26944993f8e48c2f7fd6e24653e119a600f Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sat, 13 Sep 2025 00:24:38 +0100 Subject: [PATCH] Add device reports management page with delete functionality --- .../Components/Admin/AdminNavMenu.razor | 3 + .../Components/Admin/Pages/Devices/List.razor | 99 +++++++++++++++++++ .../Admin/Pages/Devices/List.razor.cs | 72 ++++++++++++++ 3 files changed, 174 insertions(+) create mode 100644 Aaru.Server/Components/Admin/Pages/Devices/List.razor create mode 100644 Aaru.Server/Components/Admin/Pages/Devices/List.razor.cs diff --git a/Aaru.Server/Components/Admin/AdminNavMenu.razor b/Aaru.Server/Components/Admin/AdminNavMenu.razor index 21d25952..35697904 100644 --- a/Aaru.Server/Components/Admin/AdminNavMenu.razor +++ b/Aaru.Server/Components/Admin/AdminNavMenu.razor @@ -23,6 +23,9 @@ Compact Disc Offsets + + Device reports + Filesystems diff --git a/Aaru.Server/Components/Admin/Pages/Devices/List.razor b/Aaru.Server/Components/Admin/Pages/Devices/List.razor new file mode 100644 index 00000000..5fae27eb --- /dev/null +++ b/Aaru.Server/Components/Admin/Pages/Devices/List.razor @@ -0,0 +1,99 @@ +@page "/admin/devices" +@attribute [Authorize] +@layout AdminLayout + +@inject Microsoft.EntityFrameworkCore.IDbContextFactory DbContextFactory + +Device reports + +@if(!_initialized) +{ +
+

Loading...

+
+ + return; +} + +
+

Device reports

+ + + + + + + + + + + + + + + @foreach(Device item in _items) + { + + + + + + + + + + + } + +
+ @DisplayNameHelper.GetDisplayName(typeof(Device), nameof(Device.Manufacturer)) + + @DisplayNameHelper.GetDisplayName(typeof(Device), nameof(Device.Model)) + + @DisplayNameHelper.GetDisplayName(typeof(Device), nameof(Device.Revision)) + + @DisplayNameHelper.GetDisplayName(typeof(Device), nameof(Device.CompactFlash)) + + @DisplayNameHelper.GetDisplayName(typeof(Device), nameof(Device.OptimalMultipleSectorsRead)) + + v @DisplayNameHelper.GetDisplayName(typeof(Device), nameof(Device.CanReadGdRomUsingSwapDisc)) + + @DisplayNameHelper.GetDisplayName(typeof(Device), nameof(Device.Type)) + + Actions +
+ @item.Manufacturer + + @item.Model + + @item.Revision + + @item.CompactFlash + + @item.OptimalMultipleSectorsRead + + @item.CanReadGdRomUsingSwapDisc + + @item.Type + + + Details + + + Edit + + +
+
+ + + +
Are you sure you want to delete this device report?
+
+ + + + +
\ No newline at end of file diff --git a/Aaru.Server/Components/Admin/Pages/Devices/List.razor.cs b/Aaru.Server/Components/Admin/Pages/Devices/List.razor.cs new file mode 100644 index 00000000..f6a7e705 --- /dev/null +++ b/Aaru.Server/Components/Admin/Pages/Devices/List.razor.cs @@ -0,0 +1,72 @@ +using Aaru.Server.Database.Models; +using BlazorBootstrap; +using Microsoft.EntityFrameworkCore; +using DbContext = Aaru.Server.Database.DbContext; + +namespace Aaru.Server.Components.Admin.Pages.Devices; + +public partial class List +{ + private int _deleteId; + private Modal? _deleteModal; + bool _initialized; + List _items; + + + /// + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + + StateHasChanged(); + + await RefreshItemsAsync(); + + _initialized = true; + + StateHasChanged(); + } + + async Task RefreshItemsAsync() + { + await using DbContext ctx = await DbContextFactory.CreateDbContextAsync(); + + _items = await ctx.Devices.OrderBy(static d => d.Manufacturer) + .ThenBy(static d => d.Model) + .ThenBy(static d => d.Revision) + .ThenBy(static d => d.CompactFlash) + .ThenBy(static d => d.Type) + .ToListAsync(); + } + + + private async Task ShowDeleteModal(int id) + { + _deleteId = id; + if(_deleteModal != null) await _deleteModal.ShowAsync(); + } + + private async Task HideDeleteModal() + { + if(_deleteModal != null) await _deleteModal.HideAsync(); + } + + private async Task ConfirmDelete() + { + await DeleteAsync(_deleteId); + await HideDeleteModal(); + await RefreshItemsAsync(); + } + + private async Task DeleteAsync(int id) + { + await using DbContext ctx = await DbContextFactory.CreateDbContextAsync(); + Device? device = await ctx.Devices.FindAsync(id); + + if(device is not null) + { + ctx.Devices.Remove(device); + await ctx.SaveChangesAsync(); + } + } +} \ No newline at end of file