diff --git a/OpenArchival.Blazor/Components/CustomComponents/UploadDropBox.razor b/OpenArchival.Blazor/Components/CustomComponents/UploadDropBox.razor
index fc91d7a..860ad13 100644
--- a/OpenArchival.Blazor/Components/CustomComponents/UploadDropBox.razor
+++ b/OpenArchival.Blazor/Components/CustomComponents/UploadDropBox.razor
@@ -38,10 +38,10 @@
- @if (_files.Any())
+ @if (Files.Any())
{
- @foreach (var file in _files)
+ @foreach (var file in Files)
{
var color = _fileToDiskFileName.Keys.Contains(file) ? Color.Success : Color.Warning;
Upload
Clear
- @if (_files.Count != _fileToDiskFileName.Count)
+ @if (Files.Count != _fileToDiskFileName.Count)
{
*Files must be uploaded
}
@@ -89,13 +89,13 @@
private string _dragClass = DefaultDragClass;
- private readonly List _files = new();
+ public readonly List Files = new();
private readonly Dictionary _fileToDiskFileName = new();
private MudFileUpload>? _fileUpload;
- public int SelectedFileCount { get => _files.Count; }
+ public int SelectedFileCount { get => Files.Count; }
public bool UploadsComplete { get; set; } = true;
@@ -126,7 +126,7 @@
}
_fileToDiskFileName.Clear();
- _files.Clear();
+ Files.Clear();
await (_fileUpload?.ClearAsync() ?? Task.CompletedTask);
ClearDragClass();
@@ -141,7 +141,7 @@
{
ClearDragClass();
var files = e.GetMultipleFiles(maximumFileCount: _options.Value.MaxFileCount);
- _files.AddRange(files);
+ Files.AddRange(files);
UploadsComplete = false;
StateHasChanged();
@@ -149,7 +149,7 @@
private async Task Upload()
{
- if (!_files.Any())
+ if (!Files.Any())
{
Snackbar.Add("No files to upload.", Severity.Warning);
return;
@@ -158,7 +158,7 @@
Snackbar.Configuration.PositionClass = Defaults.Classes.Position.TopCenter;
List fileListings = [];
- foreach (var file in _files)
+ foreach (var file in Files)
{
if (_fileToDiskFileName.ContainsKey(file)) continue;
try
diff --git a/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/AddArchiveGroupingComponent.razor b/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/AddArchiveGroupingComponent.razor
index 0dd71f1..9eb67b1 100644
--- a/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/AddArchiveGroupingComponent.razor
+++ b/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/AddArchiveGroupingComponent.razor
@@ -83,17 +83,20 @@
FilesUploaded="OnFilesUploaded"
ClearClicked="OnClearFilesClicked">
- @for (int index = 0; index < Model.ArtifactEntries.Count; ++index)
+ @if (Model is not null)
{
- // Capture the current item in a local variable for the lambda
- var currentEntry = Model.ArtifactEntries[index];
+ @for (int index = 0; index < Model.ArtifactEntries.Count; ++index)
+ {
+ // Capture the current item in a local variable for the lambda
+ var currentEntry = Model.ArtifactEntries[index];
-
+
+ }
}
@@ -163,6 +166,18 @@
public List ValidationResults { get; private set; } = [];
+ protected override async Task OnParametersSetAsync()
+ {
+ // Ensure to reload the component if a model has been supplied so that the full
+ // component will render
+ if (Model?.Category is not null)
+ {
+ await OnCategoryChanged();
+ }
+ _isFormDivVisible = true;
+ StateHasChanged();
+ }
+
private async Task PublishClicked(MouseEventArgs args)
{
var validationContext = new ValidationContext(Model);
@@ -199,7 +214,7 @@
}
}
- private void HandleEntryUpdate(ArtifactEntryValidationModel originalEntry, ArtifactEntryValidationModel updatedEntry)
+ private async Task HandleEntryUpdate(ArtifactEntryValidationModel originalEntry, ArtifactEntryValidationModel updatedEntry)
{
// Find the index of the original object in our list
var index = Model.ArtifactEntries.IndexOf(originalEntry);
@@ -211,7 +226,7 @@
}
// Now, run the validation logic
- OnChanged();
+ await OnChanged();
}
// You can now simplify your OnFilesUploaded method slightly
@@ -256,7 +271,7 @@
async Task OnCategoryChanged()
{
- if (Model.Category is not null)
+ if (Model.Category is not null && _identifierTextBox is not null)
{
_identifierTextBox.VerifyFormatCategory = Model.Category;
_isFormDivVisible = true;
@@ -303,6 +318,7 @@
private async void OnDeleteEntryClicked(int index)
{
Model.ArtifactEntries.RemoveAt(index);
+ _uploadComponent.Files.RemoveAt(index);
StateHasChanged();
}
}
diff --git a/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/AddGroupingDialog.razor b/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/AddGroupingDialog.razor
index 6f4adca..9cc2b13 100644
--- a/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/AddGroupingDialog.razor
+++ b/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/AddGroupingDialog.razor
@@ -1,6 +1,6 @@
- Create a Category
+ Edit a Category
@@ -17,16 +17,19 @@
[Parameter]
public required ArtifactGroupingValidationModel Model { get; set; }
+ [CascadingParameter]
+ IMudDialogInstance MudDialog { get; set; }
+
[Parameter]
public bool IsUpdate { get; set; } = false;
private void OnCancel(MouseEventArgs args)
{
- throw new NotImplementedException();
+ MudDialog.Cancel();
}
private void OnSubmit(MouseEventArgs args)
{
- throw new NotImplementedException();
+ MudDialog.Close(DialogResult.Ok(Model));
}
}
diff --git a/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/ArchiveGroupingsTable.razor b/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/ArchiveGroupingsTable.razor
index b1d3d6a..7d7a9a6 100644
--- a/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/ArchiveGroupingsTable.razor
+++ b/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/ArchiveGroupingsTable.razor
@@ -1,9 +1,9 @@
@@ -94,9 +94,28 @@
}
}
- private void OnRowEditClick(ArtifactGroupingRowElement row)
+ private async Task OnRowEditClick(ArtifactGroupingRowElement row)
{
- throw new NotImplementedException();
+ var parameters = new DialogParameters();
+
+ var model = await GroupingProvider.GetGroupingAsync(row.Id);
+
+ parameters.Add("Model", ArtifactGroupingValidationModel.ToValidationModel(model));
+
+ var options = new DialogOptions()
+ {
+ MaxWidth = MaxWidth.ExtraExtraLarge,
+ FullWidth = true
+ };
+
+ var dialog = await DialogService.ShowAsync("Edit Grouping", parameters, options);
+
+ var result = await dialog.Result;
+
+ if (!result.Canceled)
+ {
+ await DataGrid.ReloadServerData();
+ }
}
private async Task OnDeleteClicked(MouseEventArgs args)
@@ -120,6 +139,27 @@
StateHasChanged();
}
}
+ }
+ private async Task> ServerReload(GridState state)
+ {
+ int totalItems = await GroupingProvider.GetTotalCount();
+
+ IEnumerable groupings = await GroupingProvider.GetGroupingsPaged(state.Page + 1, state.PageSize);
+
+ var pagedItems = groupings.Select(grouping => new ArtifactGroupingRowElement()
+ {
+ Id = grouping.Id,
+ Title = grouping.Title,
+ ArtifactGroupingIdentifier = grouping.ArtifactGroupingIdentifier ?? throw new ArgumentNullException(nameof(grouping), "Got a null ArtifactGroupingIdentifier"),
+ CategoryName = grouping.Category.Name,
+ IsPublicallyVisible = grouping.IsPublicallyVisible,
+ });
+
+ return new GridData()
+ {
+ TotalItems = totalItems,
+ Items = pagedItems
+ };
}
}
\ No newline at end of file
diff --git a/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/IdentifierTextBox.razor b/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/IdentifierTextBox.razor
index 1276855..1e9d480 100644
--- a/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/IdentifierTextBox.razor
+++ b/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/IdentifierTextBox.razor
@@ -40,6 +40,7 @@
public required string FieldSeparator { get; set; } = "-";
private List _identifierFields = new();
+
[Parameter]
public required List IdentifierFields
{
diff --git a/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/ValidationModels/ArtifactGroupingValidationModel.cs b/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/ValidationModels/ArtifactGroupingValidationModel.cs
index 890cd3d..121b32e 100644
--- a/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/ValidationModels/ArtifactGroupingValidationModel.cs
+++ b/OpenArchival.Blazor/Components/Pages/Administration/ArchiveItems/ValidationModels/ArtifactGroupingValidationModel.cs
@@ -1,6 +1,7 @@
using Microsoft.IdentityModel.Tokens;
using OpenArchival.DataAccess;
using System.ComponentModel.DataAnnotations;
+using System.Linq;
namespace OpenArchival.Blazor;
@@ -54,6 +55,62 @@ public class ArtifactGroupingValidationModel : IValidatableObject
return grouping;
}
+ public static ArtifactGroupingValidationModel ToValidationModel(ArtifactGrouping grouping)
+ {
+ var entries = new List();
+
+ foreach (var entry in grouping.ChildArtifactEntries)
+ {
+ var defects = new List();
+
+ if (entry.Defects is not null)
+ {
+ defects.AddRange(entry.Defects.Select(defect => defect.Description));
+ }
+
+ var validationModel = new ArtifactEntryValidationModel()
+ {
+ Title = entry.Title,
+ StorageLocation = entry.StorageLocation.Location,
+ ArtifactNumber = entry.ArtifactNumber,
+ AssociatedDates = entry.AssociatedDates,
+ Defects = entry?.Defects?.Select(defect => defect.Description).ToList(),
+ Description = entry?.Description,
+ Files = entry?.Files,
+ FileTextContent = entry?.FileTextContent,
+ IsPublicallyVisible = entry.IsPubliclyVisible,
+ Links = entry.Links,
+ ListedNames = entry?.ListedNames?.Select(name => name.Value).ToList(),
+ RelatedArtifacts = entry.RelatedTo,
+ Tags = entry?.Tags?.Select(tag => tag.Name).ToList(),
+ Type = entry?.Type.Name,
+ };
+
+ entries.Add(validationModel);
+ }
+
+ var identifierFieldsStrings = grouping.IdentifierFields.Values;
+ List identifierFields = new();
+ for (int index = 0; index < identifierFieldsStrings.Count; ++index)
+ {
+ identifierFields.Add(new IdentifierFieldValidationModel()
+ {
+ Value = identifierFieldsStrings[index],
+ Name = grouping.Category.FieldNames[index]
+ });
+ }
+ return new ArtifactGroupingValidationModel()
+ {
+ Title = grouping.Title,
+ ArtifactEntries = entries,
+ Category = grouping.Category,
+ Description = grouping.Description,
+ IdentifierFieldValues = identifierFields,
+ IsPublicallyVisible = grouping.IsPublicallyVisible,
+ Type = grouping.Type,
+ };
+ }
+
public IEnumerable Validate(ValidationContext validationContext)
{
foreach (var entry in ArtifactEntries)
diff --git a/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.Blazor.dll b/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.Blazor.dll
index 8d056fa..7bd3563 100644
Binary files a/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.Blazor.dll and b/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.Blazor.dll differ
diff --git a/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.Blazor.exe b/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.Blazor.exe
index ee66238..50d580c 100644
Binary files a/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.Blazor.exe and b/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.Blazor.exe differ
diff --git a/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.Blazor.pdb b/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.Blazor.pdb
index a762a11..6db6ee9 100644
Binary files a/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.Blazor.pdb and b/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.Blazor.pdb differ
diff --git a/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.DataAccess.dll b/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.DataAccess.dll
index d229572..a19cb90 100644
Binary files a/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.DataAccess.dll and b/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.DataAccess.dll differ
diff --git a/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.DataAccess.exe b/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.DataAccess.exe
index db2c148..0fec7b4 100644
Binary files a/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.DataAccess.exe and b/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.DataAccess.exe differ
diff --git a/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.DataAccess.pdb b/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.DataAccess.pdb
index f3fd33c..85b1583 100644
Binary files a/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.DataAccess.pdb and b/OpenArchival.Blazor/bin/Debug/net9.0/OpenArchival.DataAccess.pdb differ
diff --git a/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.AssemblyInfo.cs b/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.AssemblyInfo.cs
index b3a1e22..056ec15 100644
--- a/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.AssemblyInfo.cs
+++ b/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.AssemblyInfo.cs
@@ -15,7 +15,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OpenArchival.Blazor")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+dd3968f6effa8f45f27a3ec91c34762c88380f06")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+ff34eb87b9d0eec9553fb4767daadfcc0d97fb44")]
[assembly: System.Reflection.AssemblyProductAttribute("OpenArchival.Blazor")]
[assembly: System.Reflection.AssemblyTitleAttribute("OpenArchival.Blazor")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
diff --git a/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.AssemblyInfoInputs.cache b/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.AssemblyInfoInputs.cache
index b122e1e..8773dec 100644
--- a/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.AssemblyInfoInputs.cache
+++ b/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.AssemblyInfoInputs.cache
@@ -1 +1 @@
-4cb1f71ab75baefd50d4cf23fe890ca9a8c7d28dbae39628ffdc79e6bcb2fe49
+038afca63e0897bdd4751b98f3930ef5e6de7eabd431984af04ddfc4648f989b
diff --git a/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.csproj.AssemblyReference.cache b/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.csproj.AssemblyReference.cache
index 2e28621..7000a2b 100644
Binary files a/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.csproj.AssemblyReference.cache and b/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.csproj.AssemblyReference.cache differ
diff --git a/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.dll b/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.dll
index 8d056fa..7bd3563 100644
Binary files a/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.dll and b/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.dll differ
diff --git a/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.pdb b/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.pdb
index a762a11..6db6ee9 100644
Binary files a/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.pdb and b/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.pdb differ
diff --git a/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.sourcelink.json b/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.sourcelink.json
index db67660..2daf2fd 100644
--- a/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.sourcelink.json
+++ b/OpenArchival.Blazor/obj/Debug/net9.0/OpenArchival.Blazor.sourcelink.json
@@ -1 +1 @@
-{"documents":{"D:\\Nextcloud\\Documents\\Open-Archival\\*":"https://raw.githubusercontent.com/vtallen/Open-Archival/dd3968f6effa8f45f27a3ec91c34762c88380f06/*"}}
\ No newline at end of file
+{"documents":{"D:\\Nextcloud\\Documents\\Open-Archival\\*":"https://raw.githubusercontent.com/vtallen/Open-Archival/ff34eb87b9d0eec9553fb4767daadfcc0d97fb44/*"}}
\ No newline at end of file
diff --git a/OpenArchival.Blazor/obj/Debug/net9.0/apphost.exe b/OpenArchival.Blazor/obj/Debug/net9.0/apphost.exe
index ee66238..50d580c 100644
Binary files a/OpenArchival.Blazor/obj/Debug/net9.0/apphost.exe and b/OpenArchival.Blazor/obj/Debug/net9.0/apphost.exe differ
diff --git a/OpenArchival.Blazor/obj/Debug/net9.0/ref/OpenArchival.Blazor.dll b/OpenArchival.Blazor/obj/Debug/net9.0/ref/OpenArchival.Blazor.dll
index 1f21996..8035420 100644
Binary files a/OpenArchival.Blazor/obj/Debug/net9.0/ref/OpenArchival.Blazor.dll and b/OpenArchival.Blazor/obj/Debug/net9.0/ref/OpenArchival.Blazor.dll differ
diff --git a/OpenArchival.Blazor/obj/Debug/net9.0/refint/OpenArchival.Blazor.dll b/OpenArchival.Blazor/obj/Debug/net9.0/refint/OpenArchival.Blazor.dll
index 1f21996..8035420 100644
Binary files a/OpenArchival.Blazor/obj/Debug/net9.0/refint/OpenArchival.Blazor.dll and b/OpenArchival.Blazor/obj/Debug/net9.0/refint/OpenArchival.Blazor.dll differ
diff --git a/OpenArchival.Blazor/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json b/OpenArchival.Blazor/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json
index 06c3bfd..d0566d8 100644
--- a/OpenArchival.Blazor/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json
+++ b/OpenArchival.Blazor/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json
@@ -1 +1 @@
-{"GlobalPropertiesHash":"w2zJjDlrZF5/5p80zNaW9/DaLrmtiqb1ym05zjQa8AU=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["Ql2PiheSms1jp3ze9191\u002BLNizQeYVsVG\u002B7N0KZ1uG20=","J7kZmrOHXGR7mhUJ1qRNPdV4NRND\u002BvY/dHsYc/Fs5FA=","zoyQzHz20Gq24s2eR\u002BQU8CSBO06r9oxWByDVQGHt4qE=","m0ZalmIclG1CWERwq7TJzaS3UTwdWU7vJTH5wtXTRu0=","kYIUaswTSm/vuWdrFVk9i7vGl7gi4QutG\u002BtCBbnKC6I=","I92NrQVtDRIlAXcy/VupzptYIRXUmfdARzJEd\u002BMwPPI=","vwFknGJfBqZvyW3NEetGDZikd1HNT74cx2PojJjY\u002BPY=","3KENyb8mlCPncPOO5PbFfE0ubEK97voAevXn\u002BluJF7w=","NwDfbvguyiABZkN\u002B7yp6ClTOKkIFe/x4/v8tW4SUWHs=","Hourq1FvI\u002BJdRWbGSIe8r7GJGmkjFaIIQ8xB71hUBj4=","5n3ZEfHdKhL/ejFZA6mAyU6RVQAOd2wCgH3KjVv4d0U=","76\u002Bi/9Jz2zUyw2kfeC1dt0\u002B2uS7aFC2hMxE6ERdLn6s=","nvIt8ExR97wRoREETNPoXJ8D7Pb3KMAHZcwls7Q6c5E=","VfYWVT8Cth4Ztc4/xdY/qocO1V5snDiDHqbnmGMbvSw=","JxOQqF9Br69IsgvR\u002BTp8Vp93AFvsAKAiWtrgUjK7uKE=","5fR1TRHdDoMpaYhFN4ET8XHmhPG8hvpyxjiTF2qwx3M=","lxWH\u002B23ZAM/D8nGa5K0aryPD\u002BJPkC8vLJw2cEPhz8BA=","V8fXm0xeM7wossowKO5U7zhqV0P4uUGyIdkFdI9/LmY=","DGTAL07rwTwMmN0h4z8RtKm1\u002BbRR4K\u002B39bnl/wF43ZM=","rph0gnGKJ2XM54sr0iGk\u002BWTEktu647aepqf4FJUOLY8=","nklMuuwtwGoNNErDuvc4h4TaCmj4xyGZdjpGKgNvLGE=","Onb4gjU\u002B/9a/TKG0C3dG2hXdTEVs7OCECl6pWNTR6pQ=","WY7f0A5zLk9CD0lYECdLRR2b9b8GL2skPQO91AQ5wOM=","Ac8RYrUWtH4wwvUsQ9V6ndbtfhGuDzP1S9Hkh0JQLPg=","ixUpDxEYNKdhPZM9//dDIaFJGC9LvGDbh6rENZRYjWc=","SaPHXK2AwnFe3srooGZwMezdZmaxj0st4ZuBcZ0nfqE=","T5f5jCFFR0KCQwbQwHvZbWrVp7NucmIDfBynM8At\u002BFg=","DMXcRradogfvYUFJEJJT\u002B\u002B5RQjl\u002BI7kUSkHrHCl8oOk=","OLr6tSbzkGk2i5G0fVdSkw7v0IzsX6NL86pLF9m6eX0=","es5rRr8vQCVUTmRO5bFYu0yMvzBffvEDZTKp5IpEEvA=","//xOpsw6IkdGK7auzNWaN3ipl2miVcBMSjnir/YlMBM=","LxLYDw\u002BNEQs1/4eWj5xZUyDYpsFLgH0ApDhFJ57Tdxw=","MFYQHMUPDwTl5G2r85YGLzdn1v369NvEoKIV/yqP9D0=","suYCRRYSyx84XfGpJ642kjRBvpsYCZrXHIQdrDjHhM8=","FWll23MBvwnmTx45GuMEkpaohrEGlqtK5xFGH7EFhFQ=","xVQXdj83lrOmePZ2H/X8gQKeb0ZsdJwmwGlVhgn1iKk=","JBM4mmoRLcKW020j1M5/od\u002BktwV30JiF0IURK3neeVA=","LhQEEPfBv1x4zkjLkNo5UOqbP6vpsuxmDZfWrrYUOuQ=","6Ej25\u002BdEOADcqNkFwaGEjzHy7JwZjxZHE484x/wngas=","eFGzh1RmS7P9u2g03QpW6hWZdSUmi7k6aTjXbhIxvBw=","8EP2SMLjn\u002Ba9MBRxAWB0Chr/dyRQru36g4tGLaVvC5U=","1cSaY4ZOdlRQ4J8JEJcTCTaxFW6wCIkDNaHt4gOO6O0=","lOJzvq/mt94Oz7XdoNgAi5xhxeLtmYb8fQBwlPPQZZE=","OcnWLAVaHOsYs4bxnEnZqIWag3elwA7S4wtI2W/UU/w=","itNr5KUbu31/YaznAa3H9HU94pR2G5E\u002By41ZOAziBso=","9L2A6DEc9nUgGsAfznPoDJDiHK9N5yUnvVAZ55HFU5o=","jrhMriKpKb8MMoF/fFjCvVghgR1nPdlicua/iXMULrs=","CdwSbAeG72nDXEn8OBaMcL1/VmjlgS7xHzBX6FqCAhM=","ZKiapX8zYGlD2F5aGELVEVwu/xqbGH52dLsAPCg\u002BK1c=","MFwB9\u002Bmf\u002BLmDERjgvazd6oBnknubBcqxnX25YF5O\u002BR4=","ychUFdjaQZpbiFmAejbm6r2LE3ryZr0QzpQWAf8pYAU=","HHMN9Vvcgvov4W7M1YjdvfTZsFWuzyUh9TPfALHD8ys=","Rg0Zc7\u002B6aN84D0yIgRswn0g5Z\u002BCedtn8RjWnxPXD6Bc=","nJEkwqZ2WHoYX/lkd1ag99OObwa\u002BUacCxi8cPwQyYZQ=","haqWbxLhmiGrPyfId7Eidma9bDdT\u002BLmPiYFcTJeIvwM=","6Rdh8TmSgxQlWiZ1JiwrbUrqh6GigCZcyq3Y/p/GyEg=","3nVS5wBdgLMIZvvaoi8wriTzs3BDkKg37FtwHfDMhjQ=","PTCwsDOSptetl4jJHyelugE6oXbRSgUnDGBZeR5DJAw=","zzh3FW9R/C\u002BpOP8SPV2JXRRAhd1LLuYlGOyyOnZ9Gnk=","kEChOeuFq85XCariss4dIamJogzRzhHv3I\u002Bwz\u002BTM3qg=","ILgZb/GGIWdwm7iauiYzhswQLxIwoFQmo7WuMsDLZI8=","hPcbJaDUq2Gr6BBrUFWuGPpXtI2\u002Bzf\u002BB131nyeR/VhM=","6VyD1SdAUVe84G4oPqyBEYJ2vsYxzN6p\u002BE2JPzfsaHs=","g3sYtiwGKZqWqJmIFnpgMlXuzekOZOJp7bP\u002BeCGlEJg=","5kGuu3Hg/IoCEyBXsQ7ggsNkiuRTW4VUgJHrzZ6A32A=","V6Cuay3Fa0FmnT45Y/Je3\u002BP\u002BmRZG1Vn7QzNexS/U9QM=","x61JOwZ6Rincvaxrd7L/sxlpqJIbZhN8ugbqRa58Bh0=","2aJE9mIzYveQB88MIjZDblZknjB6XucYyey1JlyCSHw=","om8bC4Me/ps3m/rDiQ48q6XITG3NcGTkzfULk51DvlQ="],"CachedAssets":{},"CachedCopyCandidates":{}}
\ No newline at end of file
+{"GlobalPropertiesHash":"w2zJjDlrZF5/5p80zNaW9/DaLrmtiqb1ym05zjQa8AU=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["Ql2PiheSms1jp3ze9191\u002BLNizQeYVsVG\u002B7N0KZ1uG20=","J7kZmrOHXGR7mhUJ1qRNPdV4NRND\u002BvY/dHsYc/Fs5FA=","zoyQzHz20Gq24s2eR\u002BQU8CSBO06r9oxWByDVQGHt4qE=","m0ZalmIclG1CWERwq7TJzaS3UTwdWU7vJTH5wtXTRu0=","kYIUaswTSm/vuWdrFVk9i7vGl7gi4QutG\u002BtCBbnKC6I=","I92NrQVtDRIlAXcy/VupzptYIRXUmfdARzJEd\u002BMwPPI=","vwFknGJfBqZvyW3NEetGDZikd1HNT74cx2PojJjY\u002BPY=","3KENyb8mlCPncPOO5PbFfE0ubEK97voAevXn\u002BluJF7w=","NwDfbvguyiABZkN\u002B7yp6ClTOKkIFe/x4/v8tW4SUWHs=","Hourq1FvI\u002BJdRWbGSIe8r7GJGmkjFaIIQ8xB71hUBj4=","5n3ZEfHdKhL/ejFZA6mAyU6RVQAOd2wCgH3KjVv4d0U=","76\u002Bi/9Jz2zUyw2kfeC1dt0\u002B2uS7aFC2hMxE6ERdLn6s=","nvIt8ExR97wRoREETNPoXJ8D7Pb3KMAHZcwls7Q6c5E=","VfYWVT8Cth4Ztc4/xdY/qocO1V5snDiDHqbnmGMbvSw=","JxOQqF9Br69IsgvR\u002BTp8Vp93AFvsAKAiWtrgUjK7uKE=","5fR1TRHdDoMpaYhFN4ET8XHmhPG8hvpyxjiTF2qwx3M=","lxWH\u002B23ZAM/D8nGa5K0aryPD\u002BJPkC8vLJw2cEPhz8BA=","V8fXm0xeM7wossowKO5U7zhqV0P4uUGyIdkFdI9/LmY=","DGTAL07rwTwMmN0h4z8RtKm1\u002BbRR4K\u002B39bnl/wF43ZM=","rph0gnGKJ2XM54sr0iGk\u002BWTEktu647aepqf4FJUOLY8=","nklMuuwtwGoNNErDuvc4h4TaCmj4xyGZdjpGKgNvLGE=","Onb4gjU\u002B/9a/TKG0C3dG2hXdTEVs7OCECl6pWNTR6pQ=","WY7f0A5zLk9CD0lYECdLRR2b9b8GL2skPQO91AQ5wOM=","Ac8RYrUWtH4wwvUsQ9V6ndbtfhGuDzP1S9Hkh0JQLPg=","ixUpDxEYNKdhPZM9//dDIaFJGC9LvGDbh6rENZRYjWc=","SaPHXK2AwnFe3srooGZwMezdZmaxj0st4ZuBcZ0nfqE=","T5f5jCFFR0KCQwbQwHvZbWrVp7NucmIDfBynM8At\u002BFg=","DMXcRradogfvYUFJEJJT\u002B\u002B5RQjl\u002BI7kUSkHrHCl8oOk=","OLr6tSbzkGk2i5G0fVdSkw7v0IzsX6NL86pLF9m6eX0=","es5rRr8vQCVUTmRO5bFYu0yMvzBffvEDZTKp5IpEEvA=","//xOpsw6IkdGK7auzNWaN3ipl2miVcBMSjnir/YlMBM=","LxLYDw\u002BNEQs1/4eWj5xZUyDYpsFLgH0ApDhFJ57Tdxw=","MFYQHMUPDwTl5G2r85YGLzdn1v369NvEoKIV/yqP9D0=","suYCRRYSyx84XfGpJ642kjRBvpsYCZrXHIQdrDjHhM8=","FWll23MBvwnmTx45GuMEkpaohrEGlqtK5xFGH7EFhFQ=","xVQXdj83lrOmePZ2H/X8gQKeb0ZsdJwmwGlVhgn1iKk=","JBM4mmoRLcKW020j1M5/od\u002BktwV30JiF0IURK3neeVA=","LhQEEPfBv1x4zkjLkNo5UOqbP6vpsuxmDZfWrrYUOuQ=","6Ej25\u002BdEOADcqNkFwaGEjzHy7JwZjxZHE484x/wngas=","eFGzh1RmS7P9u2g03QpW6hWZdSUmi7k6aTjXbhIxvBw=","8EP2SMLjn\u002Ba9MBRxAWB0Chr/dyRQru36g4tGLaVvC5U=","1cSaY4ZOdlRQ4J8JEJcTCTaxFW6wCIkDNaHt4gOO6O0=","lOJzvq/mt94Oz7XdoNgAi5xhxeLtmYb8fQBwlPPQZZE=","OcnWLAVaHOsYs4bxnEnZqIWag3elwA7S4wtI2W/UU/w=","H8aFhn2drJzt36/L24d0engnsOFCb0JKnLejDgKTLi4=","9L2A6DEc9nUgGsAfznPoDJDiHK9N5yUnvVAZ55HFU5o=","jrhMriKpKb8MMoF/fFjCvVghgR1nPdlicua/iXMULrs=","CdwSbAeG72nDXEn8OBaMcL1/VmjlgS7xHzBX6FqCAhM=","rRfEoGduwRYI4dLUcvO1K5zL1Uf4y/R3qc5y1tZ6bbM=","j/BlMWNIm8dU8cN80vx7pKvotDlEPvK3Aw0x0gRwsGw=","unYa1AQD93GWZQpvokZZaLPzmQsIKVtMCYJWev1NKdA=","hTdJsAcxKOAgmREDxM0Q7F0XFAPcSi9LbkooIvw4pDo=","Rg0Zc7\u002B6aN84D0yIgRswn0g5Z\u002BCedtn8RjWnxPXD6Bc=","7i19fmcUtxUfpJGLk9ori6H9NTqI2TYMBHblGvKBU5w=","haqWbxLhmiGrPyfId7Eidma9bDdT\u002BLmPiYFcTJeIvwM=","6Rdh8TmSgxQlWiZ1JiwrbUrqh6GigCZcyq3Y/p/GyEg=","3nVS5wBdgLMIZvvaoi8wriTzs3BDkKg37FtwHfDMhjQ=","PTCwsDOSptetl4jJHyelugE6oXbRSgUnDGBZeR5DJAw=","zzh3FW9R/C\u002BpOP8SPV2JXRRAhd1LLuYlGOyyOnZ9Gnk=","kEChOeuFq85XCariss4dIamJogzRzhHv3I\u002Bwz\u002BTM3qg=","ILgZb/GGIWdwm7iauiYzhswQLxIwoFQmo7WuMsDLZI8=","hPcbJaDUq2Gr6BBrUFWuGPpXtI2\u002Bzf\u002BB131nyeR/VhM=","6VyD1SdAUVe84G4oPqyBEYJ2vsYxzN6p\u002BE2JPzfsaHs=","g3sYtiwGKZqWqJmIFnpgMlXuzekOZOJp7bP\u002BeCGlEJg=","5kGuu3Hg/IoCEyBXsQ7ggsNkiuRTW4VUgJHrzZ6A32A=","V6Cuay3Fa0FmnT45Y/Je3\u002BP\u002BmRZG1Vn7QzNexS/U9QM=","x61JOwZ6Rincvaxrd7L/sxlpqJIbZhN8ugbqRa58Bh0=","2aJE9mIzYveQB88MIjZDblZknjB6XucYyey1JlyCSHw=","G1Q8UgbSRswYv\u002BdHjSZGTEhWf8RSQOrZKntY9Seu1Zw="],"CachedAssets":{},"CachedCopyCandidates":{}}
\ No newline at end of file
diff --git a/OpenArchival.Blazor/obj/Debug/net9.0/rjsmrazor.dswa.cache.json b/OpenArchival.Blazor/obj/Debug/net9.0/rjsmrazor.dswa.cache.json
index 7009fbf..f0f0fa6 100644
--- a/OpenArchival.Blazor/obj/Debug/net9.0/rjsmrazor.dswa.cache.json
+++ b/OpenArchival.Blazor/obj/Debug/net9.0/rjsmrazor.dswa.cache.json
@@ -1 +1 @@
-{"GlobalPropertiesHash":"uX1JeFdFTytYlQPawspOQefa+m0agbesQLMiaeAPgD0=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["Ql2PiheSms1jp3ze9191\u002BLNizQeYVsVG\u002B7N0KZ1uG20=","J7kZmrOHXGR7mhUJ1qRNPdV4NRND\u002BvY/dHsYc/Fs5FA=","zoyQzHz20Gq24s2eR\u002BQU8CSBO06r9oxWByDVQGHt4qE=","m0ZalmIclG1CWERwq7TJzaS3UTwdWU7vJTH5wtXTRu0=","kYIUaswTSm/vuWdrFVk9i7vGl7gi4QutG\u002BtCBbnKC6I=","I92NrQVtDRIlAXcy/VupzptYIRXUmfdARzJEd\u002BMwPPI=","vwFknGJfBqZvyW3NEetGDZikd1HNT74cx2PojJjY\u002BPY=","3KENyb8mlCPncPOO5PbFfE0ubEK97voAevXn\u002BluJF7w=","NwDfbvguyiABZkN\u002B7yp6ClTOKkIFe/x4/v8tW4SUWHs=","Hourq1FvI\u002BJdRWbGSIe8r7GJGmkjFaIIQ8xB71hUBj4=","5n3ZEfHdKhL/ejFZA6mAyU6RVQAOd2wCgH3KjVv4d0U=","76\u002Bi/9Jz2zUyw2kfeC1dt0\u002B2uS7aFC2hMxE6ERdLn6s=","nvIt8ExR97wRoREETNPoXJ8D7Pb3KMAHZcwls7Q6c5E=","VfYWVT8Cth4Ztc4/xdY/qocO1V5snDiDHqbnmGMbvSw=","JxOQqF9Br69IsgvR\u002BTp8Vp93AFvsAKAiWtrgUjK7uKE=","5fR1TRHdDoMpaYhFN4ET8XHmhPG8hvpyxjiTF2qwx3M=","lxWH\u002B23ZAM/D8nGa5K0aryPD\u002BJPkC8vLJw2cEPhz8BA=","V8fXm0xeM7wossowKO5U7zhqV0P4uUGyIdkFdI9/LmY=","DGTAL07rwTwMmN0h4z8RtKm1\u002BbRR4K\u002B39bnl/wF43ZM=","rph0gnGKJ2XM54sr0iGk\u002BWTEktu647aepqf4FJUOLY8=","nklMuuwtwGoNNErDuvc4h4TaCmj4xyGZdjpGKgNvLGE=","Onb4gjU\u002B/9a/TKG0C3dG2hXdTEVs7OCECl6pWNTR6pQ=","WY7f0A5zLk9CD0lYECdLRR2b9b8GL2skPQO91AQ5wOM=","Ac8RYrUWtH4wwvUsQ9V6ndbtfhGuDzP1S9Hkh0JQLPg=","ixUpDxEYNKdhPZM9//dDIaFJGC9LvGDbh6rENZRYjWc=","SaPHXK2AwnFe3srooGZwMezdZmaxj0st4ZuBcZ0nfqE=","T5f5jCFFR0KCQwbQwHvZbWrVp7NucmIDfBynM8At\u002BFg=","DMXcRradogfvYUFJEJJT\u002B\u002B5RQjl\u002BI7kUSkHrHCl8oOk=","OLr6tSbzkGk2i5G0fVdSkw7v0IzsX6NL86pLF9m6eX0=","es5rRr8vQCVUTmRO5bFYu0yMvzBffvEDZTKp5IpEEvA=","//xOpsw6IkdGK7auzNWaN3ipl2miVcBMSjnir/YlMBM=","LxLYDw\u002BNEQs1/4eWj5xZUyDYpsFLgH0ApDhFJ57Tdxw=","MFYQHMUPDwTl5G2r85YGLzdn1v369NvEoKIV/yqP9D0=","suYCRRYSyx84XfGpJ642kjRBvpsYCZrXHIQdrDjHhM8=","FWll23MBvwnmTx45GuMEkpaohrEGlqtK5xFGH7EFhFQ=","xVQXdj83lrOmePZ2H/X8gQKeb0ZsdJwmwGlVhgn1iKk=","JBM4mmoRLcKW020j1M5/od\u002BktwV30JiF0IURK3neeVA=","LhQEEPfBv1x4zkjLkNo5UOqbP6vpsuxmDZfWrrYUOuQ=","6Ej25\u002BdEOADcqNkFwaGEjzHy7JwZjxZHE484x/wngas=","eFGzh1RmS7P9u2g03QpW6hWZdSUmi7k6aTjXbhIxvBw=","8EP2SMLjn\u002Ba9MBRxAWB0Chr/dyRQru36g4tGLaVvC5U=","1cSaY4ZOdlRQ4J8JEJcTCTaxFW6wCIkDNaHt4gOO6O0=","lOJzvq/mt94Oz7XdoNgAi5xhxeLtmYb8fQBwlPPQZZE=","OcnWLAVaHOsYs4bxnEnZqIWag3elwA7S4wtI2W/UU/w=","itNr5KUbu31/YaznAa3H9HU94pR2G5E\u002By41ZOAziBso=","9L2A6DEc9nUgGsAfznPoDJDiHK9N5yUnvVAZ55HFU5o=","jrhMriKpKb8MMoF/fFjCvVghgR1nPdlicua/iXMULrs=","CdwSbAeG72nDXEn8OBaMcL1/VmjlgS7xHzBX6FqCAhM=","ZKiapX8zYGlD2F5aGELVEVwu/xqbGH52dLsAPCg\u002BK1c=","MFwB9\u002Bmf\u002BLmDERjgvazd6oBnknubBcqxnX25YF5O\u002BR4=","ychUFdjaQZpbiFmAejbm6r2LE3ryZr0QzpQWAf8pYAU=","HHMN9Vvcgvov4W7M1YjdvfTZsFWuzyUh9TPfALHD8ys=","Rg0Zc7\u002B6aN84D0yIgRswn0g5Z\u002BCedtn8RjWnxPXD6Bc=","nJEkwqZ2WHoYX/lkd1ag99OObwa\u002BUacCxi8cPwQyYZQ=","haqWbxLhmiGrPyfId7Eidma9bDdT\u002BLmPiYFcTJeIvwM=","6Rdh8TmSgxQlWiZ1JiwrbUrqh6GigCZcyq3Y/p/GyEg=","3nVS5wBdgLMIZvvaoi8wriTzs3BDkKg37FtwHfDMhjQ=","PTCwsDOSptetl4jJHyelugE6oXbRSgUnDGBZeR5DJAw=","zzh3FW9R/C\u002BpOP8SPV2JXRRAhd1LLuYlGOyyOnZ9Gnk=","kEChOeuFq85XCariss4dIamJogzRzhHv3I\u002Bwz\u002BTM3qg=","ILgZb/GGIWdwm7iauiYzhswQLxIwoFQmo7WuMsDLZI8=","hPcbJaDUq2Gr6BBrUFWuGPpXtI2\u002Bzf\u002BB131nyeR/VhM=","6VyD1SdAUVe84G4oPqyBEYJ2vsYxzN6p\u002BE2JPzfsaHs=","g3sYtiwGKZqWqJmIFnpgMlXuzekOZOJp7bP\u002BeCGlEJg=","5kGuu3Hg/IoCEyBXsQ7ggsNkiuRTW4VUgJHrzZ6A32A=","V6Cuay3Fa0FmnT45Y/Je3\u002BP\u002BmRZG1Vn7QzNexS/U9QM=","x61JOwZ6Rincvaxrd7L/sxlpqJIbZhN8ugbqRa58Bh0=","2aJE9mIzYveQB88MIjZDblZknjB6XucYyey1JlyCSHw=","om8bC4Me/ps3m/rDiQ48q6XITG3NcGTkzfULk51DvlQ="],"CachedAssets":{},"CachedCopyCandidates":{}}
\ No newline at end of file
+{"GlobalPropertiesHash":"uX1JeFdFTytYlQPawspOQefa+m0agbesQLMiaeAPgD0=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["Ql2PiheSms1jp3ze9191\u002BLNizQeYVsVG\u002B7N0KZ1uG20=","J7kZmrOHXGR7mhUJ1qRNPdV4NRND\u002BvY/dHsYc/Fs5FA=","zoyQzHz20Gq24s2eR\u002BQU8CSBO06r9oxWByDVQGHt4qE=","m0ZalmIclG1CWERwq7TJzaS3UTwdWU7vJTH5wtXTRu0=","kYIUaswTSm/vuWdrFVk9i7vGl7gi4QutG\u002BtCBbnKC6I=","I92NrQVtDRIlAXcy/VupzptYIRXUmfdARzJEd\u002BMwPPI=","vwFknGJfBqZvyW3NEetGDZikd1HNT74cx2PojJjY\u002BPY=","3KENyb8mlCPncPOO5PbFfE0ubEK97voAevXn\u002BluJF7w=","NwDfbvguyiABZkN\u002B7yp6ClTOKkIFe/x4/v8tW4SUWHs=","Hourq1FvI\u002BJdRWbGSIe8r7GJGmkjFaIIQ8xB71hUBj4=","5n3ZEfHdKhL/ejFZA6mAyU6RVQAOd2wCgH3KjVv4d0U=","76\u002Bi/9Jz2zUyw2kfeC1dt0\u002B2uS7aFC2hMxE6ERdLn6s=","nvIt8ExR97wRoREETNPoXJ8D7Pb3KMAHZcwls7Q6c5E=","VfYWVT8Cth4Ztc4/xdY/qocO1V5snDiDHqbnmGMbvSw=","JxOQqF9Br69IsgvR\u002BTp8Vp93AFvsAKAiWtrgUjK7uKE=","5fR1TRHdDoMpaYhFN4ET8XHmhPG8hvpyxjiTF2qwx3M=","lxWH\u002B23ZAM/D8nGa5K0aryPD\u002BJPkC8vLJw2cEPhz8BA=","V8fXm0xeM7wossowKO5U7zhqV0P4uUGyIdkFdI9/LmY=","DGTAL07rwTwMmN0h4z8RtKm1\u002BbRR4K\u002B39bnl/wF43ZM=","rph0gnGKJ2XM54sr0iGk\u002BWTEktu647aepqf4FJUOLY8=","nklMuuwtwGoNNErDuvc4h4TaCmj4xyGZdjpGKgNvLGE=","Onb4gjU\u002B/9a/TKG0C3dG2hXdTEVs7OCECl6pWNTR6pQ=","WY7f0A5zLk9CD0lYECdLRR2b9b8GL2skPQO91AQ5wOM=","Ac8RYrUWtH4wwvUsQ9V6ndbtfhGuDzP1S9Hkh0JQLPg=","ixUpDxEYNKdhPZM9//dDIaFJGC9LvGDbh6rENZRYjWc=","SaPHXK2AwnFe3srooGZwMezdZmaxj0st4ZuBcZ0nfqE=","T5f5jCFFR0KCQwbQwHvZbWrVp7NucmIDfBynM8At\u002BFg=","DMXcRradogfvYUFJEJJT\u002B\u002B5RQjl\u002BI7kUSkHrHCl8oOk=","OLr6tSbzkGk2i5G0fVdSkw7v0IzsX6NL86pLF9m6eX0=","es5rRr8vQCVUTmRO5bFYu0yMvzBffvEDZTKp5IpEEvA=","//xOpsw6IkdGK7auzNWaN3ipl2miVcBMSjnir/YlMBM=","LxLYDw\u002BNEQs1/4eWj5xZUyDYpsFLgH0ApDhFJ57Tdxw=","MFYQHMUPDwTl5G2r85YGLzdn1v369NvEoKIV/yqP9D0=","suYCRRYSyx84XfGpJ642kjRBvpsYCZrXHIQdrDjHhM8=","FWll23MBvwnmTx45GuMEkpaohrEGlqtK5xFGH7EFhFQ=","xVQXdj83lrOmePZ2H/X8gQKeb0ZsdJwmwGlVhgn1iKk=","JBM4mmoRLcKW020j1M5/od\u002BktwV30JiF0IURK3neeVA=","LhQEEPfBv1x4zkjLkNo5UOqbP6vpsuxmDZfWrrYUOuQ=","6Ej25\u002BdEOADcqNkFwaGEjzHy7JwZjxZHE484x/wngas=","eFGzh1RmS7P9u2g03QpW6hWZdSUmi7k6aTjXbhIxvBw=","8EP2SMLjn\u002Ba9MBRxAWB0Chr/dyRQru36g4tGLaVvC5U=","1cSaY4ZOdlRQ4J8JEJcTCTaxFW6wCIkDNaHt4gOO6O0=","lOJzvq/mt94Oz7XdoNgAi5xhxeLtmYb8fQBwlPPQZZE=","OcnWLAVaHOsYs4bxnEnZqIWag3elwA7S4wtI2W/UU/w=","H8aFhn2drJzt36/L24d0engnsOFCb0JKnLejDgKTLi4=","9L2A6DEc9nUgGsAfznPoDJDiHK9N5yUnvVAZ55HFU5o=","jrhMriKpKb8MMoF/fFjCvVghgR1nPdlicua/iXMULrs=","CdwSbAeG72nDXEn8OBaMcL1/VmjlgS7xHzBX6FqCAhM=","rRfEoGduwRYI4dLUcvO1K5zL1Uf4y/R3qc5y1tZ6bbM=","j/BlMWNIm8dU8cN80vx7pKvotDlEPvK3Aw0x0gRwsGw=","unYa1AQD93GWZQpvokZZaLPzmQsIKVtMCYJWev1NKdA=","hTdJsAcxKOAgmREDxM0Q7F0XFAPcSi9LbkooIvw4pDo=","Rg0Zc7\u002B6aN84D0yIgRswn0g5Z\u002BCedtn8RjWnxPXD6Bc=","7i19fmcUtxUfpJGLk9ori6H9NTqI2TYMBHblGvKBU5w=","haqWbxLhmiGrPyfId7Eidma9bDdT\u002BLmPiYFcTJeIvwM=","6Rdh8TmSgxQlWiZ1JiwrbUrqh6GigCZcyq3Y/p/GyEg=","3nVS5wBdgLMIZvvaoi8wriTzs3BDkKg37FtwHfDMhjQ=","PTCwsDOSptetl4jJHyelugE6oXbRSgUnDGBZeR5DJAw=","zzh3FW9R/C\u002BpOP8SPV2JXRRAhd1LLuYlGOyyOnZ9Gnk=","kEChOeuFq85XCariss4dIamJogzRzhHv3I\u002Bwz\u002BTM3qg=","ILgZb/GGIWdwm7iauiYzhswQLxIwoFQmo7WuMsDLZI8=","hPcbJaDUq2Gr6BBrUFWuGPpXtI2\u002Bzf\u002BB131nyeR/VhM=","6VyD1SdAUVe84G4oPqyBEYJ2vsYxzN6p\u002BE2JPzfsaHs=","g3sYtiwGKZqWqJmIFnpgMlXuzekOZOJp7bP\u002BeCGlEJg=","5kGuu3Hg/IoCEyBXsQ7ggsNkiuRTW4VUgJHrzZ6A32A=","V6Cuay3Fa0FmnT45Y/Je3\u002BP\u002BmRZG1Vn7QzNexS/U9QM=","x61JOwZ6Rincvaxrd7L/sxlpqJIbZhN8ugbqRa58Bh0=","2aJE9mIzYveQB88MIjZDblZknjB6XucYyey1JlyCSHw=","G1Q8UgbSRswYv\u002BdHjSZGTEhWf8RSQOrZKntY9Seu1Zw="],"CachedAssets":{},"CachedCopyCandidates":{}}
\ No newline at end of file
diff --git a/OpenArchival.Blazor/obj/Debug/net9.0/rpswa.dswa.cache.json b/OpenArchival.Blazor/obj/Debug/net9.0/rpswa.dswa.cache.json
index 9313c99..d8c1a34 100644
--- a/OpenArchival.Blazor/obj/Debug/net9.0/rpswa.dswa.cache.json
+++ b/OpenArchival.Blazor/obj/Debug/net9.0/rpswa.dswa.cache.json
@@ -1 +1 @@
-{"GlobalPropertiesHash":"XVWMafEhfrS/fg2Zj7asTNqgDrfpiwoMDXnjdP5dMDc=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["Ql2PiheSms1jp3ze9191\u002BLNizQeYVsVG\u002B7N0KZ1uG20=","J7kZmrOHXGR7mhUJ1qRNPdV4NRND\u002BvY/dHsYc/Fs5FA=","zoyQzHz20Gq24s2eR\u002BQU8CSBO06r9oxWByDVQGHt4qE=","S9txWBMkH4Yj1eG2HUPOkUWz9AoQkGdbSfeW8NgN\u002BxE=","o0aea9nqp02517BUOs9/nGaM6H/UnpWWtWAeDomcgV4=","y2dTx6xFkyjAzITP/\u002BSs40MCBm/Tmm7ZOBpI/DqlBFE=","ZmxUJu7Va54dnyLTpPaeb3LXxiTxJP0LRIHL\u002BnuF44c=","cg4n0kRzzWgY2qlZdUwROVqv25x8/QQaCM/NXeXHAm0=","AcEyg5sF\u002BG7h8cTd4OPHIBGSDc58NkKWM9LXnPCts2s=","VFrRe4girF3FRpDOlYSBnVrkOnl76ekWOxNm7mF4t0A=","j9/Tw8fXyMbeynWjJYmY6kJ7FJ59tcwknts73gweoEI=","8d5OfgLy6a4RJsFXKLcxA1egZHtmIKAbps5lBmeNt38=","AaPPr3bR/sBWrgmYgZKKMSIKNbQeqLf310KQRpKnfsI=","5IT4oOrh1c8VH1VjwWuD7ai4PiPBq/13R4tEiY/TSPI=","Czn9tLfHWPwVf9uh/XrNgA6Ks6J9tVB4JwfLegj/ftM=","SphdH4dZI\u002BUI/NAY8yVibP3CY6lMLtHcvNauNjiMUG4=","NuRRqbDGasbzd5BYo0DL2OjUjjh57dbMlAUsJkIwkPM=","yLN/BA9iAut9Pd7HzcSogC02i9ddxjif2fdbbGIUB70=","CPWWJ2Bp2hzILnMJAY673sNfUfm3FZSJEAufT8hMY6E=","2QKOn\u002BHTSGGnvtnKhUgPyG3helsQD0OCrMBMj\u002B7T3lw=","wtIXZYfkJHNxuSRxgTwoC\u002BU59\u002Byk38nSrpBgrm/qiAo=","9b\u002BWZIOTiDlyAbFbG434M0hhY786ENq3Fu7wCA09jUo=","87spKP4vbfUzWbrg4lDHyoNr6kpsnJEK24nTFEP9rck=","/vMoyd2fA4sgtfeJQc7cppdLQDn8TcwztXnss03HUUw=","oNCxGtvhYEhZorlxe3gldEXtD1YdpsMnXGcFwqqeeQw=","Ld9r0/i9fUO7QsnlP7r1KKriqtVDmSx8cLG0in2YMSo=","53lPHr9hM1ATjEpC\u002B2/TXZeAlArG\u002BcTVBOU0rnOCSYY=","XPDTlgt2uSfOwx8b0oKHXnDrOjRanq/v7VC/aAqsKsg=","XA43zdGlmTrdY6wEAYknKYBFN9IztLZ2jSrofw0b6V4=","InYJRKMtWl6vOkkIYW9DWTiLIRhMbWwp/GcLrfgTYhs=","b/\u002BexuVW46WvMaRrT/V89clZeIFOODWEpaVshFcyvdA=","A0ZKYLLhNwY/0fzk/IVDeOqWtMmS3l3OqAUcDcBwc/A=","CVg6HDxR8p\u002BKSy1NlJ3zIKBQvgufzL\u002BppFGICUQ\u002Bt3w=","QIOQB6Fr0POEbCmn8nJHkvxhD/MBJBkLkRbYJLA/IYQ=","JJFYlRoX9pKL3BogzIBb9yD5WmSNP4CS7LqbhDK3ZV0=","m//7eW/q\u002B\u002BS7cLBAJncoxjjMdd4ob9yeVwXyO\u002BUT9eI=","bK\u002BMzz3RPOuZoQyDguWcV6QBHxrg2U2\u002B/bAVZ\u002BgpVmE=","Xo3U/owG8nW3wjViQjnwmTJExAAnQChLevgIL6SxVgs=","SfZ1OYxt3htPAa47uV4vmWa1Bdgc4ieW\u002B9xakLRDHO8=","vzc7efbyllU994SpWhcuSAj24nDhk3qWXXJzCFKhIec=","Hv9au18n6omxvLxP0EsBJ8HeLnUAyfa1Jg4xpVg87no=","adO3IRtQJ9N8t04wKkZwPZiqyI0LJOP6xF/Suhog1JE=","4pzRrv9HLcQeFngePzOiTXUmXw1iRIiKRoSCce0cugM=","ngTcMNcqz/xhWZBn5CPSCOvjsrREr0HuEN5UW941TxA=","M9OQdzerfnWfXeRb3kqjQR22ZEAOhPUxnUuB5YzydL0=","orh0CcK78/TtV1LjA11aYsn/YxKYUBNSni\u002BannRaWeI=","UGiYv\u002B7Q0HlOyGACdO9FzYJXDNFgT/cKO8xYQLlx5eg=","mplxK8c12PonhfXKpL\u002BHRLxWkaWn30SmMhIBChvSCVE=","BiFEtxAeulxzg4093ODVO/hBU6BTvilbCg7luNc0QSk=","DKhaZ5fHA5jhqYZosYg5BHMriRJHTo30JRbiC\u002BOpd3c=","h0g/Fvvw0atLURHfHCthiHIOZpDTYQ3D\u002BxmffXCZTGs=","OX7hVhGLcy1hGsMR9Q6K5e1m9Inuxss\u002B3dBLxzpfxGo=","zSEvxET0DOTN2cpCiXQExXCGOxdoXNvPpmHsUTUhTXM=","ePeQgUMQPfE9ZZdl8jI2rfGshuKKHGpnajQ0M5shZSk=","BZMtXiMXFAikFlU3GpSO4qnu4ytUYCrr\u002BH44xQ0sqVg=","WhBc1hqkyc8177jVvo4eQuWlpHVI96iHm4VFZAOO7Fc=","mcMbV2\u002BNCfk5eAGwoYnsWOyN8b8NuAO7iH1ewAHyW6U=","DcLX4hxLgf7iG7fZIKLj7eUITuiIGEgGnDYTCSAmcII=","nzN2wI8kPPjBRWwSKLalEYmrDXyx2Y8f5S\u002BJCKVFj1o=","3QVdUFr8xuBbDhinUAe\u002BtHZRSDw8whCbedlQRGg3ByU=","Uml6Zk4Nd3yDJrKkoHqxmSCEYTiat3222CyFbAAoU28=","GstRCs2Ap1VD2t\u002BJ6nr0UpVFlKhrBm8Fi9PmSQbgj\u002B8=","sr4sunvZGYlxTk47R8QnORuMVrTEufupLlUwtph8jAE=","fm0hNxD23Xg4KufltLQTxCmPvcM3fZYY\u002B7jlnuLutTc=","DH6X9\u002BUzPeMZmgXVBMIcvPEMbk70kYRRprZcygSB9Q8="],"CachedAssets":{"Ql2PiheSms1jp3ze9191\u002BLNizQeYVsVG\u002B7N0KZ1uG20=":{"Identity":"D:\\Nextcloud\\Documents\\Open-Archival\\OpenArchival.Blazor\\wwwroot\\favicon.ico","SourceId":"OpenArchival.Blazor","SourceType":"Discovered","ContentRoot":"D:\\Nextcloud\\Documents\\Open-Archival\\OpenArchival.Blazor\\wwwroot\\","BasePath":"_content/OpenArchival.Blazor","RelativePath":"favicon#[.{fingerprint}]?.ico","AssetKind":"All","AssetMode":"All","AssetRole":"Primary","AssetMergeBehavior":null,"AssetMergeSource":"","RelatedAsset":null,"AssetTraitName":null,"AssetTraitValue":null,"Fingerprint":"2jeq8efc6q","Integrity":"8kNQh\u002BLErZHx3sMz237BHWFasAGQ88EWakJrWWYOxTA=","CopyToOutputDirectory":"Never","CopyToPublishDirectory":"PreserveNewest","OriginalItemSpec":"wwwroot\\favicon.ico","FileLength":15086,"LastWriteTime":"2025-08-12T18:28:17.583355+00:00"}},"CachedCopyCandidates":{}}
\ No newline at end of file
+{"GlobalPropertiesHash":"XVWMafEhfrS/fg2Zj7asTNqgDrfpiwoMDXnjdP5dMDc=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["Ql2PiheSms1jp3ze9191\u002BLNizQeYVsVG\u002B7N0KZ1uG20=","J7kZmrOHXGR7mhUJ1qRNPdV4NRND\u002BvY/dHsYc/Fs5FA=","zoyQzHz20Gq24s2eR\u002BQU8CSBO06r9oxWByDVQGHt4qE=","S9txWBMkH4Yj1eG2HUPOkUWz9AoQkGdbSfeW8NgN\u002BxE=","o0aea9nqp02517BUOs9/nGaM6H/UnpWWtWAeDomcgV4=","y2dTx6xFkyjAzITP/\u002BSs40MCBm/Tmm7ZOBpI/DqlBFE=","ZmxUJu7Va54dnyLTpPaeb3LXxiTxJP0LRIHL\u002BnuF44c=","cg4n0kRzzWgY2qlZdUwROVqv25x8/QQaCM/NXeXHAm0=","AcEyg5sF\u002BG7h8cTd4OPHIBGSDc58NkKWM9LXnPCts2s=","VFrRe4girF3FRpDOlYSBnVrkOnl76ekWOxNm7mF4t0A=","j9/Tw8fXyMbeynWjJYmY6kJ7FJ59tcwknts73gweoEI=","8d5OfgLy6a4RJsFXKLcxA1egZHtmIKAbps5lBmeNt38=","AaPPr3bR/sBWrgmYgZKKMSIKNbQeqLf310KQRpKnfsI=","5IT4oOrh1c8VH1VjwWuD7ai4PiPBq/13R4tEiY/TSPI=","Czn9tLfHWPwVf9uh/XrNgA6Ks6J9tVB4JwfLegj/ftM=","SphdH4dZI\u002BUI/NAY8yVibP3CY6lMLtHcvNauNjiMUG4=","NuRRqbDGasbzd5BYo0DL2OjUjjh57dbMlAUsJkIwkPM=","yLN/BA9iAut9Pd7HzcSogC02i9ddxjif2fdbbGIUB70=","CPWWJ2Bp2hzILnMJAY673sNfUfm3FZSJEAufT8hMY6E=","2QKOn\u002BHTSGGnvtnKhUgPyG3helsQD0OCrMBMj\u002B7T3lw=","wtIXZYfkJHNxuSRxgTwoC\u002BU59\u002Byk38nSrpBgrm/qiAo=","9b\u002BWZIOTiDlyAbFbG434M0hhY786ENq3Fu7wCA09jUo=","87spKP4vbfUzWbrg4lDHyoNr6kpsnJEK24nTFEP9rck=","/vMoyd2fA4sgtfeJQc7cppdLQDn8TcwztXnss03HUUw=","oNCxGtvhYEhZorlxe3gldEXtD1YdpsMnXGcFwqqeeQw=","Ld9r0/i9fUO7QsnlP7r1KKriqtVDmSx8cLG0in2YMSo=","53lPHr9hM1ATjEpC\u002B2/TXZeAlArG\u002BcTVBOU0rnOCSYY=","XPDTlgt2uSfOwx8b0oKHXnDrOjRanq/v7VC/aAqsKsg=","XA43zdGlmTrdY6wEAYknKYBFN9IztLZ2jSrofw0b6V4=","InYJRKMtWl6vOkkIYW9DWTiLIRhMbWwp/GcLrfgTYhs=","b/\u002BexuVW46WvMaRrT/V89clZeIFOODWEpaVshFcyvdA=","A0ZKYLLhNwY/0fzk/IVDeOqWtMmS3l3OqAUcDcBwc/A=","CVg6HDxR8p\u002BKSy1NlJ3zIKBQvgufzL\u002BppFGICUQ\u002Bt3w=","QIOQB6Fr0POEbCmn8nJHkvxhD/MBJBkLkRbYJLA/IYQ=","JJFYlRoX9pKL3BogzIBb9yD5WmSNP4CS7LqbhDK3ZV0=","m//7eW/q\u002B\u002BS7cLBAJncoxjjMdd4ob9yeVwXyO\u002BUT9eI=","bK\u002BMzz3RPOuZoQyDguWcV6QBHxrg2U2\u002B/bAVZ\u002BgpVmE=","Xo3U/owG8nW3wjViQjnwmTJExAAnQChLevgIL6SxVgs=","SfZ1OYxt3htPAa47uV4vmWa1Bdgc4ieW\u002B9xakLRDHO8=","vzc7efbyllU994SpWhcuSAj24nDhk3qWXXJzCFKhIec=","Hv9au18n6omxvLxP0EsBJ8HeLnUAyfa1Jg4xpVg87no=","adO3IRtQJ9N8t04wKkZwPZiqyI0LJOP6xF/Suhog1JE=","4pzRrv9HLcQeFngePzOiTXUmXw1iRIiKRoSCce0cugM=","ngTcMNcqz/xhWZBn5CPSCOvjsrREr0HuEN5UW941TxA=","BUREzTKq6RTkGHrfniKilZfRuTg4naE2ieRV7bV5lz8=","orh0CcK78/TtV1LjA11aYsn/YxKYUBNSni\u002BannRaWeI=","UGiYv\u002B7Q0HlOyGACdO9FzYJXDNFgT/cKO8xYQLlx5eg=","mplxK8c12PonhfXKpL\u002BHRLxWkaWn30SmMhIBChvSCVE=","NIYgVLh6ji9gJ1Rhs4pFuptF3VfDQWz0HV7NHwzTT6c=","uAozb7aRuFLoAnAhhvZeFjIdKDdTACDgpJiOl6qHZF8=","WJ839ZvY8at/iFC8W6iEpRBlbT1jxwU8ZxLszuamAeA=","WqkWjsLTtPmi62fvid\u002BunNqDvkSqFLJ\u002BnRuuVn/CuK0=","zSEvxET0DOTN2cpCiXQExXCGOxdoXNvPpmHsUTUhTXM=","4n9PKTbTnHbwJbn0rzhgsQnIrFt83FYEMWA4GNooCzA=","BZMtXiMXFAikFlU3GpSO4qnu4ytUYCrr\u002BH44xQ0sqVg=","WhBc1hqkyc8177jVvo4eQuWlpHVI96iHm4VFZAOO7Fc=","mcMbV2\u002BNCfk5eAGwoYnsWOyN8b8NuAO7iH1ewAHyW6U=","DcLX4hxLgf7iG7fZIKLj7eUITuiIGEgGnDYTCSAmcII=","nzN2wI8kPPjBRWwSKLalEYmrDXyx2Y8f5S\u002BJCKVFj1o=","3QVdUFr8xuBbDhinUAe\u002BtHZRSDw8whCbedlQRGg3ByU=","Uml6Zk4Nd3yDJrKkoHqxmSCEYTiat3222CyFbAAoU28=","GstRCs2Ap1VD2t\u002BJ6nr0UpVFlKhrBm8Fi9PmSQbgj\u002B8=","sr4sunvZGYlxTk47R8QnORuMVrTEufupLlUwtph8jAE=","fm0hNxD23Xg4KufltLQTxCmPvcM3fZYY\u002B7jlnuLutTc=","DH6X9\u002BUzPeMZmgXVBMIcvPEMbk70kYRRprZcygSB9Q8="],"CachedAssets":{"Ql2PiheSms1jp3ze9191\u002BLNizQeYVsVG\u002B7N0KZ1uG20=":{"Identity":"D:\\Nextcloud\\Documents\\Open-Archival\\OpenArchival.Blazor\\wwwroot\\favicon.ico","SourceId":"OpenArchival.Blazor","SourceType":"Discovered","ContentRoot":"D:\\Nextcloud\\Documents\\Open-Archival\\OpenArchival.Blazor\\wwwroot\\","BasePath":"_content/OpenArchival.Blazor","RelativePath":"favicon#[.{fingerprint}]?.ico","AssetKind":"All","AssetMode":"All","AssetRole":"Primary","AssetMergeBehavior":null,"AssetMergeSource":"","RelatedAsset":null,"AssetTraitName":null,"AssetTraitValue":null,"Fingerprint":"2jeq8efc6q","Integrity":"8kNQh\u002BLErZHx3sMz237BHWFasAGQ88EWakJrWWYOxTA=","CopyToOutputDirectory":"Never","CopyToPublishDirectory":"PreserveNewest","OriginalItemSpec":"wwwroot\\favicon.ico","FileLength":15086,"LastWriteTime":"2025-08-12T18:28:17.583355+00:00"}},"CachedCopyCandidates":{}}
\ No newline at end of file
diff --git a/OpenArchival.Blazor/obj/Debug/net9.0/staticwebassets.references.upToDateCheck.txt b/OpenArchival.Blazor/obj/Debug/net9.0/staticwebassets.references.upToDateCheck.txt
index 8bcd82b..f2b4af3 100644
--- a/OpenArchival.Blazor/obj/Debug/net9.0/staticwebassets.references.upToDateCheck.txt
+++ b/OpenArchival.Blazor/obj/Debug/net9.0/staticwebassets.references.upToDateCheck.txt
@@ -218,3 +218,39 @@ D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\st
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
+D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
diff --git a/OpenArchival.DataAccess/ApplicationDbContext.cs b/OpenArchival.DataAccess/ApplicationDbContext.cs
index 88e026d..34b9fb6 100644
--- a/OpenArchival.DataAccess/ApplicationDbContext.cs
+++ b/OpenArchival.DataAccess/ApplicationDbContext.cs
@@ -50,6 +50,10 @@ public class ApplicationDbContext(DbContextOptions options
.HasForeignKey(entry => entry.ArtifactGroupingId)
.OnDelete(DeleteBehavior.Cascade);
+ modelBuilder.Entity()
+ .Navigation(g => g.IdentifierFields)
+ .UsePropertyAccessMode(PropertyAccessMode.Field);
+
var dictionaryComparer = new ValueComparer>(
(dictionary1, dictionary2) => dictionary1.OrderBy(pair => pair.Key)
.SequenceEqual(dictionary2.OrderBy(pair => pair.Key)),
diff --git a/OpenArchival.DataAccess/Models/ArtifactGrouping.cs b/OpenArchival.DataAccess/Models/ArtifactGrouping.cs
index f4cebda..264e5cb 100644
--- a/OpenArchival.DataAccess/Models/ArtifactGrouping.cs
+++ b/OpenArchival.DataAccess/Models/ArtifactGrouping.cs
@@ -15,7 +15,7 @@ public class ArtifactGrouping
{
get
{
- return ModelHelpers.MakeIdentifier(_identifierFields.Values, Category.FieldSeparator, null);
+ return ModelHelpers.MakeIdentifier(IdentifierFields.Values, Category.FieldSeparator, null);
}
}
diff --git a/OpenArchival.DataAccess/Providers/ArtifactGroupingProvider.cs b/OpenArchival.DataAccess/Providers/ArtifactGroupingProvider.cs
index 9946cbe..d7b821d 100644
--- a/OpenArchival.DataAccess/Providers/ArtifactGroupingProvider.cs
+++ b/OpenArchival.DataAccess/Providers/ArtifactGroupingProvider.cs
@@ -6,11 +6,11 @@ namespace OpenArchival.DataAccess;
public class ArtifactGroupingProvider : IArtifactGroupingProvider
{
- private readonly ApplicationDbContext _context;
+ private readonly IDbContextFactory _context;
private readonly ILogger _logger;
[SetsRequiredMembers]
- public ArtifactGroupingProvider(ApplicationDbContext context, ILogger logger)
+ public ArtifactGroupingProvider(IDbContextFactory context, ILogger logger)
{
_context = context;
_logger = logger;
@@ -18,57 +18,75 @@ public class ArtifactGroupingProvider : IArtifactGroupingProvider
public async Task GetGroupingAsync(int id)
{
- return await _context.ArtifactGroupings
- .Where(g => g.Id == id)
+ await using var context = await _context.CreateDbContextAsync();
+ return await context.ArtifactGroupings
.Include(g => g.Category)
+ .Include(g => g.IdentifierFields)
+ .Include(g => g.ChildArtifactEntries)
+ .ThenInclude(e => e.StorageLocation)
+ .Include(g => g.ChildArtifactEntries)
+ .ThenInclude(e => e.Type)
+ .Include(g => g.ChildArtifactEntries)
+ .ThenInclude(e => e.Files)
+ .Where(g => g.Id == id)
.FirstOrDefaultAsync();
}
public async Task GetGroupingAsync(string artifactGroupingIdentifier)
{
- return await _context.ArtifactGroupings
+ await using var context = await _context.CreateDbContextAsync();
+ return await context.ArtifactGroupings
.Where(g => g.ArtifactGroupingIdentifier == artifactGroupingIdentifier)
.Include(g => g.Category)
+ .Include(g => g.ChildArtifactEntries)
+ .ThenInclude(g => g.StorageLocation)
+ .ThenInclude(g => g.Location)
.FirstOrDefaultAsync();
}
public async Task CreateGroupingAsync(ArtifactGrouping grouping)
{
- _context.ArtifactGroupings.Add(grouping);
- await _context.SaveChangesAsync();
+ await using var context = await _context.CreateDbContextAsync();
+ context.ArtifactGroupings.Add(grouping);
+ await context.SaveChangesAsync();
}
public async Task UpdateGroupingAsync(ArtifactGrouping grouping)
{
- _context.ArtifactGroupings.Update(grouping);
- await _context.SaveChangesAsync();
+ await using var context = await _context.CreateDbContextAsync();
+ context.ArtifactGroupings.Update(grouping);
+ await context.SaveChangesAsync();
}
public async Task DeleteGroupingAsync(int id)
{
- await _context.ArtifactGroupings
+ await using var context = await _context.CreateDbContextAsync();
+ await context.ArtifactGroupings
.Where(p => p.Id == id)
.ExecuteDeleteAsync();
- await _context.SaveChangesAsync();
+ await context.SaveChangesAsync();
}
public async Task DeleteGroupingAsync(ArtifactGrouping grouping)
{
- _context.ArtifactGroupings.Remove(grouping);
- await _context.SaveChangesAsync();
+ await using var context = await _context.CreateDbContextAsync();
+ context.ArtifactGroupings.Remove(grouping);
+ await context.SaveChangesAsync();
}
public async Task> GetGroupingsPaged(int pageNumber, int resultsCount)
{
+ await using var context = await _context.CreateDbContextAsync();
if (pageNumber < 1 || resultsCount < 1)
{
throw new ArgumentOutOfRangeException($"Either page number or number of results was less than or equal to 0. {nameof(pageNumber)}={pageNumber} {nameof(resultsCount)}={resultsCount}");
}
- var totalCount = await _context.ArtifactGroupings.CountAsync();
+ var totalCount = await context.ArtifactGroupings.CountAsync();
- var items = await _context.ArtifactGroupings
+ var items = await context.ArtifactGroupings
+ .Include(g => g.ChildArtifactEntries)
.Include(g => g.Category)
.OrderBy(g => g.Id)
.Skip((pageNumber - 1) * resultsCount)
@@ -77,4 +95,10 @@ public class ArtifactGroupingProvider : IArtifactGroupingProvider
return items;
}
+
+ public async Task GetTotalCount()
+ {
+ await using var context = await _context.CreateDbContextAsync();
+ return context.ArtifactGroupings.Count();
+ }
}
\ No newline at end of file
diff --git a/OpenArchival.DataAccess/Providers/Interfaces/IArtifactGroupingProvider.cs b/OpenArchival.DataAccess/Providers/Interfaces/IArtifactGroupingProvider.cs
index d3a9ba8..e616f12 100644
--- a/OpenArchival.DataAccess/Providers/Interfaces/IArtifactGroupingProvider.cs
+++ b/OpenArchival.DataAccess/Providers/Interfaces/IArtifactGroupingProvider.cs
@@ -9,4 +9,5 @@ public interface IArtifactGroupingProvider
Task DeleteGroupingAsync(int id);
Task DeleteGroupingAsync(ArtifactGrouping grouping);
Task> GetGroupingsPaged(int pageNumber, int resultsCount);
+ public Task GetTotalCount();
}
\ No newline at end of file
diff --git a/OpenArchival.DataAccess/bin/Debug/net9.0/OpenArchival.DataAccess.dll b/OpenArchival.DataAccess/bin/Debug/net9.0/OpenArchival.DataAccess.dll
index d229572..a19cb90 100644
Binary files a/OpenArchival.DataAccess/bin/Debug/net9.0/OpenArchival.DataAccess.dll and b/OpenArchival.DataAccess/bin/Debug/net9.0/OpenArchival.DataAccess.dll differ
diff --git a/OpenArchival.DataAccess/bin/Debug/net9.0/OpenArchival.DataAccess.exe b/OpenArchival.DataAccess/bin/Debug/net9.0/OpenArchival.DataAccess.exe
index db2c148..0fec7b4 100644
Binary files a/OpenArchival.DataAccess/bin/Debug/net9.0/OpenArchival.DataAccess.exe and b/OpenArchival.DataAccess/bin/Debug/net9.0/OpenArchival.DataAccess.exe differ
diff --git a/OpenArchival.DataAccess/bin/Debug/net9.0/OpenArchival.DataAccess.pdb b/OpenArchival.DataAccess/bin/Debug/net9.0/OpenArchival.DataAccess.pdb
index f3fd33c..85b1583 100644
Binary files a/OpenArchival.DataAccess/bin/Debug/net9.0/OpenArchival.DataAccess.pdb and b/OpenArchival.DataAccess/bin/Debug/net9.0/OpenArchival.DataAccess.pdb differ
diff --git a/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.AssemblyInfo.cs b/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.AssemblyInfo.cs
index bbd0a66..d637e7c 100644
--- a/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.AssemblyInfo.cs
+++ b/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.AssemblyInfo.cs
@@ -15,7 +15,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OpenArchival.DataAccess")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+dd3968f6effa8f45f27a3ec91c34762c88380f06")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+ff34eb87b9d0eec9553fb4767daadfcc0d97fb44")]
[assembly: System.Reflection.AssemblyProductAttribute("OpenArchival.DataAccess")]
[assembly: System.Reflection.AssemblyTitleAttribute("OpenArchival.DataAccess")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
diff --git a/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.AssemblyInfoInputs.cache b/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.AssemblyInfoInputs.cache
index 6dcb1b0..e09aa2a 100644
--- a/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.AssemblyInfoInputs.cache
+++ b/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.AssemblyInfoInputs.cache
@@ -1 +1 @@
-3f1dc26310f431c1735242d3a315e070d6215de828a0f93ee5bf50c1e5b9de38
+9c710d1eda832a1b6dfacbdd6d88e8d851c4fd9722e33c20de29410792da1d82
diff --git a/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.dll b/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.dll
index d229572..a19cb90 100644
Binary files a/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.dll and b/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.dll differ
diff --git a/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.pdb b/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.pdb
index f3fd33c..85b1583 100644
Binary files a/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.pdb and b/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.pdb differ
diff --git a/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.sourcelink.json b/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.sourcelink.json
index db67660..2daf2fd 100644
--- a/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.sourcelink.json
+++ b/OpenArchival.DataAccess/obj/Debug/net9.0/OpenArchival.DataAccess.sourcelink.json
@@ -1 +1 @@
-{"documents":{"D:\\Nextcloud\\Documents\\Open-Archival\\*":"https://raw.githubusercontent.com/vtallen/Open-Archival/dd3968f6effa8f45f27a3ec91c34762c88380f06/*"}}
\ No newline at end of file
+{"documents":{"D:\\Nextcloud\\Documents\\Open-Archival\\*":"https://raw.githubusercontent.com/vtallen/Open-Archival/ff34eb87b9d0eec9553fb4767daadfcc0d97fb44/*"}}
\ No newline at end of file
diff --git a/OpenArchival.DataAccess/obj/Debug/net9.0/apphost.exe b/OpenArchival.DataAccess/obj/Debug/net9.0/apphost.exe
index db2c148..0fec7b4 100644
Binary files a/OpenArchival.DataAccess/obj/Debug/net9.0/apphost.exe and b/OpenArchival.DataAccess/obj/Debug/net9.0/apphost.exe differ
diff --git a/OpenArchival.DataAccess/obj/Debug/net9.0/ref/OpenArchival.DataAccess.dll b/OpenArchival.DataAccess/obj/Debug/net9.0/ref/OpenArchival.DataAccess.dll
index 96976b6..6a03547 100644
Binary files a/OpenArchival.DataAccess/obj/Debug/net9.0/ref/OpenArchival.DataAccess.dll and b/OpenArchival.DataAccess/obj/Debug/net9.0/ref/OpenArchival.DataAccess.dll differ
diff --git a/OpenArchival.DataAccess/obj/Debug/net9.0/refint/OpenArchival.DataAccess.dll b/OpenArchival.DataAccess/obj/Debug/net9.0/refint/OpenArchival.DataAccess.dll
index 96976b6..6a03547 100644
Binary files a/OpenArchival.DataAccess/obj/Debug/net9.0/refint/OpenArchival.DataAccess.dll and b/OpenArchival.DataAccess/obj/Debug/net9.0/refint/OpenArchival.DataAccess.dll differ
diff --git a/OpenArchival.DataAccess/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json b/OpenArchival.DataAccess/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json
index b7ba391..6669195 100644
--- a/OpenArchival.DataAccess/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json
+++ b/OpenArchival.DataAccess/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json
@@ -1 +1 @@
-{"GlobalPropertiesHash":"J3r5h7pKF0kY0DRJx0Xqba86ngtHs3jduVq7GPX+nwI=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["51WRq7nT/WTvnhamRxLn7Ony/A1bnAxDelsXO4Ehpwc=","aDrxgmPzfmAYNrzynmphKXORQNARBvx3ZJm3IcIlVIA=","dFQa1Ee6LWN6QaEoa8lulEtbH6imVMCsVrPTv7uB7rA=","KAWcEu8sopHLr7dsoLsr\u002Bz7vrHN0YxMtmdfBYeH1kwI=","\u002Bjyo4JejKGZVNH7yAY1POV7dsMBGmszgVLUsVwm0S6Y=","E6ltkajZSrcZfEd5mYBcKe4AnJ/ZOJ8hZBTp71ugK08="],"CachedAssets":{},"CachedCopyCandidates":{}}
\ No newline at end of file
+{"GlobalPropertiesHash":"J3r5h7pKF0kY0DRJx0Xqba86ngtHs3jduVq7GPX+nwI=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["51WRq7nT/WTvnhamRxLn7Ony/A1bnAxDelsXO4Ehpwc=","aDrxgmPzfmAYNrzynmphKXORQNARBvx3ZJm3IcIlVIA=","dFQa1Ee6LWN6QaEoa8lulEtbH6imVMCsVrPTv7uB7rA=","KAWcEu8sopHLr7dsoLsr\u002Bz7vrHN0YxMtmdfBYeH1kwI=","\u002Bjyo4JejKGZVNH7yAY1POV7dsMBGmszgVLUsVwm0S6Y=","fDpShEUul2xTzLSmjcwncSU4OZgXILMHjt2fTsSSXoo="],"CachedAssets":{},"CachedCopyCandidates":{}}
\ No newline at end of file
diff --git a/OpenArchival.DataAccess/obj/Debug/net9.0/rjsmrazor.dswa.cache.json b/OpenArchival.DataAccess/obj/Debug/net9.0/rjsmrazor.dswa.cache.json
index cf98b82..dc6ece1 100644
--- a/OpenArchival.DataAccess/obj/Debug/net9.0/rjsmrazor.dswa.cache.json
+++ b/OpenArchival.DataAccess/obj/Debug/net9.0/rjsmrazor.dswa.cache.json
@@ -1 +1 @@
-{"GlobalPropertiesHash":"EHbx5ejyqDv8gH5NpOoZxRAV9glFiYxTGFnRTcGg8no=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["51WRq7nT/WTvnhamRxLn7Ony/A1bnAxDelsXO4Ehpwc=","aDrxgmPzfmAYNrzynmphKXORQNARBvx3ZJm3IcIlVIA=","dFQa1Ee6LWN6QaEoa8lulEtbH6imVMCsVrPTv7uB7rA=","KAWcEu8sopHLr7dsoLsr\u002Bz7vrHN0YxMtmdfBYeH1kwI=","\u002Bjyo4JejKGZVNH7yAY1POV7dsMBGmszgVLUsVwm0S6Y=","E6ltkajZSrcZfEd5mYBcKe4AnJ/ZOJ8hZBTp71ugK08="],"CachedAssets":{},"CachedCopyCandidates":{}}
\ No newline at end of file
+{"GlobalPropertiesHash":"EHbx5ejyqDv8gH5NpOoZxRAV9glFiYxTGFnRTcGg8no=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["51WRq7nT/WTvnhamRxLn7Ony/A1bnAxDelsXO4Ehpwc=","aDrxgmPzfmAYNrzynmphKXORQNARBvx3ZJm3IcIlVIA=","dFQa1Ee6LWN6QaEoa8lulEtbH6imVMCsVrPTv7uB7rA=","KAWcEu8sopHLr7dsoLsr\u002Bz7vrHN0YxMtmdfBYeH1kwI=","\u002Bjyo4JejKGZVNH7yAY1POV7dsMBGmszgVLUsVwm0S6Y=","fDpShEUul2xTzLSmjcwncSU4OZgXILMHjt2fTsSSXoo="],"CachedAssets":{},"CachedCopyCandidates":{}}
\ No newline at end of file