Fixed bug where deletes of artifact groupings would not cascade
This commit is contained in:
67
OpenArchival - Copy.sln
Normal file
67
OpenArchival - Copy.sln
Normal file
@@ -0,0 +1,67 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.14.36310.24
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8EC462FD-D22E-90A8-E5CE-7E832BA40C5D}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.gitignore = .gitignore
|
||||
nuget.config = nuget.config
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenArchival.Blazor", "OpenArchival.Blazor\OpenArchival.Blazor.csproj", "{E69C87C7-6376-425B-B4C5-82C4C45FC1C4}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenArchival.DataAccess", "OpenArchival.DataAccess\OpenArchival.DataAccess.csproj", "{41A0E099-EAC2-4B88-B1C6-EBD0FA40BABC}"
|
||||
EndProject
|
||||
Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{81DDED9D-158B-E303-5F62-77A2896D2A5A}"
|
||||
<<<<<<< HEAD
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenArchival.Blazor.FileViewer", "OpenArchival.Blazor.FileViewer\OpenArchival.Blazor.FileViewer.csproj", "{C90DE897-C79F-EEE6-6DF6-936C80C3A783}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenArchival.Blazor.AdminPages", "OpenArchival.Blazor.AdminPages\OpenArchival.Blazor.AdminPages.csproj", "{520BA4C1-D700-44D9-80B3-F30FDB870166}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenArchival.Blazor.CustomComponents", "OpenArchival.Blazor.CustomComponents\OpenArchival.Blazor.CustomComponents.csproj", "{C8F28D94-810B-43E1-9520-FD2F7337175A}"
|
||||
=======
|
||||
>>>>>>> 781793a27f2e164808340b1adb5ce70e1800b187
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{E69C87C7-6376-425B-B4C5-82C4C45FC1C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E69C87C7-6376-425B-B4C5-82C4C45FC1C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E69C87C7-6376-425B-B4C5-82C4C45FC1C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E69C87C7-6376-425B-B4C5-82C4C45FC1C4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{41A0E099-EAC2-4B88-B1C6-EBD0FA40BABC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{41A0E099-EAC2-4B88-B1C6-EBD0FA40BABC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{41A0E099-EAC2-4B88-B1C6-EBD0FA40BABC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{41A0E099-EAC2-4B88-B1C6-EBD0FA40BABC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{81DDED9D-158B-E303-5F62-77A2896D2A5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{81DDED9D-158B-E303-5F62-77A2896D2A5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{81DDED9D-158B-E303-5F62-77A2896D2A5A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{81DDED9D-158B-E303-5F62-77A2896D2A5A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
<<<<<<< HEAD
|
||||
{C90DE897-C79F-EEE6-6DF6-936C80C3A783}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C90DE897-C79F-EEE6-6DF6-936C80C3A783}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C90DE897-C79F-EEE6-6DF6-936C80C3A783}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C90DE897-C79F-EEE6-6DF6-936C80C3A783}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{520BA4C1-D700-44D9-80B3-F30FDB870166}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{520BA4C1-D700-44D9-80B3-F30FDB870166}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{520BA4C1-D700-44D9-80B3-F30FDB870166}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{520BA4C1-D700-44D9-80B3-F30FDB870166}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C8F28D94-810B-43E1-9520-FD2F7337175A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C8F28D94-810B-43E1-9520-FD2F7337175A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C8F28D94-810B-43E1-9520-FD2F7337175A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C8F28D94-810B-43E1-9520-FD2F7337175A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
=======
|
||||
>>>>>>> 781793a27f2e164808340b1adb5ce70e1800b187
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {FE3486E7-7FEE-4B26-9CA7-D75E071DD7A3}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1,13 @@
|
||||
@page
|
||||
@model OpenArchival.Blazor.AdminComponents.MyFeature.Pages.Page1Model
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<title>Page1</title>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,13 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
|
||||
namespace OpenArchival.Blazor.AdminComponents.MyFeature.Pages
|
||||
{
|
||||
public class Page1Model : PageModel
|
||||
{
|
||||
public void OnGet()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
@namespace OpenArchival.Blazor.AdminPages
|
||||
@namespace OpenArchival.Blazor.AdminPages.Shared
|
||||
|
||||
@using Microsoft.AspNetCore.Components.Web
|
||||
@using System.ComponentModel.DataAnnotations
|
||||
@@ -1,4 +1,4 @@
|
||||
@namespace OpenArchival.Blazor.AdminPages
|
||||
@namespace OpenArchival.Blazor.AdminPages.Shared
|
||||
@using Microsoft.AspNetCore.Components.Web
|
||||
@using MudBlazor
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
<MudNavGroup Title="Blog" Icon="@Icons.Material.Filled.Book">
|
||||
<MudNavLink Href="/admin/blogedit" Match="NavLinkMatch.All" Icon="@Icons.Material.Filled.Edit">Create Blog Post</MudNavLink>
|
||||
<MudNavLink Href="/admin/viewblogs" Match="NavLinkMatch.All" Icon="@Icons.Material.Filled.Edit">View/Edit Blog Posts</MudNavLink>
|
||||
<MudNavLink Href="/admin/blogstable" Match="NavLinkMatch.All" Icon="@Icons.Material.Filled.Edit">Edit Blog Posts</MudNavLink>
|
||||
</MudNavGroup>
|
||||
</MudNavMenu>
|
||||
</MudDrawer>
|
||||
@@ -2,23 +2,31 @@
|
||||
@using Microsoft.AspNetCore.Components.Web
|
||||
@using MudBlazor
|
||||
@using MudExtensions
|
||||
@using OpenArchival.Blazor.ArchiveSearch
|
||||
@using OpenArchival.DataAccess
|
||||
@using OpenArchival.Blazor.AdminPages.Shared;
|
||||
@using OpenArchival.Blazor.AdminPages;
|
||||
@using OpenArchival.Blazor;
|
||||
|
||||
<ArchiveSearchBar @ref=_searchBar SearchTermsChanged="OnSearchTermsChanged"></ArchiveSearchBar>
|
||||
<MudDataGrid
|
||||
T="ArtifactGroupingRowElement"
|
||||
MultiSelection=true
|
||||
Filterable=false
|
||||
SelectOnRowClick=true
|
||||
ServerData="new Func<GridState<ArtifactGroupingRowElement>, Task<GridData<ArtifactGroupingRowElement>>>(ServerReload)"
|
||||
@key=@ArtifactGroupingRows
|
||||
@ref=@DataGrid>
|
||||
@ref=@DataGrid
|
||||
@bind-SelectedItems="_selectedGroupings"
|
||||
Comparer="_comparer">
|
||||
|
||||
<ToolBarContent>
|
||||
<MudButton
|
||||
Variant="Variant.Filled"
|
||||
StartIcon="@Icons.Material.Filled.Delete"
|
||||
Color="Color.Error"
|
||||
OnClick="OnDeleteClicked">Delete</MudButton>
|
||||
|
||||
<MudSpacer />
|
||||
|
||||
<MudButton Variant="Variant.Filled"
|
||||
StartIcon="@Icons.Material.Filled.Delete"
|
||||
Color="Color.Error"
|
||||
OnClick="OnDeleteClicked">Delete</MudButton>
|
||||
</ToolBarContent>
|
||||
|
||||
<Columns>
|
||||
@@ -66,13 +74,35 @@
|
||||
@inject IDialogService DialogService;
|
||||
@inject IArtifactGroupingProvider GroupingProvider;
|
||||
@inject ArtifactEntrySharedHelpers Helpers;
|
||||
|
||||
@inject ArtifactGroupingSearch SearchProvider;
|
||||
@code
|
||||
{
|
||||
public class ArtifactGroupingRowElementComparer : IEqualityComparer<ArtifactGroupingRowElement>
|
||||
{
|
||||
public bool Equals(ArtifactGroupingRowElement? x, ArtifactGroupingRowElement? y)
|
||||
{
|
||||
if (ReferenceEquals(x, y)) return true;
|
||||
if (x is null || y is null) return false;
|
||||
return x.Id == y.Id;
|
||||
}
|
||||
|
||||
public int GetHashCode(ArtifactGroupingRowElement obj)
|
||||
{
|
||||
return obj.Id.GetHashCode();
|
||||
}
|
||||
}
|
||||
public List<ArtifactGroupingRowElement> ArtifactGroupingRows { get; set; } = new();
|
||||
|
||||
public MudDataGrid<ArtifactGroupingRowElement> DataGrid { get; set; } = default!;
|
||||
|
||||
private ArtifactGroupingRowElementComparer _comparer = new();
|
||||
|
||||
private string _searchString { get; set; } = "";
|
||||
|
||||
private ArchiveSearchBar _searchBar { get; set; } = default!;
|
||||
|
||||
private HashSet<ArtifactGroupingRowElement> _selectedGroupings { get; set; } = [];
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
// Load inital data
|
||||
@@ -98,7 +128,7 @@
|
||||
Id=grouping.Id
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task OnRowEditClick(ArtifactGroupingRowElement row)
|
||||
@@ -147,16 +177,30 @@
|
||||
foreach (var grouping in selected)
|
||||
{
|
||||
await GroupingProvider.DeleteGroupingAsync(grouping.Id);
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
await DataGrid.ReloadServerData();
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private async Task<GridData<ArtifactGroupingRowElement>> ServerReload(GridState<ArtifactGroupingRowElement> state)
|
||||
{
|
||||
int totalItems = await GroupingProvider.GetTotalCount();
|
||||
|
||||
IEnumerable<ArtifactGrouping> groupings = await GroupingProvider.GetGroupingsPaged(state.Page + 1, state.PageSize);
|
||||
SearchProvider.PageSize = state.PageSize;
|
||||
IEnumerable<ArtifactGrouping> groupings;
|
||||
|
||||
if (string.IsNullOrEmpty(_searchString))
|
||||
{
|
||||
groupings = await GroupingProvider.GetGroupingsPaged(state.Page + 1, state.PageSize);
|
||||
totalItems = await GroupingProvider.GetTotalCount();
|
||||
|
||||
} else
|
||||
{
|
||||
await SearchProvider.Search(_searchString, _searchBar.SelectedFilter, state.Page + 1);
|
||||
groupings = SearchProvider.SearchResults;
|
||||
}
|
||||
|
||||
var pagedItems = groupings.Select(grouping => new ArtifactGroupingRowElement()
|
||||
{
|
||||
@@ -167,10 +211,60 @@
|
||||
IsPublicallyVisible = grouping.IsPublicallyVisible,
|
||||
});
|
||||
|
||||
StateHasChanged();
|
||||
|
||||
return new GridData<ArtifactGroupingRowElement>()
|
||||
{
|
||||
TotalItems = totalItems,
|
||||
Items = pagedItems
|
||||
};
|
||||
}
|
||||
|
||||
private async Task OnSearchTermsChanged(string args)
|
||||
{
|
||||
_searchString = args;
|
||||
await DataGrid.ReloadServerData();
|
||||
}
|
||||
|
||||
public async Task<List<ArtifactGrouping>> SelectedItems()
|
||||
{
|
||||
List<ArtifactGrouping> selectedGroupings = [];
|
||||
foreach (ArtifactGroupingRowElement row in DataGrid.SelectedItems)
|
||||
{
|
||||
selectedGroupings.Add(await GroupingProvider.GetGroupingAsync(row.Id));
|
||||
}
|
||||
|
||||
return selectedGroupings;
|
||||
}
|
||||
|
||||
public void ClearSelected()
|
||||
{
|
||||
// OLD: _selectedGroupings = new HashSet<ArtifactGroupingRowElement>();
|
||||
// NEW: Initialize with the comparer
|
||||
_selectedGroupings = new HashSet<ArtifactGroupingRowElement>(_comparer);
|
||||
}
|
||||
|
||||
// 6. ADD THIS NEW PUBLIC METHOD
|
||||
public Task SetSelectedItemsAsync(IEnumerable<ArtifactGrouping> groupingsToSelect)
|
||||
{
|
||||
// Convert from the full ArtifactGrouping entity to the RowElement.
|
||||
// We only *really* need the Id for the comparer, but populating
|
||||
// the other fields is good practice.
|
||||
var rowElementsToSelect = groupingsToSelect.Select(grouping => new ArtifactGroupingRowElement
|
||||
{
|
||||
Id = grouping.Id,
|
||||
Title = grouping.Title,
|
||||
ArtifactGroupingIdentifier = grouping.ArtifactGroupingIdentifier ?? string.Empty,
|
||||
CategoryName = grouping.Category?.Name ?? string.Empty,
|
||||
IsPublicallyVisible = grouping.IsPublicallyVisible
|
||||
});
|
||||
|
||||
// Create a new HashSet from the list, using the comparer.
|
||||
// Assigning this to the bound variable will update the grid's UI.
|
||||
_selectedGroupings = new HashSet<ArtifactGroupingRowElement>(rowElementsToSelect, _comparer);
|
||||
|
||||
StateHasChanged();
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
@namespace OpenArchival.Blazor.AdminPages
|
||||
@namespace OpenArchival.Blazor.AdminPages.Shared
|
||||
@using Microsoft.AspNetCore.Components.Web
|
||||
@using OpenArchival.DataAccess
|
||||
@using System.ComponentModel.DataAnnotations
|
||||
@@ -1,4 +1,4 @@
|
||||
@namespace OpenArchival.Blazor.AdminPages
|
||||
@namespace OpenArchival.Blazor.AdminPages.Shared
|
||||
@using System.Text
|
||||
@using MudBlazor
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace OpenArchival.Blazor;
|
||||
namespace OpenArchival.Blazor.AdminPages.Shared;
|
||||
|
||||
using OpenArchival.DataAccess;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
@@ -1,7 +1,7 @@
|
||||
using OpenArchival.DataAccess;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace OpenArchival.Blazor;
|
||||
namespace OpenArchival.Blazor.AdminPages.Shared;
|
||||
|
||||
public class ArtifactGroupingValidationModel : IValidatableObject
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace OpenArchival.Blazor;
|
||||
namespace OpenArchival.Blazor.AdminPages.Shared;
|
||||
|
||||
public class IdentifierFieldValidationModel
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace OpenArchival.Blazor.AdminPages;
|
||||
namespace OpenArchival.Blazor.AdminPages.Shared;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using OpenArchival.DataAccess;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace OpenArchival.Blazor;
|
||||
namespace OpenArchival.Blazor.AdminPages.Shared;
|
||||
|
||||
public class ArtifactGroupingRowElement
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
@namespace OpenArchival.Blazor.AdminPages
|
||||
@namespace OpenArchival.Blazor.AdminPages.Shared
|
||||
@using Microsoft.EntityFrameworkCore;
|
||||
@using Microsoft.Extensions.Logging
|
||||
@using MudBlazor.Interfaces
|
||||
@@ -1,4 +1,4 @@
|
||||
@namespace OpenArchival.Blazor.AdminPages
|
||||
@namespace OpenArchival.Blazor.AdminPages.Shared
|
||||
@using System.ComponentModel.DataAnnotations;
|
||||
@using OpenArchival.DataAccess;
|
||||
@using MudBlazor
|
||||
@@ -1,4 +1,4 @@
|
||||
@namespace OpenArchival.Blazor.AdminPages
|
||||
@namespace OpenArchival.Blazor.AdminPages.Shared
|
||||
@using MudBlazor
|
||||
|
||||
<MudCard Outlined="true">
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace OpenArchival.Blazor;
|
||||
namespace OpenArchival.Blazor.AdminPages.Shared;
|
||||
|
||||
using Microsoft.IdentityModel.Abstractions;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
@@ -1,6 +1,6 @@
|
||||
@page "/categories"
|
||||
|
||||
@namespace OpenArchival.Blazor.AdminPages
|
||||
@namespace OpenArchival.Blazor.AdminPages.Shared
|
||||
@using Microsoft.AspNetCore.Components.Web
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
@using Microsoft.Extensions.Logging
|
||||
@@ -0,0 +1,28 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Razor">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<FrameworkReference Include="Microsoft.AspNetCore.App" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.IdentityModel.Abstractions" Version="8.14.0" />
|
||||
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="8.14.0" />
|
||||
<PackageReference Include="MudBlazor" Version="8.13.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\OpenArchival.Blazor.ArchiveSearch\OpenArchival.Blazor.ArchiveSearch.csproj" />
|
||||
<ProjectReference Include="..\OpenArchival.Blazor.CustomComponents\OpenArchival.Blazor.CustomComponents.csproj" />
|
||||
<ProjectReference Include="..\OpenArchival.DataAccess\OpenArchival.DataAccess.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
|
||||
</Project>
|
||||
@@ -6,6 +6,7 @@
|
||||
@using MudExRichTextEditor
|
||||
@using MudBlazor
|
||||
@using OpenArchival.Blazor
|
||||
@using OpenArchival.Blazor.AdminPages.Shared
|
||||
@using OpenArchival.Blazor.Config
|
||||
|
||||
<MudText Typo="Typo.h6">About Page Editor</MudText>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
@page "/admin"
|
||||
|
||||
@using OpenArchival.Blazor.AdminPages.Shared
|
||||
@layout AdminControlPanelLayout
|
||||
|
||||
<h3>Admin Home</h3>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
@using Microsoft.AspNetCore.Components.Web
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
@using MudBlazor
|
||||
@using OpenArchival.Blazor.AdminPages.Shared
|
||||
@using static Microsoft.AspNetCore.Components.Web.RenderMode
|
||||
|
||||
@rendermode InteractiveServer
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
@page
|
||||
@model OpenArchival.Blazor.AdminPages.MyFeature.Pages.Page1Model
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<title>Page1</title>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,13 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
|
||||
namespace OpenArchival.Blazor.AdminPages.MyFeature.Pages
|
||||
{
|
||||
public class Page1Model : PageModel
|
||||
{
|
||||
public void OnGet()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
12
OpenArchival.Blazor.AdminPages/BlogPostsTablePage.razor
Normal file
12
OpenArchival.Blazor.AdminPages/BlogPostsTablePage.razor
Normal file
@@ -0,0 +1,12 @@
|
||||
@page "/admin/blogstable"
|
||||
|
||||
@using OpenArchival.Blazor.AdminPages
|
||||
@using OpenArchival.Blazor.AdminPages.Shared
|
||||
@using OpenArchival.Blazor.Blog
|
||||
@layout AdminControlPanelLayout
|
||||
|
||||
<BlogPostTable></BlogPostTable>
|
||||
|
||||
@code {
|
||||
|
||||
}
|
||||
@@ -6,6 +6,7 @@
|
||||
@using MudExRichTextEditor
|
||||
@using MudBlazor
|
||||
@using OpenArchival.Blazor
|
||||
@using OpenArchival.Blazor.AdminPages.Shared
|
||||
@using OpenArchival.Blazor.Config
|
||||
|
||||
<MudText Typo="Typo.h6">Home Page Editor</MudText>
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\OpenArchival.Blazor.AdminPages.Shared\OpenArchival.Blazor.AdminPages.Shared.csproj" />
|
||||
<ProjectReference Include="..\OpenArchival.Blazor.ArchiveSearch\OpenArchival.Blazor.ArchiveSearch.csproj" />
|
||||
<ProjectReference Include="..\OpenArchival.Blazor.Blog\OpenArchival.Blazor.Blog.csproj" />
|
||||
<ProjectReference Include="..\OpenArchival.Blazor.Config\OpenArchival.Blazor.Config.csproj" />
|
||||
<ProjectReference Include="..\OpenArchival.Blazor.CustomComponents\OpenArchival.Blazor.CustomComponents.csproj" />
|
||||
<ProjectReference Include="..\OpenArchival.DataAccess\OpenArchival.DataAccess.csproj" />
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
@using Microsoft.AspNetCore.Components.Web
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
@using OpenArchival.Blazor.AdminPages.Shared
|
||||
@using OpenArchival.Blazor.CustomComponents
|
||||
@using MudBlazor
|
||||
@using OpenArchival.DataAccess
|
||||
|
||||
@@ -13,6 +13,9 @@
|
||||
"Microsoft.IdentityModel.Tokens": "8.14.0",
|
||||
"MudBlazor": "8.13.0",
|
||||
"MudExRichTextEditor": "8.13.0",
|
||||
"OpenArchival.Blazor.AdminPages.Shared": "1.0.0",
|
||||
"OpenArchival.Blazor.ArchiveSearch": "1.0.0",
|
||||
"OpenArchival.Blazor.Blog": "1.0.0",
|
||||
"OpenArchival.Blazor.Config": "1.0.0",
|
||||
"OpenArchival.Blazor.CustomComponents": "1.0.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
@@ -991,6 +994,66 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenArchival.Blazor.AdminPages.Shared/1.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Abstractions": "8.14.0",
|
||||
"Microsoft.IdentityModel.Tokens": "8.14.0",
|
||||
"MudBlazor": "8.13.0",
|
||||
"OpenArchival.Blazor.ArchiveSearch": "1.0.0",
|
||||
"OpenArchival.Blazor.CustomComponents": "1.0.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"OpenArchival.Blazor.AdminPages.Shared.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenArchival.Blazor.ArchiveSearch/1.0.0": {
|
||||
"dependencies": {
|
||||
"MudBlazor": "8.13.0",
|
||||
"OpenArchival.Blazor.ArtifactGroupingDisplay": "1.0.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"OpenArchival.Blazor.ArchiveSearch.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenArchival.Blazor.ArtifactGroupingDisplay/1.0.0": {
|
||||
"dependencies": {
|
||||
"CodeBeam.MudExtensions": "6.3.0",
|
||||
"MudBlazor": "8.13.0",
|
||||
"OpenArchival.Blazor.CustomComponents": "1.0.0",
|
||||
"OpenArchival.Blazor.FileViewer": "1.0.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"OpenArchival.Blazor.ArtifactGroupingDisplay.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenArchival.Blazor.Blog/1.0.0": {
|
||||
"dependencies": {
|
||||
"MudBlazor": "8.13.0",
|
||||
"MudExRichTextEditor": "8.13.0",
|
||||
"OpenArchival.Blazor.AdminPages.Shared": "1.0.0",
|
||||
"OpenArchival.Blazor.Config": "1.0.0",
|
||||
"OpenArchival.Blazor.CustomComponents": "1.0.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"OpenArchival.Blazor.Blog.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenArchival.Blazor.Config/1.0.0": {
|
||||
"runtime": {
|
||||
"OpenArchival.Blazor.Config.dll": {
|
||||
@@ -1003,6 +1066,7 @@
|
||||
"dependencies": {
|
||||
"CodeBeam.MudExtensions": "6.3.0",
|
||||
"MudBlazor": "8.13.0",
|
||||
"OpenArchival.Blazor.Config": "1.0.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
@@ -1012,6 +1076,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenArchival.Blazor.FileViewer/1.0.0": {
|
||||
"dependencies": {
|
||||
"CodeBeam.MudExtensions": "6.3.0",
|
||||
"MudBlazor": "8.13.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"OpenArchival.Blazor.FileViewer.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenArchival.DataAccess/1.0.0": {
|
||||
"dependencies": {
|
||||
"EntityFramework": "6.5.1",
|
||||
@@ -1695,6 +1772,26 @@
|
||||
"path": "zstdsharp.port/0.8.5",
|
||||
"hashPath": "zstdsharp.port.0.8.5.nupkg.sha512"
|
||||
},
|
||||
"OpenArchival.Blazor.AdminPages.Shared/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"OpenArchival.Blazor.ArchiveSearch/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"OpenArchival.Blazor.ArtifactGroupingDisplay/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"OpenArchival.Blazor.Blog/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"OpenArchival.Blazor.Config/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
@@ -1705,6 +1802,11 @@
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"OpenArchival.Blazor.FileViewer/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"OpenArchival.DataAccess/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -14,7 +14,7 @@ using System.Reflection;
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("OpenArchival.Blazor.AdminPages")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+0e24ce207395fb1c32a87d10049c1d81dc4784fe")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+b34449808fa29388ff6ca79b560f657d74738fdd")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("OpenArchival.Blazor.AdminPages")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("OpenArchival.Blazor.AdminPages")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
@@ -1 +1 @@
|
||||
1999676c2e39ed7655de012aa20c50d16eaa8954d13ff03c71308aba4df1d206
|
||||
5dd13044308b5b7b2644a6e0b9714ed0a24d9f1d599346705c849cdb11095190
|
||||
|
||||
@@ -27,52 +27,16 @@ build_property.EnableCodeStyleSeverity =
|
||||
build_metadata.AdditionalFiles.TargetPath = QWJvdXRQYWdlRWRpdG9yLnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/AdminControlPanelLayout.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QWRtaW5Db250cm9sUGFuZWxMYXlvdXQucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/AdminHome.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QWRtaW5Ib21lLnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/ArchiveItems/AddArchiveGroupingComponent.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXEFkZEFyY2hpdmVHcm91cGluZ0NvbXBvbmVudC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/ArchiveItems/AddGroupingDialog.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXEFkZEdyb3VwaW5nRGlhbG9nLnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/ArchiveItems/ArchiveEntryCreatorCard.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXEFyY2hpdmVFbnRyeUNyZWF0b3JDYXJkLnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/ArchiveItems/ArchiveGroupingsTable.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXEFyY2hpdmVHcm91cGluZ3NUYWJsZS5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/ArchiveItems/IdentifierTextBox.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXElkZW50aWZpZXJUZXh0Qm94LnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/ArchiveManagement.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZU1hbmFnZW1lbnQucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/Categories/CategoriesListComponent.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q2F0ZWdvcmllc1xDYXRlZ29yaWVzTGlzdENvbXBvbmVudC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/Categories/CategoryCreatorDialog.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q2F0ZWdvcmllc1xDYXRlZ29yeUNyZWF0b3JEaWFsb2cucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/Categories/CategoryFieldCardComponent.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q2F0ZWdvcmllc1xDYXRlZ29yeUZpZWxkQ2FyZENvbXBvbmVudC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/Categories/ViewAddCategoriesComponent.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q2F0ZWdvcmllc1xWaWV3QWRkQ2F0ZWdvcmllc0NvbXBvbmVudC5yYXpvcg==
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/BlogPostsTablePage.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QmxvZ1Bvc3RzVGFibGVQYWdlLnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/HomePageEditor.razor]
|
||||
@@ -82,3 +46,7 @@ build_metadata.AdditionalFiles.CssScope =
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/SearchPageSettings.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = U2VhcmNoUGFnZVNldHRpbmdzLnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminPages/Areas/MyFeature/Pages/Page1.cshtml]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJlYXNcTXlGZWF0dXJlXFBhZ2VzXFBhZ2UxLmNzaHRtbA==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
cd77d473066694d90adbd3c207c6e29431a22a5d905d0b01001e9e6c37ed7282
|
||||
8579fc445bbc22ef76c681f616873728ea28622341fe31bcbf18de7d0deb14c1
|
||||
|
||||
@@ -4,24 +4,46 @@ C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.DataAccess.exe
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.CustomComponents.staticwebassets.runtime.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.CustomComponents.staticwebassets.endpoints.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.FileViewer.staticwebassets.runtime.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.FileViewer.staticwebassets.endpoints.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.ArtifactGroupingDisplay.staticwebassets.runtime.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.ArtifactGroupingDisplay.staticwebassets.endpoints.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.ArchiveSearch.staticwebassets.runtime.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.ArchiveSearch.staticwebassets.endpoints.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.AdminPages.Shared.staticwebassets.runtime.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.AdminPages.Shared.staticwebassets.endpoints.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.Blog.staticwebassets.runtime.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.Blog.staticwebassets.endpoints.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.AdminPages.staticwebassets.runtime.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.AdminPages.staticwebassets.endpoints.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.AdminPages.deps.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.AdminPages.runtimeconfig.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.AdminPages.dll
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.AdminPages.pdb
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.AdminPages.Shared.dll
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.ArchiveSearch.dll
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.ArtifactGroupingDisplay.dll
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.Blog.dll
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.Config.dll
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.CustomComponents.dll
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.FileViewer.dll
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.DataAccess.dll
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.AdminPages.Shared.pdb
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.ArchiveSearch.pdb
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.Blog.pdb
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.Config.pdb
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.CustomComponents.pdb
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.DataAccess.pdb
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.ArtifactGroupingDisplay.pdb
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\bin\Debug\net9.0\OpenArchival.Blazor.FileViewer.pdb
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\OpenArchival.Blazor.AdminPages.csproj.AssemblyReference.cache
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\rpswa.dswa.cache.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\OpenArchival.Blazor.AdminPages.GeneratedMSBuildEditorConfig.editorconfig
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\OpenArchival.Blazor.AdminPages.AssemblyInfoInputs.cache
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\OpenArchival.Blazor.AdminPages.AssemblyInfo.cs
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\OpenArchival.Blazor.AdminPages.csproj.CoreCompileInputs.cache
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\OpenArchival.Blazor.AdminPages.RazorAssemblyInfo.cache
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\OpenArchival.Blazor.AdminPages.RazorAssemblyInfo.cs
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\OpenArchival.Blazor.AdminPages.sourcelink.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\rjimswa.dswa.cache.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\rjsmrazor.dswa.cache.json
|
||||
@@ -708,7 +730,7 @@ C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\compressed\21hnyluk87-jo45u8913j.gz
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\compressed\pm14qrlwbb-tkxqvq0zjw.gz
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\compressed\vuc6jv94xw-tf5u2o3oxg.gz
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\compressed\t5y2tgc8np-a9ucq0wzsm.gz
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\compressed\t5y2tgc8np-w2ijupf7qe.gz
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\staticwebassets.build.json.cache
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages\obj\Debug\net9.0\staticwebassets.development.json
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
{"documents":{"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\*":"https://raw.githubusercontent.com/vtallen/Open-Archival/0e24ce207395fb1c32a87d10049c1d81dc4784fe/*"}}
|
||||
{"documents":{"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\*":"https://raw.githubusercontent.com/vtallen/Open-Archival/b34449808fa29388ff6ca79b560f657d74738fdd/*"}}
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
{"GlobalPropertiesHash":"MRiB4IDUD95tznQVFDSUB/ZRBiL0l7NqvypMyWisBKY=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["yNASx2WVYnox7Rf0nRebIyEfzcxIHDp/Pb47b3qclZk=","5i4uB6FXFTMSwuITJArdIE4L1BFP0XwqpjmTIerviVM=","N4NvN2nZR/kOB4KK4/SyeGaNDwhoZplbvxum1\u002BUkgPI=","4GEmwvUAYPnwuwfQ7Kgd0bTvShxDlKFJCvNWYf/2m8Y=","gWjtd7QMqmKugLcjoA\u002Bz7uTk/kPdK0OzWgPxibM4Q80=","q5\u002BBQ0cq6yYjQt7fjTb0P66tO5bxjIqGHFBjOiPuszQ=","lao90sMVLCx33PwCNC6c7eEpsWPlbqDw7v4MrMzvC8c=","fS8D7hjkphJRf6C\u002Bm/Qnypds9mEqiMfsUqX6crY95Cg=","cF3g8FswId5g9A1UyRGfJgcpgxL4XwcQUsisKXtrqjw=","LTKqIVmh6nq1MbEhySE0uxyFyWff9WrU1ON1M\u002BHeHU8=","sJjcvxwurmrqwAU/4zgO4hND3LvV36eZllxUbJFEZq4=","y1UjlmRucY2a7SZOaTcGmX43sccL/D64K/06s2Lir1U=","S2UnhitwgLXL4NKKJv8zqoaNXqB2nMFTAVHkB/UeLhk=","MDaymOOBTf9aIEzQEvxamD7RXb4UCN/BaiI/tZTy\u002BFc=","viW3wF06mFdTO24KOFsfjpjmAHhCve7VMomZdzTnw24="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
{"GlobalPropertiesHash":"MRiB4IDUD95tznQVFDSUB/ZRBiL0l7NqvypMyWisBKY=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["hdkbLfBW80O6V8mRPDKVS4GxQBJ5Yq0//0f//uD6hCk=","ckfKiN/UexJCvNpv0IgeNIJ6YAGvgCi3MC1sfmYkoN0=","pbSNtMQDhFMOMtwKLca6IMii/j8hkhz/CWdMueUvqio=","GAOQQkPakdbiy9rSer1zfDSSyrRdi0aIzirRUblnpoU=","fIF/NHmkDZl/7KNBYJnkVWBYCllBDN72oTSxX0ge2yU=","NditJ\u002BqRyztCABpJJTUoV1KZMCGC3kRDrcfYTbZHb5g=","Yexa2RDYJdaq6TJVMfDtPNPpPgBmMC9np3fo6eRlcD4="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
@@ -1 +1 @@
|
||||
{"GlobalPropertiesHash":"pFI6wgQWnM801WhA+kBqb87aAQ1SYD4hIz9ddwGuTRY=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["yNASx2WVYnox7Rf0nRebIyEfzcxIHDp/Pb47b3qclZk=","5i4uB6FXFTMSwuITJArdIE4L1BFP0XwqpjmTIerviVM=","N4NvN2nZR/kOB4KK4/SyeGaNDwhoZplbvxum1\u002BUkgPI=","4GEmwvUAYPnwuwfQ7Kgd0bTvShxDlKFJCvNWYf/2m8Y=","gWjtd7QMqmKugLcjoA\u002Bz7uTk/kPdK0OzWgPxibM4Q80=","q5\u002BBQ0cq6yYjQt7fjTb0P66tO5bxjIqGHFBjOiPuszQ=","lao90sMVLCx33PwCNC6c7eEpsWPlbqDw7v4MrMzvC8c=","fS8D7hjkphJRf6C\u002Bm/Qnypds9mEqiMfsUqX6crY95Cg=","cF3g8FswId5g9A1UyRGfJgcpgxL4XwcQUsisKXtrqjw=","LTKqIVmh6nq1MbEhySE0uxyFyWff9WrU1ON1M\u002BHeHU8=","sJjcvxwurmrqwAU/4zgO4hND3LvV36eZllxUbJFEZq4=","y1UjlmRucY2a7SZOaTcGmX43sccL/D64K/06s2Lir1U=","S2UnhitwgLXL4NKKJv8zqoaNXqB2nMFTAVHkB/UeLhk=","MDaymOOBTf9aIEzQEvxamD7RXb4UCN/BaiI/tZTy\u002BFc=","viW3wF06mFdTO24KOFsfjpjmAHhCve7VMomZdzTnw24="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
{"GlobalPropertiesHash":"pFI6wgQWnM801WhA+kBqb87aAQ1SYD4hIz9ddwGuTRY=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["hdkbLfBW80O6V8mRPDKVS4GxQBJ5Yq0//0f//uD6hCk=","ckfKiN/UexJCvNpv0IgeNIJ6YAGvgCi3MC1sfmYkoN0=","pbSNtMQDhFMOMtwKLca6IMii/j8hkhz/CWdMueUvqio=","GAOQQkPakdbiy9rSer1zfDSSyrRdi0aIzirRUblnpoU=","fIF/NHmkDZl/7KNBYJnkVWBYCllBDN72oTSxX0ge2yU=","NditJ\u002BqRyztCABpJJTUoV1KZMCGC3kRDrcfYTbZHb5g=","Yexa2RDYJdaq6TJVMfDtPNPpPgBmMC9np3fo6eRlcD4="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
@@ -1 +1 @@
|
||||
{"GlobalPropertiesHash":"zNJXz5rQrCxSXKP7vOgOdkHaQH0t0RaJ9A6BsbVWhRo=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["5FYHdDpB/w9zgB42aIZXYNd5GUAQ2FtE1I/WTu04vIs=","TdaDWuRc1qjNpNDXZXgdepjK99ZMLKNb1l6c7haV0Es=","VT/GaZ7Ab\u002BNpRK9L5cmjsK80YbIYszAeLOk49kSkUaQ=","MjbUDu7L2AHbMq8\u002BfIQ5o9R1tMT28TQhppM8Z0hH4Fw=","NJX1DoLCS76R8Ya2DcTwkSj46QhcH6070l9VbngqqvM=","4w9GIxrOkKjQzjCQuxA\u002BR\u002BJbZDNA\u002BSXSFDobAntsTSQ=","vH6ZV\u002BdjcRzsq5yMoti6BFVvUM8HoPPsA7rcKsMGGGg=","8hUS3woWS6spbIauTI/Y56WYgds/lARH5p2YNH0zZbc=","ptK5lsbMMAF0MyfmXnXU0QoC0HJxlfM9v6gLIoJTbOU=","uRurSxZAEKPpQhTAARkYymmooR4UmE\u002Bgv/DLtdyvYd0=","fQZMXudOPo1zhfhLFcNVfKnr2EUaUQuMoTsXBSpQgbU=","Vd0O9sdyyXroAIEWXKMP0l6ejQ31ESX7qvIwEqJlqQc=","JDq35wZFjR6BR0th1mOaInyWsHAwiS3cadTNqIXpQwM=","KIc4Xg9bLENyVevCGosxCAfl48\u002BTWy\u002BG2OgadQk2MFQ=","gzECo3WgQldP5aVzMEsxwgkYTlGFI648GTf7zELSwpg="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
{"GlobalPropertiesHash":"zNJXz5rQrCxSXKP7vOgOdkHaQH0t0RaJ9A6BsbVWhRo=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["8rwJW2oJ1N6avlB8aPUwJUw5ecsbB\u002Be8EVy698wb3Wk=","aIKWbliFkXTwMrmbq5VXtD\u002B\u002BibXnYpkRoAI/R9zrVc8=","PRgC7yKZYWW1HSmLLx7mFFjTsfnsSKZiWTubGfwop08=","GSj14sBlTN30VbywZSk/fdP7tmoXRFedlx\u002BiXkmTFmg=","BdvWuioCvJaYr3ccQPGGBr00IS0hQq/qmdfSXAG7/6Y=","wNN\u002B5ItYUgNVeQzGO8qCQ2yGyy7T0rECqedhBQC8U\u002BY=","1WESorfAcDx3QVqwphw2p6ZA8trBMrcqaH1gD3hkPBs="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
vbnlO0s+h2GHPLEX05mBMBFzd0NgcWtiZQ9ZxvkIhPg=
|
||||
zpfJB2FFQN9dfjA4njRPgIiyBlXQHGgSUN/OsW2WpLo=
|
||||
File diff suppressed because one or more lines are too long
@@ -1,104 +1,119 @@
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminPages.Shared\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArchiveSearch\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.Blog\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.ArtifactGroupingDisplay\obj\Debug\net9.0\staticwebassets.build.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.FileViewer\obj\Debug\net9.0\staticwebassets.build.json
|
||||
|
||||
@@ -4,6 +4,99 @@
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminPages\\OpenArchival.Blazor.AdminPages.csproj": {}
|
||||
},
|
||||
"projects": {
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminPages.Shared\\OpenArchival.Blazor.AdminPages.Shared.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminPages.Shared\\OpenArchival.Blazor.AdminPages.Shared.csproj",
|
||||
"projectName": "OpenArchival.Blazor.AdminPages.Shared",
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminPages.Shared\\OpenArchival.Blazor.AdminPages.Shared.csproj",
|
||||
"packagesPath": "C:\\Users\\vtall\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminPages.Shared\\obj\\",
|
||||
"projectStyle": "PackageReference",
|
||||
"fallbackFolders": [
|
||||
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
||||
],
|
||||
"configFilePaths": [
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\NuGet.Config",
|
||||
"C:\\Users\\vtall\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net9.0"
|
||||
],
|
||||
"sources": {
|
||||
"C:\\Program Files\\dotnet\\library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"projectReferences": {
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArchiveSearch\\OpenArchival.Blazor.ArchiveSearch.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArchiveSearch\\OpenArchival.Blazor.ArchiveSearch.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\OpenArchival.Blazor.CustomComponents.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\OpenArchival.Blazor.CustomComponents.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "direct"
|
||||
},
|
||||
"SdkAnalysisLevel": "9.0.300"
|
||||
},
|
||||
"frameworks": {
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Abstractions": {
|
||||
"target": "Package",
|
||||
"version": "[8.14.0, )"
|
||||
},
|
||||
"Microsoft.IdentityModel.Tokens": {
|
||||
"target": "Package",
|
||||
"version": "[8.14.0, )"
|
||||
},
|
||||
"MudBlazor": {
|
||||
"target": "Package",
|
||||
"version": "[8.13.0, )"
|
||||
}
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48",
|
||||
"net481"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"frameworkReferences": {
|
||||
"Microsoft.AspNetCore.App": {
|
||||
"privateAssets": "none"
|
||||
},
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminPages\\OpenArchival.Blazor.AdminPages.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
@@ -33,6 +126,15 @@
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"projectReferences": {
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminPages.Shared\\OpenArchival.Blazor.AdminPages.Shared.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminPages.Shared\\OpenArchival.Blazor.AdminPages.Shared.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArchiveSearch\\OpenArchival.Blazor.ArchiveSearch.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArchiveSearch\\OpenArchival.Blazor.ArchiveSearch.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Blog\\OpenArchival.Blazor.Blog.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Blog\\OpenArchival.Blazor.Blog.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Config\\OpenArchival.Blazor.Config.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Config\\OpenArchival.Blazor.Config.csproj"
|
||||
},
|
||||
@@ -105,6 +207,269 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArchiveSearch\\OpenArchival.Blazor.ArchiveSearch.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArchiveSearch\\OpenArchival.Blazor.ArchiveSearch.csproj",
|
||||
"projectName": "OpenArchival.Blazor.ArchiveSearch",
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArchiveSearch\\OpenArchival.Blazor.ArchiveSearch.csproj",
|
||||
"packagesPath": "C:\\Users\\vtall\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArchiveSearch\\obj\\",
|
||||
"projectStyle": "PackageReference",
|
||||
"fallbackFolders": [
|
||||
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
||||
],
|
||||
"configFilePaths": [
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\NuGet.Config",
|
||||
"C:\\Users\\vtall\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net9.0"
|
||||
],
|
||||
"sources": {
|
||||
"C:\\Program Files\\dotnet\\library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"projectReferences": {
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArtifactGroupingDisplay\\OpenArchival.Blazor.ArtifactGroupingDisplay.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArtifactGroupingDisplay\\OpenArchival.Blazor.ArtifactGroupingDisplay.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "direct"
|
||||
},
|
||||
"SdkAnalysisLevel": "9.0.300"
|
||||
},
|
||||
"frameworks": {
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"dependencies": {
|
||||
"MudBlazor": {
|
||||
"target": "Package",
|
||||
"version": "[8.13.0, )"
|
||||
}
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48",
|
||||
"net481"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"frameworkReferences": {
|
||||
"Microsoft.AspNetCore.App": {
|
||||
"privateAssets": "none"
|
||||
},
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArtifactGroupingDisplay\\OpenArchival.Blazor.ArtifactGroupingDisplay.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArtifactGroupingDisplay\\OpenArchival.Blazor.ArtifactGroupingDisplay.csproj",
|
||||
"projectName": "OpenArchival.Blazor.ArtifactGroupingDisplay",
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArtifactGroupingDisplay\\OpenArchival.Blazor.ArtifactGroupingDisplay.csproj",
|
||||
"packagesPath": "C:\\Users\\vtall\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArtifactGroupingDisplay\\obj\\",
|
||||
"projectStyle": "PackageReference",
|
||||
"fallbackFolders": [
|
||||
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
||||
],
|
||||
"configFilePaths": [
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\NuGet.Config",
|
||||
"C:\\Users\\vtall\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net9.0"
|
||||
],
|
||||
"sources": {
|
||||
"C:\\Program Files\\dotnet\\library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"projectReferences": {
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\OpenArchival.Blazor.CustomComponents.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\OpenArchival.Blazor.CustomComponents.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.FileViewer\\OpenArchival.Blazor.FileViewer.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.FileViewer\\OpenArchival.Blazor.FileViewer.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "direct"
|
||||
},
|
||||
"SdkAnalysisLevel": "9.0.300"
|
||||
},
|
||||
"frameworks": {
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"dependencies": {
|
||||
"CodeBeam.MudExtensions": {
|
||||
"target": "Package",
|
||||
"version": "[6.3.0, )"
|
||||
},
|
||||
"MudBlazor": {
|
||||
"target": "Package",
|
||||
"version": "[8.13.0, )"
|
||||
}
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48",
|
||||
"net481"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"frameworkReferences": {
|
||||
"Microsoft.AspNetCore.App": {
|
||||
"privateAssets": "none"
|
||||
},
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Blog\\OpenArchival.Blazor.Blog.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Blog\\OpenArchival.Blazor.Blog.csproj",
|
||||
"projectName": "OpenArchival.Blazor.Blog",
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Blog\\OpenArchival.Blazor.Blog.csproj",
|
||||
"packagesPath": "C:\\Users\\vtall\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Blog\\obj\\",
|
||||
"projectStyle": "PackageReference",
|
||||
"fallbackFolders": [
|
||||
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
||||
],
|
||||
"configFilePaths": [
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\NuGet.Config",
|
||||
"C:\\Users\\vtall\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net9.0"
|
||||
],
|
||||
"sources": {
|
||||
"C:\\Program Files\\dotnet\\library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"projectReferences": {
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminPages.Shared\\OpenArchival.Blazor.AdminPages.Shared.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminPages.Shared\\OpenArchival.Blazor.AdminPages.Shared.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Config\\OpenArchival.Blazor.Config.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Config\\OpenArchival.Blazor.Config.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\OpenArchival.Blazor.CustomComponents.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\OpenArchival.Blazor.CustomComponents.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "direct"
|
||||
},
|
||||
"SdkAnalysisLevel": "9.0.300"
|
||||
},
|
||||
"frameworks": {
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"dependencies": {
|
||||
"MudBlazor": {
|
||||
"target": "Package",
|
||||
"version": "[8.13.0, )"
|
||||
},
|
||||
"MudExRichTextEditor": {
|
||||
"target": "Package",
|
||||
"version": "[8.13.0, )"
|
||||
}
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48",
|
||||
"net481"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"frameworkReferences": {
|
||||
"Microsoft.AspNetCore.App": {
|
||||
"privateAssets": "none"
|
||||
},
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Config\\OpenArchival.Blazor.Config.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
@@ -196,6 +561,92 @@
|
||||
"C:\\Program Files\\dotnet\\library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"projectReferences": {
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Config\\OpenArchival.Blazor.Config.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Config\\OpenArchival.Blazor.Config.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "direct"
|
||||
},
|
||||
"SdkAnalysisLevel": "9.0.300"
|
||||
},
|
||||
"frameworks": {
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"dependencies": {
|
||||
"CodeBeam.MudExtensions": {
|
||||
"target": "Package",
|
||||
"version": "[6.3.0, )"
|
||||
},
|
||||
"MudBlazor": {
|
||||
"target": "Package",
|
||||
"version": "[8.13.0, )"
|
||||
}
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48",
|
||||
"net481"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"frameworkReferences": {
|
||||
"Microsoft.AspNetCore.App": {
|
||||
"privateAssets": "none"
|
||||
},
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.FileViewer\\OpenArchival.Blazor.FileViewer.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.FileViewer\\OpenArchival.Blazor.FileViewer.csproj",
|
||||
"projectName": "OpenArchival.Blazor.FileViewer",
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.FileViewer\\OpenArchival.Blazor.FileViewer.csproj",
|
||||
"packagesPath": "C:\\Users\\vtall\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.FileViewer\\obj\\",
|
||||
"projectStyle": "PackageReference",
|
||||
"fallbackFolders": [
|
||||
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
||||
],
|
||||
"configFilePaths": [
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\NuGet.Config",
|
||||
"C:\\Users\\vtall\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net9.0"
|
||||
],
|
||||
"sources": {
|
||||
"C:\\Program Files\\dotnet\\library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
|
||||
@@ -1584,6 +1584,86 @@
|
||||
"lib/net9.0/ZstdSharp.dll": {}
|
||||
}
|
||||
},
|
||||
"OpenArchival.Blazor.AdminPages.Shared/1.0.0": {
|
||||
"type": "project",
|
||||
"framework": ".NETCoreApp,Version=v9.0",
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Abstractions": "8.14.0",
|
||||
"Microsoft.IdentityModel.Tokens": "8.14.0",
|
||||
"MudBlazor": "8.13.0",
|
||||
"OpenArchival.Blazor.ArchiveSearch": "1.0.0",
|
||||
"OpenArchival.Blazor.CustomComponents": "1.0.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
},
|
||||
"compile": {
|
||||
"bin/placeholder/OpenArchival.Blazor.AdminPages.Shared.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"bin/placeholder/OpenArchival.Blazor.AdminPages.Shared.dll": {}
|
||||
},
|
||||
"frameworkReferences": [
|
||||
"Microsoft.AspNetCore.App"
|
||||
]
|
||||
},
|
||||
"OpenArchival.Blazor.ArchiveSearch/1.0.0": {
|
||||
"type": "project",
|
||||
"framework": ".NETCoreApp,Version=v9.0",
|
||||
"dependencies": {
|
||||
"MudBlazor": "8.13.0",
|
||||
"OpenArchival.Blazor.ArtifactGroupingDisplay": "1.0.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
},
|
||||
"compile": {
|
||||
"bin/placeholder/OpenArchival.Blazor.ArchiveSearch.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"bin/placeholder/OpenArchival.Blazor.ArchiveSearch.dll": {}
|
||||
},
|
||||
"frameworkReferences": [
|
||||
"Microsoft.AspNetCore.App"
|
||||
]
|
||||
},
|
||||
"OpenArchival.Blazor.ArtifactGroupingDisplay/1.0.0": {
|
||||
"type": "project",
|
||||
"framework": ".NETCoreApp,Version=v9.0",
|
||||
"dependencies": {
|
||||
"CodeBeam.MudExtensions": "6.3.0",
|
||||
"MudBlazor": "8.13.0",
|
||||
"OpenArchival.Blazor.CustomComponents": "1.0.0",
|
||||
"OpenArchival.Blazor.FileViewer": "1.0.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
},
|
||||
"compile": {
|
||||
"bin/placeholder/OpenArchival.Blazor.ArtifactGroupingDisplay.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"bin/placeholder/OpenArchival.Blazor.ArtifactGroupingDisplay.dll": {}
|
||||
},
|
||||
"frameworkReferences": [
|
||||
"Microsoft.AspNetCore.App"
|
||||
]
|
||||
},
|
||||
"OpenArchival.Blazor.Blog/1.0.0": {
|
||||
"type": "project",
|
||||
"framework": ".NETCoreApp,Version=v9.0",
|
||||
"dependencies": {
|
||||
"MudBlazor": "8.13.0",
|
||||
"MudExRichTextEditor": "8.13.0",
|
||||
"OpenArchival.Blazor.AdminPages.Shared": "1.0.0",
|
||||
"OpenArchival.Blazor.Config": "1.0.0",
|
||||
"OpenArchival.Blazor.CustomComponents": "1.0.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
},
|
||||
"compile": {
|
||||
"bin/placeholder/OpenArchival.Blazor.Blog.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"bin/placeholder/OpenArchival.Blazor.Blog.dll": {}
|
||||
},
|
||||
"frameworkReferences": [
|
||||
"Microsoft.AspNetCore.App"
|
||||
]
|
||||
},
|
||||
"OpenArchival.Blazor.Config/1.0.0": {
|
||||
"type": "project",
|
||||
"framework": ".NETCoreApp,Version=v9.0",
|
||||
@@ -1600,6 +1680,7 @@
|
||||
"dependencies": {
|
||||
"CodeBeam.MudExtensions": "6.3.0",
|
||||
"MudBlazor": "8.13.0",
|
||||
"OpenArchival.Blazor.Config": "1.0.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
},
|
||||
"compile": {
|
||||
@@ -1612,6 +1693,24 @@
|
||||
"Microsoft.AspNetCore.App"
|
||||
]
|
||||
},
|
||||
"OpenArchival.Blazor.FileViewer/1.0.0": {
|
||||
"type": "project",
|
||||
"framework": ".NETCoreApp,Version=v9.0",
|
||||
"dependencies": {
|
||||
"CodeBeam.MudExtensions": "6.3.0",
|
||||
"MudBlazor": "8.13.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
},
|
||||
"compile": {
|
||||
"bin/placeholder/OpenArchival.Blazor.FileViewer.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"bin/placeholder/OpenArchival.Blazor.FileViewer.dll": {}
|
||||
},
|
||||
"frameworkReferences": [
|
||||
"Microsoft.AspNetCore.App"
|
||||
]
|
||||
},
|
||||
"OpenArchival.DataAccess/1.0.0": {
|
||||
"type": "project",
|
||||
"framework": ".NETCoreApp,Version=v9.0",
|
||||
@@ -4980,6 +5079,26 @@
|
||||
"zstdsharp.port.nuspec"
|
||||
]
|
||||
},
|
||||
"OpenArchival.Blazor.AdminPages.Shared/1.0.0": {
|
||||
"type": "project",
|
||||
"path": "../OpenArchival.Blazor.AdminPages.Shared/OpenArchival.Blazor.AdminPages.Shared.csproj",
|
||||
"msbuildProject": "../OpenArchival.Blazor.AdminPages.Shared/OpenArchival.Blazor.AdminPages.Shared.csproj"
|
||||
},
|
||||
"OpenArchival.Blazor.ArchiveSearch/1.0.0": {
|
||||
"type": "project",
|
||||
"path": "../OpenArchival.Blazor.ArchiveSearch/OpenArchival.Blazor.ArchiveSearch.csproj",
|
||||
"msbuildProject": "../OpenArchival.Blazor.ArchiveSearch/OpenArchival.Blazor.ArchiveSearch.csproj"
|
||||
},
|
||||
"OpenArchival.Blazor.ArtifactGroupingDisplay/1.0.0": {
|
||||
"type": "project",
|
||||
"path": "../OpenArchival.Blazor.ArtifactGroupingDisplay/OpenArchival.Blazor.ArtifactGroupingDisplay.csproj",
|
||||
"msbuildProject": "../OpenArchival.Blazor.ArtifactGroupingDisplay/OpenArchival.Blazor.ArtifactGroupingDisplay.csproj"
|
||||
},
|
||||
"OpenArchival.Blazor.Blog/1.0.0": {
|
||||
"type": "project",
|
||||
"path": "../OpenArchival.Blazor.Blog/OpenArchival.Blazor.Blog.csproj",
|
||||
"msbuildProject": "../OpenArchival.Blazor.Blog/OpenArchival.Blazor.Blog.csproj"
|
||||
},
|
||||
"OpenArchival.Blazor.Config/1.0.0": {
|
||||
"type": "project",
|
||||
"path": "../OpenArchival.Blazor.Config/OpenArchival.Blazor.Config.csproj",
|
||||
@@ -4990,6 +5109,11 @@
|
||||
"path": "../OpenArchival.Blazor.CustomComponents/OpenArchival.Blazor.CustomComponents.csproj",
|
||||
"msbuildProject": "../OpenArchival.Blazor.CustomComponents/OpenArchival.Blazor.CustomComponents.csproj"
|
||||
},
|
||||
"OpenArchival.Blazor.FileViewer/1.0.0": {
|
||||
"type": "project",
|
||||
"path": "../OpenArchival.Blazor.FileViewer/OpenArchival.Blazor.FileViewer.csproj",
|
||||
"msbuildProject": "../OpenArchival.Blazor.FileViewer/OpenArchival.Blazor.FileViewer.csproj"
|
||||
},
|
||||
"OpenArchival.DataAccess/1.0.0": {
|
||||
"type": "project",
|
||||
"path": "../OpenArchival.DataAccess/OpenArchival.DataAccess.csproj",
|
||||
@@ -5003,6 +5127,9 @@
|
||||
"Microsoft.IdentityModel.Tokens >= 8.14.0",
|
||||
"MudBlazor >= 8.13.0",
|
||||
"MudExRichTextEditor >= 8.13.0",
|
||||
"OpenArchival.Blazor.AdminPages.Shared >= 1.0.0",
|
||||
"OpenArchival.Blazor.ArchiveSearch >= 1.0.0",
|
||||
"OpenArchival.Blazor.Blog >= 1.0.0",
|
||||
"OpenArchival.Blazor.Config >= 1.0.0",
|
||||
"OpenArchival.Blazor.CustomComponents >= 1.0.0",
|
||||
"OpenArchival.DataAccess >= 1.0.0"
|
||||
@@ -5041,6 +5168,15 @@
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"projectReferences": {
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminPages.Shared\\OpenArchival.Blazor.AdminPages.Shared.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminPages.Shared\\OpenArchival.Blazor.AdminPages.Shared.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArchiveSearch\\OpenArchival.Blazor.ArchiveSearch.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.ArchiveSearch\\OpenArchival.Blazor.ArchiveSearch.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Blog\\OpenArchival.Blazor.Blog.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Blog\\OpenArchival.Blazor.Blog.csproj"
|
||||
},
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Config\\OpenArchival.Blazor.Config.csproj": {
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.Config\\OpenArchival.Blazor.Config.csproj"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "p8NDI2KjxEY=",
|
||||
"dgSpecHash": "h4IBbjhZjtg=",
|
||||
"success": true,
|
||||
"projectFilePath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminPages\\OpenArchival.Blazor.AdminPages.csproj",
|
||||
"expectedPackageFiles": [
|
||||
|
||||
56
OpenArchival.Blazor.ArchiveSearch/ArchiveSearchBar.razor
Normal file
56
OpenArchival.Blazor.ArchiveSearch/ArchiveSearchBar.razor
Normal file
@@ -0,0 +1,56 @@
|
||||
@using MudBlazor
|
||||
@namespace OpenArchival.Blazor.ArchiveSearch
|
||||
|
||||
<Microsoft.AspNetCore.Components.Forms.EditForm Model="this" OnSubmit="OnSubmit">
|
||||
<MudTextField FullWidth="true"
|
||||
AutoFocus="string.IsNullOrEmpty(SearchTerms)"
|
||||
Placeholder="Search"
|
||||
T="string"
|
||||
Variant="Variant.Outlined"
|
||||
Adornment="Adornment.Start"
|
||||
AdornmentIcon="@Icons.Material.Filled.Search"
|
||||
Class="mt-5"
|
||||
@bind-Value="SearchTerms"
|
||||
/>
|
||||
|
||||
<MudExpansionPanel Text="Filter...">
|
||||
<MudText Typo="Typo.caption">Choose which data the serach bar will search on:</MudText>
|
||||
<MudDivider></MudDivider>
|
||||
|
||||
<MudRadioGroup T="ArchiveSearchFilterType" @bind-SelectedOption="SelectedFilter">
|
||||
<MudRadio Option="ArchiveSearchFilterType.All" T="ArchiveSearchFilterType">All</MudRadio>
|
||||
<MudRadio Option="ArchiveSearchFilterType.Tags" T="ArchiveSearchFilterType">Tags</MudRadio>
|
||||
<MudRadio Option="ArchiveSearchFilterType.Defects" T="ArchiveSearchFilterType">Defects</MudRadio>
|
||||
<MudRadio Option="ArchiveSearchFilterType.ListedNames" T="ArchiveSearchFilterType">Listed Names</MudRadio>
|
||||
<MudRadio Option="ArchiveSearchFilterType.Title" T="ArchiveSearchFilterType">Title</MudRadio>
|
||||
<MudRadio Option="ArchiveSearchFilterType.Description" T="ArchiveSearchFilterType">Description</MudRadio>
|
||||
<MudRadio Option="ArchiveSearchFilterType.Filenames" T="ArchiveSearchFilterType">Filenames</MudRadio>
|
||||
<MudRadio Option="ArchiveSearchFilterType.ArtifactTranscriptions" T="ArchiveSearchFilterType">Artifact Transcriptions</MudRadio>
|
||||
</MudRadioGroup>
|
||||
</MudExpansionPanel>
|
||||
</Microsoft.AspNetCore.Components.Forms.EditForm>
|
||||
@code {
|
||||
[Parameter]
|
||||
public string SearchTerms { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<string> SearchTermsChanged { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public ArchiveSearchFilterType SelectedFilter { get; set; } = ArchiveSearchFilterType.All;
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<ArchiveSearchFilterType> SelectedFilterChanged { get; set; }
|
||||
|
||||
private async Task HandleSearchKeyDown(Microsoft.AspNetCore.Components.Web.KeyboardEventArgs args)
|
||||
{
|
||||
if (args.Key == "Enter")
|
||||
{
|
||||
await SearchTermsChanged.InvokeAsync(SearchTerms);
|
||||
}
|
||||
}
|
||||
private async Task OnSubmit(Microsoft.AspNetCore.Components.Forms.EditContext args)
|
||||
{
|
||||
await SearchTermsChanged.InvokeAsync(SearchTerms);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
@page
|
||||
@model OpenArchival.Blazor.ArchiveSearch.MyFeature.Pages.Page1Model
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<title>Page1</title>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,12 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
|
||||
namespace OpenArchival.Blazor.ArchiveSearch.MyFeature.Pages;
|
||||
|
||||
public class Page1Model : PageModel
|
||||
{
|
||||
public void OnGet()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
132
OpenArchival.Blazor.ArchiveSearch/ArtifactGroupingSearch.cs
Normal file
132
OpenArchival.Blazor.ArchiveSearch/ArtifactGroupingSearch.cs
Normal file
@@ -0,0 +1,132 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Internal;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MudBlazor;
|
||||
using Npgsql.EntityFrameworkCore.PostgreSQL;
|
||||
using NpgsqlTypes;
|
||||
using OpenArchival.DataAccess;
|
||||
using OpenArchival.DataAccess;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing.Printing;
|
||||
using System.Linq;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OpenArchival.Blazor.ArchiveSearch;
|
||||
|
||||
public enum ArchiveSearchFilterType
|
||||
{
|
||||
All,
|
||||
Tags,
|
||||
Defects,
|
||||
ListedNames,
|
||||
Title,
|
||||
Description,
|
||||
Filenames,
|
||||
ArtifactTranscriptions
|
||||
}
|
||||
|
||||
public class ArtifactGroupingSearch
|
||||
{
|
||||
|
||||
public int TotalResults { get; set; }
|
||||
|
||||
public int TotalPages { get; set; }
|
||||
|
||||
public int PageSize { get; set; } = 20;
|
||||
|
||||
public int CurrentPage { get; set; }
|
||||
|
||||
public List<ArtifactGrouping> SearchResults { get; set; } = [];
|
||||
|
||||
private string _searchTerms { get; set; }
|
||||
|
||||
private IDbContextFactory<ApplicationDbContext> _contextFactory { get; set; }
|
||||
|
||||
private Expression<Func<ArtifactGrouping, bool>> _currentFilterPredicate;
|
||||
|
||||
private ArchiveSearchFilterType _selectedFilter = ArchiveSearchFilterType.All;
|
||||
|
||||
public ArtifactGroupingSearch(IDbContextFactory<ApplicationDbContext> contextFactory)
|
||||
{
|
||||
_contextFactory = contextFactory;
|
||||
}
|
||||
|
||||
public async Task Search(string Terms, ArchiveSearchFilterType filter, int page = 1)
|
||||
{
|
||||
_searchTerms = Terms;
|
||||
_selectedFilter = filter;
|
||||
|
||||
// Determine which filter expression to use based on the radio button selection
|
||||
switch (_selectedFilter)
|
||||
{
|
||||
case ArchiveSearchFilterType.Tags:
|
||||
_currentFilterPredicate = x => x.TagsSearchVector.Matches(_searchTerms);
|
||||
break;
|
||||
case ArchiveSearchFilterType.Title:
|
||||
_currentFilterPredicate = x => x.TitleSearchVector.Matches(_searchTerms);
|
||||
break;
|
||||
case ArchiveSearchFilterType.Description:
|
||||
_currentFilterPredicate = x => x.DescriptionSearchVector.Matches(_searchTerms);
|
||||
break;
|
||||
case ArchiveSearchFilterType.Defects:
|
||||
_currentFilterPredicate = x => x.DefectsSearchVector.Matches(_searchTerms);
|
||||
break;
|
||||
case ArchiveSearchFilterType.Filenames:
|
||||
_currentFilterPredicate = x => x.FilenamesSearchVector.Matches(_searchTerms);
|
||||
break;
|
||||
case ArchiveSearchFilterType.ArtifactTranscriptions:
|
||||
_currentFilterPredicate = x => x.FileContentSearchVector.Matches(_searchTerms);
|
||||
break;
|
||||
case ArchiveSearchFilterType.ListedNames:
|
||||
_currentFilterPredicate = x => x.ListedNamesSearchVector.Matches(_searchTerms);
|
||||
break;
|
||||
case ArchiveSearchFilterType.All:
|
||||
default:
|
||||
_currentFilterPredicate = x => x.AllSearchVector.Matches(_searchTerms);
|
||||
break;
|
||||
}
|
||||
|
||||
// Get the total count using the chosen filter
|
||||
await using var context = await _contextFactory.CreateDbContextAsync();
|
||||
TotalResults = await context.ArtifactGroupings.Where(_currentFilterPredicate).CountAsync();
|
||||
TotalPages = (int)Math.Ceiling(TotalResults / (double)PageSize);
|
||||
|
||||
// Load the first page with the chosen filter
|
||||
await LoadPageAsync(page);
|
||||
}
|
||||
|
||||
public async Task LoadPageAsync(int page)
|
||||
{
|
||||
CurrentPage = page;
|
||||
|
||||
if (_currentFilterPredicate == null) // Don't run if no search has been performed
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
await using var context = await _contextFactory.CreateDbContextAsync();
|
||||
|
||||
// The query uses the dynamically set filter predicate
|
||||
SearchResults = await context.ArtifactGroupings
|
||||
.Where(_currentFilterPredicate)
|
||||
.Include(x => x.ChildArtifactEntries)
|
||||
.ThenInclude(x => x.Files)
|
||||
.Include(x=>x.Category)
|
||||
.OrderBy(x => x.Id)
|
||||
.Skip((CurrentPage - 1) * PageSize)
|
||||
.Take(PageSize)
|
||||
.ToListAsync();
|
||||
|
||||
}
|
||||
|
||||
public void ClearResults()
|
||||
{
|
||||
SearchResults.Clear();
|
||||
TotalResults = 0;
|
||||
TotalPages = 0;
|
||||
}
|
||||
}
|
||||
@@ -12,33 +12,12 @@
|
||||
@using System.Linq.Expressions
|
||||
|
||||
@using OpenArchival.Blazor.ArtifactGroupingDisplay
|
||||
@using OpenArchival.Blazor.ArchiveSearch
|
||||
@* ^^^ Add this using statement to access your component and enum ^^^ *@
|
||||
|
||||
<MudAutocomplete FullWidth="true"
|
||||
AutoFocus="string.IsNullOrEmpty(SearchTerms)"
|
||||
Placeholder="Search"
|
||||
T="string"
|
||||
Variant="Variant.Outlined"
|
||||
AdornmentIcon="@Icons.Material.Filled.Search"
|
||||
Class="mt-5"
|
||||
@bind-Text="@SearchTerms"
|
||||
OnKeyDown="HandleSearchKeyDown" />
|
||||
<ArchiveSearchBar @bind-SelectedFilter="_selectedFilter"
|
||||
SearchTermsChanged="OnSearchSubmittedAsync" />
|
||||
|
||||
<MudExpansionPanel Text="Filter...">
|
||||
<MudText Typo="Typo.caption"></MudText>
|
||||
<MudDivider></MudDivider>
|
||||
|
||||
<MudRadioGroup T="SearchFilterType" @bind-SelectedOption="_selectedFilter">
|
||||
<MudRadio Option="SearchFilterType.All" T="SearchFilterType">All</MudRadio>
|
||||
<MudRadio Option="SearchFilterType.Tags" T="SearchFilterType">Tags</MudRadio>
|
||||
<MudRadio Option="SearchFilterType.Defects" T="SearchFilterType">Defects</MudRadio>
|
||||
<MudRadio Option="SearchFilterType.ListedNames" T="SearchFilterType">Listed Names</MudRadio>
|
||||
<MudRadio Option="SearchFilterType.Title" T="SearchFilterType">Title</MudRadio>
|
||||
<MudRadio Option="SearchFilterType.Description" T="SearchFilterType">Description</MudRadio>
|
||||
<MudRadio Option="SearchFilterType.Filenames" T="SearchFilterType">Filenames</MudRadio>
|
||||
<MudRadio Option="SearchFilterType.ArtifactTranscriptions" T="SearchFilterType">Artifact Transcriptions</MudRadio>
|
||||
</MudRadioGroup>
|
||||
|
||||
</MudExpansionPanel>
|
||||
@if (_totalResults > 0)
|
||||
{
|
||||
<MudGrid Justify="Justify.FlexStart" Class="mt-1 ml-1 mb-2">
|
||||
@@ -46,6 +25,7 @@
|
||||
<MudButton Class="ml-1" StartIcon="@Icons.Material.Filled.Clear" OnClick="OnClearResults" Variant="Variant.Filled" Color="Color.Primary" Size="Size.Small">Clear</MudButton>
|
||||
</MudGrid>
|
||||
}
|
||||
|
||||
@if (_artifactGroupings.Count > 0)
|
||||
{
|
||||
<MudGrid>
|
||||
@@ -58,9 +38,10 @@
|
||||
</MudGrid>
|
||||
|
||||
<MudPaper Class="d-flex justify-center py-2 mt-4" Elevation="0">
|
||||
<MudPagination Count="_totalPages" Page="_currentPage" SelectedPageChanged="OnPageChangedAsync" />
|
||||
@* === HERE IS THE FIX === *@
|
||||
<MudPagination Count="_totalPages" Selected="_currentPage" SelectedChanged="OnPageChangedAsync" />
|
||||
</MudPaper>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@foreach (SearchPageSliderEntry entry in _sliderEntries)
|
||||
@@ -73,22 +54,12 @@ else
|
||||
@inject ILogger<SearchArchive> Logger;
|
||||
@inject NavigationManager NavigationManager;
|
||||
@code {
|
||||
public enum SearchFilterType
|
||||
{
|
||||
All,
|
||||
Tags,
|
||||
Defects,
|
||||
ListedNames,
|
||||
Title,
|
||||
Description,
|
||||
Filenames,
|
||||
ArtifactTranscriptions
|
||||
}
|
||||
|
||||
[Parameter]
|
||||
public string SearchTerms { get; set; } = "";
|
||||
|
||||
private SearchFilterType _selectedFilter = SearchFilterType.All;
|
||||
// This enum is now defined in your ArchiveSearchBar component/namespace
|
||||
private ArchiveSearchFilterType _selectedFilter = ArchiveSearchFilterType.All;
|
||||
|
||||
private List<ArtifactGrouping> _artifactGroupings { get; set; } = [];
|
||||
private int _currentPage { get; set; } = 1;
|
||||
private int _totalPages { get; set; } = 0;
|
||||
@@ -108,17 +79,22 @@ else
|
||||
}
|
||||
|
||||
await using var context = await ContextFactory.CreateDbContextAsync();
|
||||
_sliderEntries = await context.SearchPageSliderEntries.Include(e=>e.FilterTags).ToListAsync();
|
||||
_sliderEntries = await context.SearchPageSliderEntries.Include(e => e.FilterTags).ToListAsync();
|
||||
}
|
||||
|
||||
private async Task HandleSearchKeyDown(Microsoft.AspNetCore.Components.Web.KeyboardEventArgs args)
|
||||
/// <summary>
|
||||
/// Called by the ArchiveSearchBar component's 'SearchTermsChanged' event.
|
||||
/// </summary>
|
||||
private async Task OnSearchSubmittedAsync(string searchTerms)
|
||||
{
|
||||
if (args.Key != "Enter" || string.IsNullOrWhiteSpace(SearchTerms))
|
||||
if (string.IsNullOrWhiteSpace(searchTerms))
|
||||
{
|
||||
OnClearResults(null);
|
||||
return;
|
||||
}
|
||||
|
||||
NavigationManager.NavigateTo($"/search/{SearchTerms}");
|
||||
SearchTerms = searchTerms;
|
||||
NavigationManager.NavigateTo($"/search/{Uri.EscapeDataString(SearchTerms)}", replace: true);
|
||||
await PerformSearchAsync();
|
||||
}
|
||||
|
||||
@@ -127,31 +103,31 @@ else
|
||||
/// </summary>
|
||||
private async Task PerformSearchAsync()
|
||||
{
|
||||
// Determine which filter expression to use based on the radio button selection
|
||||
// Determine which filter expression to use
|
||||
switch (_selectedFilter)
|
||||
{
|
||||
case SearchFilterType.Tags:
|
||||
case ArchiveSearchFilterType.Tags:
|
||||
_currentFilterPredicate = x => x.TagsSearchVector.Matches(SearchTerms);
|
||||
break;
|
||||
case SearchFilterType.Title:
|
||||
case ArchiveSearchFilterType.Title:
|
||||
_currentFilterPredicate = x => x.TitleSearchVector.Matches(SearchTerms);
|
||||
break;
|
||||
case SearchFilterType.Description:
|
||||
case ArchiveSearchFilterType.Description:
|
||||
_currentFilterPredicate = x => x.DescriptionSearchVector.Matches(SearchTerms);
|
||||
break;
|
||||
case SearchFilterType.Defects:
|
||||
case ArchiveSearchFilterType.Defects:
|
||||
_currentFilterPredicate = x => x.DefectsSearchVector.Matches(SearchTerms);
|
||||
break;
|
||||
case SearchFilterType.Filenames:
|
||||
case ArchiveSearchFilterType.Filenames:
|
||||
_currentFilterPredicate = x => x.FilenamesSearchVector.Matches(SearchTerms);
|
||||
break;
|
||||
case SearchFilterType.ArtifactTranscriptions:
|
||||
case ArchiveSearchFilterType.ArtifactTranscriptions:
|
||||
_currentFilterPredicate = x => x.FileContentSearchVector.Matches(SearchTerms);
|
||||
break;
|
||||
case SearchFilterType.ListedNames:
|
||||
_currentFilterPredicate = x => x.ListedNamesSearchVector.Matches(SearchTerms);
|
||||
case ArchiveSearchFilterType.ListedNames:
|
||||
_currentFilterPredicate = x => x.ListedNamesSearchVector.Matches(SearchTerms);
|
||||
break;
|
||||
case SearchFilterType.All:
|
||||
case ArchiveSearchFilterType.All:
|
||||
default:
|
||||
_currentFilterPredicate = x => x.AllSearchVector.Matches(SearchTerms);
|
||||
break;
|
||||
@@ -187,20 +163,26 @@ else
|
||||
|
||||
// The query uses the dynamically set filter predicate
|
||||
_artifactGroupings = await context.ArtifactGroupings
|
||||
.Where(_currentFilterPredicate)
|
||||
.Include(x => x.ChildArtifactEntries)
|
||||
.ThenInclude(x => x.Files)
|
||||
.OrderBy(x => x.Id)
|
||||
.Skip((_currentPage - 1) * PageSize)
|
||||
.Take(PageSize)
|
||||
.ToListAsync();
|
||||
.Where(_currentFilterPredicate)
|
||||
.Include(x => x.ChildArtifactEntries)
|
||||
.ThenInclude(x => x.Files)
|
||||
.OrderBy(x => x.Id)
|
||||
.Skip((_currentPage - 1) * PageSize)
|
||||
.Take(PageSize)
|
||||
.ToListAsync();
|
||||
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private void OnClearResults(Microsoft.AspNetCore.Components.Web.MouseEventArgs args)
|
||||
{
|
||||
_totalResults = 0;
|
||||
_artifactGroupings.Clear();
|
||||
_currentPage = 1;
|
||||
_totalPages = 0;
|
||||
SearchTerms = "";
|
||||
|
||||
NavigationManager.NavigateTo("/search", replace: true);
|
||||
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
@page
|
||||
@model OpenArchival.Blazor.ArtifactGroupingDisplay.MyFeature.Pages.Page1Model
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<title>Page1</title>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,13 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
|
||||
namespace OpenArchival.Blazor.ArtifactGroupingDisplay.MyFeature.Pages
|
||||
{
|
||||
public class Page1Model : PageModel
|
||||
{
|
||||
public void OnGet()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,20 +6,22 @@
|
||||
|
||||
@page "/sr/{StringId}"
|
||||
|
||||
<MudCard Style="@($"cursor: pointer; height: {Height}px; display: flex; flex-direction: column;")" onclick="@NavigateToArchive" >
|
||||
@if (_displayImageId >= 0)
|
||||
{
|
||||
<MudCardMedia Image="@($"/api/files/{_displayImageId}")" Height="150" />
|
||||
}
|
||||
|
||||
<MudCardContent Style="flex-grow: 1; overflow-y: clip;">
|
||||
@if (ArtifactGrouping is not null)
|
||||
<MudLink Href="@($"/archive/{Id}")" Target="_blank" Style="text-decoration: none; color: inherit;">
|
||||
<MudCard Style="@($"cursor: pointer; height: {Height}px; display: flex; flex-direction: column;")">
|
||||
@if (_displayImageId >= 0)
|
||||
{
|
||||
<MudText Typo="Typo.h5">@ArtifactGrouping.Title</MudText>
|
||||
<MudText Typo="Typo.body2">@ArtifactGrouping.Description</MudText>
|
||||
<MudCardMedia Image="@($"/api/files/{_displayImageId}")" Height="150" />
|
||||
}
|
||||
</MudCardContent>
|
||||
</MudCard>
|
||||
|
||||
<MudCardContent Style="flex-grow: 1; overflow-y: clip;">
|
||||
@if (ArtifactGrouping is not null)
|
||||
{
|
||||
<MudText Typo="Typo.h5">@ArtifactGrouping.Title</MudText>
|
||||
<MudText Typo="Typo.body2">@ArtifactGrouping.Description</MudText>
|
||||
}
|
||||
</MudCardContent>
|
||||
</MudCard>
|
||||
</MudLink>
|
||||
@inject IArtifactGroupingProvider GroupingProvider;
|
||||
@inject NavigationManager NavigationManager;
|
||||
@code {
|
||||
@@ -71,18 +73,9 @@
|
||||
{
|
||||
_displayImageId = ArtifactGrouping.ChildArtifactEntries[0].Files[0].Id;
|
||||
}
|
||||
Id = ArtifactGrouping.Id;
|
||||
}
|
||||
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private async Task NavigateToArchive()
|
||||
{
|
||||
await Task.Delay(4);
|
||||
if (ArtifactGrouping is not null)
|
||||
{
|
||||
NavigationManager.NavigateTo($"/archive/{ArtifactGrouping.Id}");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
@namespace OpenArchival.Blazor.ArtifactGroupingDisplay
|
||||
<h3>FileDisplayBase</h3>
|
||||
|
||||
@code {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
@using OpenArchival.DataAccess
|
||||
@using MudBlazor
|
||||
|
||||
@if (File is not null)
|
||||
{
|
||||
<MudImage Fluid="true" Src="@File.Path" Alt="Swedish Farm House" Class="rounded-lg"/>
|
||||
}
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public required FilePathListing File { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Sets the width of the image box while it loads
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public int Width { get; set; } = 600;
|
||||
|
||||
/// <summary>
|
||||
/// Sets the height of the image box while it loads
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public int Height { get; set; } = 400;
|
||||
|
||||
[Parameter]
|
||||
public string AltText { get; set; } = "";
|
||||
|
||||
protected override Task OnParametersSetAsync()
|
||||
{
|
||||
if (File is not null || !string.IsNullOrEmpty(AltText))
|
||||
{
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
return base.OnParametersSetAsync();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
using OpenArchival.Blazor.ArtifactGroupingDisplay;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
|
||||
namespace OpenArchival.Blazor;
|
||||
|
||||
public class FileDisplayComponentFactory
|
||||
{
|
||||
private Dictionary<string, Type> _extensionToComponents { get; set; } = [];
|
||||
|
||||
public FileDisplayComponentFactory()
|
||||
{
|
||||
// Supported image file types taken from https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Image_types
|
||||
RegisterComponent<FileDisplayImage>(".apng");
|
||||
RegisterComponent<FileDisplayImage>(".png");
|
||||
RegisterComponent<FileDisplayImage>(".avif");
|
||||
RegisterComponent<FileDisplayImage>(".gif");
|
||||
RegisterComponent<FileDisplayImage>(".jpg");
|
||||
RegisterComponent<FileDisplayImage>(".jpeg");
|
||||
RegisterComponent<FileDisplayImage>(".jfif");
|
||||
RegisterComponent<FileDisplayImage>(".pjpeg");
|
||||
RegisterComponent<FileDisplayImage>(".pjg");
|
||||
RegisterComponent<FileDisplayImage>(".png");
|
||||
RegisterComponent<FileDisplayImage>(".svg");
|
||||
RegisterComponent<FileDisplayImage>(".webp");
|
||||
}
|
||||
|
||||
private string GetExtensionKey(string pathOrExtension)
|
||||
{
|
||||
return Path.GetExtension(pathOrExtension).ToUpperInvariant();
|
||||
}
|
||||
|
||||
public bool RegisterComponent<ComponentType>(string filenameOrExtension) where ComponentType : IFileDisplayComponent
|
||||
{
|
||||
string extensionString = GetExtensionKey(filenameOrExtension);
|
||||
|
||||
_extensionToComponents.Add(extensionString, typeof(ComponentType));
|
||||
return true;
|
||||
}
|
||||
|
||||
public Type? GetDisplayComponentType(string filenameOrExtension) {
|
||||
var result = _extensionToComponents.TryGetValue(GetExtensionKey(filenameOrExtension), out var component);
|
||||
|
||||
return (result) ? component : null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
@using OpenArchival.DataAccess
|
||||
|
||||
@implements IFileDisplayComponent
|
||||
|
||||
<h3>FileDisplayImage</h3>
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public required FilePathListing FilePath { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
using OpenArchival.DataAccess;
|
||||
|
||||
namespace OpenArchival.Blazor;
|
||||
|
||||
public interface IFileDisplayComponent
|
||||
{
|
||||
public FilePathListing FilePath { get; set; }
|
||||
}
|
||||
15
OpenArchival.Blazor.Blog/ArticleNotFound.razor
Normal file
15
OpenArchival.Blazor.Blog/ArticleNotFound.razor
Normal file
@@ -0,0 +1,15 @@
|
||||
@using MudBlazor
|
||||
@page "/article-not-found"
|
||||
@page "/article-not-found/{Message}"
|
||||
|
||||
<MudPaper Class="pa-4 ma-2 rounded" Elevation="3">
|
||||
<MudText Typo="Typo.h1" Align="Align.Center">404: Article Not Found!</MudText>
|
||||
@if (!string.IsNullOrEmpty(Message)) {
|
||||
<MudText Typo="Typo.body1" Align="Align.Center">@Message</MudText>
|
||||
}
|
||||
</MudPaper>
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public string? Message { get; set; }
|
||||
}
|
||||
@@ -1,20 +1,52 @@
|
||||
@using Microsoft.AspNetCore.Components.Web
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
@using Microsoft.Extensions.Options
|
||||
@using OpenArchival.Blazor.AdminPages
|
||||
@using OpenArchival.DataAccess
|
||||
@using OpenArchival.Blazor.CustomComponents
|
||||
@using MudExRichTextEditor
|
||||
@using MudBlazor
|
||||
@using System.Text
|
||||
@using Microsoft.AspNetCore.Components.Forms;
|
||||
@using OpenArchival.Blazor.Config
|
||||
@using OpenArchival.Blazor.AdminPages.Shared;
|
||||
|
||||
@page "/admin/blogedit"
|
||||
@page "/admin/blogedit/{Id}"
|
||||
@layout AdminPages.AdminControlPanelLayout;
|
||||
@page "/admin/blogedit/{Id:int}"
|
||||
@layout AdminControlPanelLayout;
|
||||
|
||||
<MudText Typo="Typo.h6">Create a Blog Post</MudText>
|
||||
<MudDivider></MudDivider>
|
||||
<MudTextField Placeholder="Title" T="string" @bind-Value=@BlogPostModel.Title></MudTextField>
|
||||
|
||||
<MudFileUpload T="IBrowserFile"
|
||||
AppendMultipleFiles=false
|
||||
Accept=".jpg,.png,.webp"
|
||||
MaximumFileCount="1"
|
||||
@bind-Files=_mainPhotoFile
|
||||
Class="mt-4">
|
||||
<ActivatorContent>
|
||||
<MudButton Variant="Variant.Filled"
|
||||
Color="Color.Primary">
|
||||
Upload Main Photo
|
||||
</MudButton>
|
||||
</ActivatorContent>
|
||||
<SelectedTemplate>
|
||||
@if (context != null)
|
||||
{
|
||||
<MudText>@context.Name</MudText>
|
||||
}
|
||||
else if (BlogPostModel.MainPhoto != null)
|
||||
{
|
||||
<MudText>@BlogPostModel.MainPhoto.OriginalName</MudText>
|
||||
}
|
||||
else
|
||||
{
|
||||
<MudText>No Main Photo Selected</MudText>
|
||||
}
|
||||
</SelectedTemplate>
|
||||
</MudFileUpload>
|
||||
|
||||
<MudExRichTextEdit @ref="@_contentEditor"
|
||||
ReadOnly="false"
|
||||
Height="444"
|
||||
@@ -25,21 +57,28 @@
|
||||
@((MarkupString)BlogPostModel.Content)
|
||||
</MudExRichTextEdit>
|
||||
|
||||
<MudText Typo="Typo.h6">Add Tags</MudText>
|
||||
<MudDivider />
|
||||
<MudText Typo="Typo.caption" Color="Color.Primary">Press enter to add.</MudText>
|
||||
<ChipContainer T="BlogPostTag" @ref="@_tagsChipContainer" @bind-Items="BlogPostModel.Tags">
|
||||
<InputContent>
|
||||
<MudAutocomplete T="string"
|
||||
Placeholder="Add Tags..."
|
||||
@bind-Text=_tagsInputValue
|
||||
OnKeyDown="HandleTagsEnter"
|
||||
>
|
||||
</MudAutocomplete>
|
||||
</InputContent>
|
||||
</ChipContainer>
|
||||
<InputContent>
|
||||
<MudAutocomplete T="string"
|
||||
Placeholder="Add Tags..."
|
||||
@bind-Text=_tagsInputValue
|
||||
OnKeyDown="HandleTagsEnter">
|
||||
</MudAutocomplete>
|
||||
</InputContent>
|
||||
</ChipContainer>
|
||||
|
||||
<MudText Typo="Typo.h6" Class="mt-4">Link Artifact Groupings</MudText>
|
||||
<MudDivider />
|
||||
<MudText Typo="Typo.caption" Color="Color.Primary">Select Artifact Groupings to Associate with this post.</MudText>
|
||||
<ArchiveGroupingsTable @ref=_artifactGroupingTable></ArchiveGroupingsTable>
|
||||
<MudGrid Justify="Justify.FlexEnd" Class="mr-4 pt-8">
|
||||
<MudButton StartIcon="@Icons.Material.Filled.Publish" Color=Color.Primary Variant=Variant.Filled OnClick="OnPublishBlogPost">Publish</MudButton>
|
||||
</MudGrid>
|
||||
|
||||
@inject IOptions<FileUploadOptions> FileOptions;
|
||||
@inject IDbContextFactory<ApplicationDbContext> ContextFactory;
|
||||
@inject ISnackbar Snackbar;
|
||||
@inject NavigationManager NavigationManager;
|
||||
@@ -57,13 +96,23 @@
|
||||
private string _tagsInputValue = "";
|
||||
private ChipContainer<BlogPostTag> _tagsChipContainer = default!;
|
||||
|
||||
private ArchiveGroupingsTable _artifactGroupingTable = default!;
|
||||
|
||||
private IBrowserFile? _mainPhotoFile;
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
if (Id != 0)
|
||||
{
|
||||
using var context = ContextFactory.CreateDbContext();
|
||||
|
||||
BlogPost? existingPost = context.BlogPosts.Include(p => p.Tags).Where(p => p.Id == Id).FirstOrDefault();
|
||||
BlogPost? existingPost = context.BlogPosts
|
||||
.Include(p => p.Tags)
|
||||
.Include(p=>p.ArtifactGroupings)
|
||||
.ThenInclude(g=>g.Category)
|
||||
.Include(p=>p.MainPhoto)
|
||||
.Where(p => p.Id == Id)
|
||||
.FirstOrDefault();
|
||||
|
||||
if (existingPost is null)
|
||||
{
|
||||
@@ -76,6 +125,28 @@
|
||||
base.OnParametersSet();
|
||||
}
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
// We only want to run this logic ONCE, on the very first render.
|
||||
if (firstRender)
|
||||
{
|
||||
// Check if we are in "edit" mode (Id != 0) and the loaded post
|
||||
// actually has any groupings to select.
|
||||
if (Id != 0 && BlogPostModel.ArtifactGroupings.Any())
|
||||
{
|
||||
// Now it is safe to call the method because _artifactGroupingTable
|
||||
// has been rendered and is no longer null.
|
||||
await _artifactGroupingTable.SetSelectedItemsAsync(BlogPostModel.ArtifactGroupings);
|
||||
|
||||
// We call StateHasChanged() to ensure the UI updates
|
||||
// with the selection state we just pushed to the child.
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
await base.OnAfterRenderAsync(firstRender);
|
||||
}
|
||||
|
||||
private async Task DeDuplicatePostTags(BlogPost post, ApplicationDbContext context)
|
||||
{
|
||||
List<BlogPostTag> finalTags = [];
|
||||
@@ -85,7 +156,7 @@
|
||||
if (existing is not null)
|
||||
{
|
||||
finalTags.Add(existing);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
context.BlogPostTags.Add(tag);
|
||||
@@ -116,53 +187,110 @@
|
||||
|
||||
private async Task OnPublishBlogPost(Microsoft.AspNetCore.Components.Web.MouseEventArgs args)
|
||||
{
|
||||
if (string.IsNullOrEmpty(BlogPostModel.Content))
|
||||
{
|
||||
Snackbar.Add("Content is required in the blog post, write something.", Severity.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(BlogPostModel.Title))
|
||||
{
|
||||
Snackbar.Add("A post title is required", Severity.Warning);
|
||||
return;
|
||||
}
|
||||
// ... (content and title checks) ...
|
||||
|
||||
await using var context = await ContextFactory.CreateDbContextAsync();
|
||||
BlogPostModel.ModifiedTime = DateTime.UtcNow;
|
||||
|
||||
// Blog post does not exist in database
|
||||
if (BlogPostModel.Id == 0)
|
||||
bool isCreatingNewPost = BlogPostModel.Id == 0;
|
||||
FilePathListing? newPhoto = null; // Will hold the new photo entity, if one is uploaded
|
||||
FilePathListing? oldPhotoToDelete = null; // Will hold the old photo entity for deletion
|
||||
|
||||
// --- 1. Handle New Photo Upload ---
|
||||
if (_mainPhotoFile is not null)
|
||||
{
|
||||
// A new file was uploaded.
|
||||
try
|
||||
{
|
||||
var diskFileName = $"{Guid.NewGuid()}{Path.GetExtension(_mainPhotoFile.Name)}";
|
||||
var destinationPath = Path.Combine(FileOptions.Value.UploadFolderPath, diskFileName);
|
||||
|
||||
await using var browserUploadStream = _mainPhotoFile.OpenReadStream(maxAllowedSize: FileOptions.Value.MaxUploadSizeBytes);
|
||||
await using var outFileStream = new FileStream(destinationPath, FileMode.Create);
|
||||
await browserUploadStream.CopyToAsync(outFileStream);
|
||||
|
||||
// Create the new entity
|
||||
newPhoto = new FilePathListing() { Path = destinationPath, OriginalName = Path.GetFileName(_mainPhotoFile.Name) };
|
||||
|
||||
// Add it to the context so it's tracked
|
||||
context.ArtifactFilePaths.Add(newPhoto);
|
||||
|
||||
// We update the model's reference just in case
|
||||
BlogPostModel.MainPhoto = newPhoto;
|
||||
|
||||
Snackbar.Add($"Uploaded {_mainPhotoFile.Name}", Severity.Success);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Snackbar.Add($"Error uploading file {_mainPhotoFile.Name}: {ex.Message}", Severity.Error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (isCreatingNewPost)
|
||||
{
|
||||
// Case: Creating a new post, but no file was provided. This is an error.
|
||||
Snackbar.Add("A main photo is required", Severity.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
// --- 2. Database Save Logic ---
|
||||
BlogPostModel.ModifiedTime = DateTime.UtcNow;
|
||||
BlogPostModel.ArtifactGroupings = await _artifactGroupingTable.SelectedItems();
|
||||
|
||||
foreach (ArtifactGrouping grouping in BlogPostModel.ArtifactGroupings)
|
||||
{
|
||||
// This tells EF "this object already exists in the database."
|
||||
// It will attach it in an "Unchanged" state without
|
||||
// causing conflicts with its related entities.
|
||||
context.Entry(grouping).State = EntityState.Unchanged;
|
||||
}
|
||||
|
||||
if (isCreatingNewPost)
|
||||
{
|
||||
BlogPostModel.CreationTime = DateTime.UtcNow;
|
||||
|
||||
// Loop through the tags and de-duplicate any of them
|
||||
await DeDuplicatePostTags(BlogPostModel, context);
|
||||
|
||||
BuildBlogSearchIndex(BlogPostModel);
|
||||
|
||||
// Assign the new (and tracked) photo to the new post
|
||||
BlogPostModel.MainPhoto = newPhoto!;
|
||||
context.BlogPosts.Add(BlogPostModel);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Blog post exists in database
|
||||
// --- 3. Update Existing Post ---
|
||||
BlogPost? existing = await context.BlogPosts
|
||||
.Include(p => p.Tags)
|
||||
.Include(p => p.MainPhoto) // Load the existing photo
|
||||
.Include(p=>p.ArtifactGroupings)
|
||||
.FirstOrDefaultAsync(p => p.Id == BlogPostModel.Id);
|
||||
|
||||
// Find the existing post so we can update it
|
||||
|
||||
BlogPost? existing = await context.BlogPosts.Include(p=>p.Tags).FirstOrDefaultAsync(p => p.Id == BlogPostModel.Id);
|
||||
if (existing is null)
|
||||
{
|
||||
Snackbar.Add($"Unable to find a post with id {BlogPostModel.Id} in the database, cannot update post!", Severity.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
// De-duplicate tags
|
||||
await DeDuplicatePostTags(BlogPostModel, context);
|
||||
|
||||
// Copy over the values we want
|
||||
existing.Title = BlogPostModel.Title;
|
||||
existing.Content = BlogPostModel.Content;
|
||||
existing.ModifiedTime = BlogPostModel.ModifiedTime;
|
||||
existing.ArtifactGroupings = BlogPostModel.ArtifactGroupings;
|
||||
|
||||
// --- 4. Handle Photo Swap (THIS IS THE FIX) ---
|
||||
if (newPhoto is not null)
|
||||
{
|
||||
// A new photo was uploaded.
|
||||
// Save the *tracked* old photo for deletion later.
|
||||
if (existing.MainPhoto is not null)
|
||||
{
|
||||
oldPhotoToDelete = existing.MainPhoto;
|
||||
}
|
||||
|
||||
// Assign the *new, tracked* photo.
|
||||
existing.MainPhoto = newPhoto;
|
||||
}
|
||||
// If newPhoto is null, we do nothing. existing.MainPhoto remains unchanged.
|
||||
// This avoids the tracking conflict.
|
||||
|
||||
existing.Tags.Clear();
|
||||
foreach (var tag in BlogPostModel.Tags)
|
||||
@@ -173,14 +301,42 @@
|
||||
BuildBlogSearchIndex(existing);
|
||||
}
|
||||
|
||||
// --- 5. Save Primary Changes ---
|
||||
await context.SaveChangesAsync();
|
||||
|
||||
// --- 6. Old File Cleanup ---
|
||||
if (oldPhotoToDelete is not null)
|
||||
{
|
||||
// Now that the DB save is successful, delete the old file
|
||||
try
|
||||
{
|
||||
if (File.Exists(oldPhotoToDelete.Path))
|
||||
{
|
||||
File.Delete(oldPhotoToDelete.Path);
|
||||
}
|
||||
|
||||
// And remove its record (which is tracked) from the database
|
||||
context.ArtifactFilePaths.Remove(oldPhotoToDelete);
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Snackbar.Add($"Error deleting old photo: {ex.Message}", Severity.Error);
|
||||
}
|
||||
}
|
||||
|
||||
Snackbar.Add("Changes saved!", Severity.Success);
|
||||
|
||||
// Reset the model
|
||||
// --- 7. Reset Page ---
|
||||
BlogPostModel = new();
|
||||
_mainPhotoFile = null;
|
||||
|
||||
// We can't navigate yet, we need to clear the groupings
|
||||
await _artifactGroupingTable.SetSelectedItemsAsync(new List<ArtifactGrouping>());
|
||||
|
||||
StateHasChanged();
|
||||
|
||||
NavigationManager.NavigateTo($"/admin/blogstable");
|
||||
}
|
||||
|
||||
public void HandleTagsEnter(KeyboardEventArgs args)
|
||||
@@ -192,7 +348,8 @@
|
||||
|
||||
BlogPostModel.Tags.Add(newTag);
|
||||
|
||||
StateHasChanged();
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
27
OpenArchival.Blazor.Blog/BlogPostRowElement.cs
Normal file
27
OpenArchival.Blazor.Blog/BlogPostRowElement.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OpenArchival.Blazor;
|
||||
|
||||
public class BlogPostRowElement
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Title { get; set; } = "";
|
||||
|
||||
public DateTime CreationTime { get; set; }
|
||||
public DateTime ModifiedTime { get; set; }
|
||||
|
||||
public override bool Equals(object? obj)
|
||||
{
|
||||
return obj is BlogPostRowElement other && this.Id == other.Id;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return Id.GetHashCode();
|
||||
}
|
||||
}
|
||||
139
OpenArchival.Blazor.Blog/BlogPostSearch.cs
Normal file
139
OpenArchival.Blazor.Blog/BlogPostSearch.cs
Normal file
@@ -0,0 +1,139 @@
|
||||
/*
|
||||
“Commons Clause” License Condition v1.0
|
||||
https://commonsclause.com/
|
||||
|
||||
The Software is provided to you by the Licensor under the License, as defined below, subject to the following condition.
|
||||
|
||||
Without limiting other conditions in the License, the grant of rights under the License will not include, and the License does not grant to you, the right to Sell the Software.
|
||||
|
||||
For purposes of the foregoing, “Sell” means practicing any or all of the rights granted to you under the License to provide to third parties, for a fee or other consideration (including without limitation fees for hosting or consulting/ support services related to the Software), a product or service whose value derives, entirely or substantially, from the functionality of the Software. Any license notice or attribution required by the License must also include this Commons Clause License Condition notice.
|
||||
|
||||
Software: Open Archival
|
||||
|
||||
License: GNU GPL: https://www.gnu.org/licenses/gpl-3.0.en.html
|
||||
|
||||
Licensor: Vincent Allen
|
||||
*/
|
||||
|
||||
namespace OpenArchival.Blazor;
|
||||
|
||||
using global::OpenArchival.DataAccess;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using MudBlazor;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
public enum BlogSearchFilterType
|
||||
{
|
||||
All,
|
||||
Title,
|
||||
Content,
|
||||
Tags,
|
||||
}
|
||||
|
||||
public class BlogPostSearch
|
||||
{
|
||||
public int TotalResults { get; set; }
|
||||
|
||||
public int TotalPages { get; set; }
|
||||
|
||||
public int PageSize { get; set; } = 20;
|
||||
|
||||
public int CurrentPage { get; set; } = 1;
|
||||
|
||||
public List<BlogPost> SearchResults { get; set; } = [];
|
||||
|
||||
private string _searchTerms { get; set; }
|
||||
|
||||
private IDbContextFactory<ApplicationDbContext> _contextFactory { get; set; }
|
||||
|
||||
private Expression<Func<BlogPost, bool>> _currentFilterPredicate;
|
||||
|
||||
private BlogSearchFilterType _selectedFilter = BlogSearchFilterType.All;
|
||||
|
||||
public BlogPostSearch(IDbContextFactory<ApplicationDbContext> contextFactory)
|
||||
{
|
||||
_contextFactory = contextFactory;
|
||||
}
|
||||
|
||||
public async Task Search(string Terms, BlogSearchFilterType filter, int page = 1)
|
||||
{
|
||||
_searchTerms = Terms;
|
||||
_selectedFilter = filter;
|
||||
|
||||
if (string.IsNullOrEmpty(_searchTerms))
|
||||
{
|
||||
await using var context = await _contextFactory.CreateDbContextAsync();
|
||||
TotalResults = await context.BlogPosts.CountAsync();
|
||||
;
|
||||
TotalPages = (int)Math.Ceiling(TotalResults / (double)PageSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Determine which filter expression to use based on the radio button selection
|
||||
switch (_selectedFilter)
|
||||
{
|
||||
case BlogSearchFilterType.Tags:
|
||||
_currentFilterPredicate = x => x.TagsSearchVector.Matches(_searchTerms);
|
||||
break;
|
||||
|
||||
case BlogSearchFilterType.Title:
|
||||
_currentFilterPredicate = x => x.TitleSearchVector.Matches(_searchTerms);
|
||||
break;
|
||||
|
||||
case BlogSearchFilterType.Content:
|
||||
_currentFilterPredicate = x => x.ContentSearchVector.Matches(_searchTerms);
|
||||
break;
|
||||
|
||||
case BlogSearchFilterType.All:
|
||||
default:
|
||||
_currentFilterPredicate = x => x.AllSearchVector.Matches(_searchTerms);
|
||||
break;
|
||||
}
|
||||
|
||||
// Get the total count using the chosen filter
|
||||
await using var context = await _contextFactory.CreateDbContextAsync();
|
||||
TotalResults = await context.BlogPosts.Where(_currentFilterPredicate).CountAsync();
|
||||
TotalPages = (int)Math.Ceiling(TotalResults / (double)PageSize);
|
||||
}
|
||||
// Load the first page with the chosen filter
|
||||
await LoadPageAsync(page);
|
||||
}
|
||||
|
||||
public async Task LoadPageAsync(int page)
|
||||
{
|
||||
CurrentPage = page;
|
||||
|
||||
await using var context = await _contextFactory.CreateDbContextAsync();
|
||||
if (string.IsNullOrEmpty(_searchTerms))
|
||||
{
|
||||
SearchResults = await context.BlogPosts
|
||||
.OrderByDescending(post => post.CreationTime)
|
||||
.Include(p => p.ArtifactGroupings)
|
||||
.Include(p => p.MainPhoto)
|
||||
.Skip((CurrentPage - 1) * PageSize)
|
||||
.Take(PageSize)
|
||||
.ToListAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
SearchResults = await context.BlogPosts.Where(_currentFilterPredicate)
|
||||
.Include(p => p.ArtifactGroupings)
|
||||
.Include(p => p.MainPhoto)
|
||||
.OrderBy(p => p.Id)
|
||||
.Skip((CurrentPage - 1) * PageSize)
|
||||
.Take(PageSize)
|
||||
.ToListAsync();
|
||||
}
|
||||
}
|
||||
|
||||
public void ClearResults()
|
||||
{
|
||||
SearchResults.Clear();
|
||||
TotalResults = 0;
|
||||
TotalPages = 0;
|
||||
}
|
||||
}
|
||||
52
OpenArchival.Blazor.Blog/BlogPostSearchBar.razor
Normal file
52
OpenArchival.Blazor.Blog/BlogPostSearchBar.razor
Normal file
@@ -0,0 +1,52 @@
|
||||
@namespace OpenArchival.Blazor
|
||||
@using MudBlazor
|
||||
|
||||
<Microsoft.AspNetCore.Components.Forms.EditForm Model="this" OnSubmit="OnSubmit">
|
||||
<MudTextField FullWidth="true"
|
||||
AutoFocus="string.IsNullOrEmpty(SearchTerms)"
|
||||
Placeholder="Search"
|
||||
T="string"
|
||||
Variant="Variant.Outlined"
|
||||
Adornment="Adornment.Start"
|
||||
AdornmentIcon="@Icons.Material.Filled.Search"
|
||||
Class="mt-5"
|
||||
@bind-Value="SearchTerms"
|
||||
/>
|
||||
|
||||
<MudExpansionPanel Text="Filter...">
|
||||
<MudText Typo="Typo.caption">Choose which data the serach bar will search on:</MudText>
|
||||
<MudDivider></MudDivider>
|
||||
|
||||
<MudRadioGroup T="@BlogSearchFilterType" @bind-SelectedOption="SelectedFilter">
|
||||
<MudRadio Option="BlogSearchFilterType.All" T="BlogSearchFilterType">All</MudRadio>
|
||||
<MudRadio Option="BlogSearchFilterType.Title" T="BlogSearchFilterType">Title</MudRadio>
|
||||
<MudRadio Option="BlogSearchFilterType.Content" T="BlogSearchFilterType">Content</MudRadio>
|
||||
<MudRadio Option="BlogSearchFilterType.Tags" T="BlogSearchFilterType">Tags</MudRadio>
|
||||
</MudRadioGroup>
|
||||
</MudExpansionPanel>
|
||||
</Microsoft.AspNetCore.Components.Forms.EditForm>
|
||||
@code {
|
||||
[Parameter]
|
||||
public string SearchTerms { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<string> SearchTermsChanged { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public BlogSearchFilterType SelectedFilter { get; set; } = BlogSearchFilterType.All;
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<BlogSearchFilterType> SelectedFilterChanged { get; set; }
|
||||
|
||||
private async Task HandleSearchKeyDown(Microsoft.AspNetCore.Components.Web.KeyboardEventArgs args)
|
||||
{
|
||||
if (args.Key == "Enter")
|
||||
{
|
||||
await SearchTermsChanged.InvokeAsync(SearchTerms);
|
||||
}
|
||||
}
|
||||
private async Task OnSubmit(Microsoft.AspNetCore.Components.Forms.EditContext args)
|
||||
{
|
||||
await SearchTermsChanged.InvokeAsync(SearchTerms);
|
||||
}
|
||||
}
|
||||
219
OpenArchival.Blazor.Blog/BlogPostTable.razor
Normal file
219
OpenArchival.Blazor.Blog/BlogPostTable.razor
Normal file
@@ -0,0 +1,219 @@
|
||||
@using OpenArchival.Blazor.AdminPages.Shared;
|
||||
@using Microsoft.AspNetCore.Components.Web
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
@using MudBlazor
|
||||
@using MudExtensions
|
||||
@using OpenArchival.Blazor.ArchiveSearch
|
||||
@using OpenArchival.DataAccess
|
||||
|
||||
<BlogPostSearchBar @ref=_searchBar SearchTermsChanged="OnSearchTermsChanged"></BlogPostSearchBar>
|
||||
<MudDataGrid T="BlogPostRowElement"
|
||||
MultiSelection=true
|
||||
Filterable=false
|
||||
SelectOnRowClick=true
|
||||
ServerData="new Func<GridState<BlogPostRowElement>, Task<GridData<BlogPostRowElement>>>(ServerReload)"
|
||||
@ref=@DataGrid
|
||||
@bind-SelectedItems="_selectedItems"
|
||||
Comparer="_comparer">
|
||||
|
||||
<ToolBarContent>
|
||||
|
||||
<MudSpacer />
|
||||
|
||||
<MudButton Variant="Variant.Filled"
|
||||
StartIcon="@Icons.Material.Filled.Delete"
|
||||
Color="Color.Error"
|
||||
OnClick="OnDeleteClicked">Delete</MudButton>
|
||||
</ToolBarContent>
|
||||
|
||||
<Columns>
|
||||
<SelectColumn T="BlogPostRowElement"/>
|
||||
|
||||
<PropertyColumn
|
||||
Title="Id"
|
||||
Property="x=>x.Id"
|
||||
Filterable="false"/>
|
||||
|
||||
<PropertyColumn
|
||||
Title="Title"
|
||||
Property="x=>x.Title"
|
||||
Filterable="false"/>
|
||||
|
||||
<PropertyColumn
|
||||
Title="Created Time"
|
||||
Property="x=>x.CreationTime"
|
||||
Filterable="false"/>
|
||||
|
||||
<PropertyColumn
|
||||
Title="Modified Time"
|
||||
Property="x=>x.ModifiedTime"
|
||||
Filterable="false"/>
|
||||
|
||||
<TemplateColumn Title="Edit">
|
||||
<CellTemplate>
|
||||
<MudIconButton
|
||||
Color="Color.Primary"
|
||||
Icon="@Icons.Material.Filled.Edit"
|
||||
Variant="Variant.Filled"
|
||||
Href="@($"/admin/blogedit/{context.Item.Id}")"
|
||||
Target="_blank">Edit</MudIconButton>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
|
||||
</Columns>
|
||||
|
||||
<PagerContent>
|
||||
<MudDataGridPager T="BlogPostRowElement"/>
|
||||
</PagerContent>
|
||||
</MudDataGrid>
|
||||
|
||||
|
||||
@inject IArtifactGroupingProvider GroupingProvider;
|
||||
@inject IDialogService DialogService;
|
||||
@inject IArtifactGroupingProvider GroupingProvider;
|
||||
@inject BlogPostSearch SearchProvider;
|
||||
@inject IDbContextFactory<ApplicationDbContext> ContextFactory;
|
||||
@inject ISnackbar Snackbar;
|
||||
@inject NavigationManager NavigationManager;
|
||||
@code
|
||||
{
|
||||
public class BlogPostRowElementComparer : IEqualityComparer<BlogPostRowElement>
|
||||
{
|
||||
public bool Equals(BlogPostRowElement? x, BlogPostRowElement? y)
|
||||
{
|
||||
if (ReferenceEquals(x, y)) return true;
|
||||
if (x is null || y is null) return false;
|
||||
return x.Id == y.Id;
|
||||
}
|
||||
|
||||
public int GetHashCode(BlogPostRowElement obj)
|
||||
{
|
||||
return obj.Id.GetHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
private BlogPostRowElementComparer _comparer = new();
|
||||
|
||||
public MudDataGrid<BlogPostRowElement> DataGrid { get; set; } = default!;
|
||||
|
||||
private HashSet<BlogPostRowElement> _selectedItems = new();
|
||||
|
||||
private string _searchString { get; set; } = "";
|
||||
|
||||
private BlogPostSearchBar _searchBar { get; set; } = default!;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await base.OnInitializedAsync();
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private async Task OnDeleteClicked(MouseEventArgs args)
|
||||
{
|
||||
HashSet<BlogPostRowElement> selected = DataGrid.SelectedItems;
|
||||
|
||||
bool? confirmed = await DialogService.ShowMessageBox
|
||||
(
|
||||
new MessageBoxOptions(){
|
||||
Message=$"Are you sure you want to delete {selected.Count} posts?",
|
||||
Title="Delete Posts?",
|
||||
CancelText="Cancel",
|
||||
YesText="Delete"
|
||||
});
|
||||
|
||||
// It was REALLY whining about null here ;-;
|
||||
if (confirmed is not null && (confirmed ?? throw new ArgumentNullException("confirmed was null")))
|
||||
{
|
||||
await using var context = await ContextFactory.CreateDbContextAsync();
|
||||
foreach (BlogPostRowElement post in selected)
|
||||
{
|
||||
await context.BlogPosts.Where(p => p.Id == post.Id).ExecuteDeleteAsync();
|
||||
}
|
||||
}
|
||||
|
||||
await DataGrid.ReloadServerData();
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private async Task<GridData<BlogPostRowElement>> ServerReload(GridState<BlogPostRowElement> state)
|
||||
{
|
||||
await using var context = await ContextFactory.CreateDbContextAsync();
|
||||
int totalItems = await context.BlogPosts.CountAsync();
|
||||
|
||||
SearchProvider.PageSize = state.PageSize;
|
||||
IEnumerable<BlogPost> blogPosts;
|
||||
|
||||
if (string.IsNullOrEmpty(_searchString))
|
||||
{
|
||||
blogPosts = await context.BlogPosts
|
||||
.Skip(state.Page * state.PageSize)
|
||||
.Take(state.PageSize)
|
||||
.ToListAsync();
|
||||
|
||||
} else
|
||||
{
|
||||
await SearchProvider.Search(_searchString, _searchBar.SelectedFilter, state.Page + 1);
|
||||
blogPosts = SearchProvider.SearchResults;
|
||||
}
|
||||
|
||||
var pagedItems = blogPosts.Select(post => new BlogPostRowElement()
|
||||
{
|
||||
Id = post.Id,
|
||||
Title = post.Title,
|
||||
CreationTime = post.CreationTime,
|
||||
ModifiedTime = post.ModifiedTime
|
||||
});
|
||||
|
||||
return new GridData<BlogPostRowElement>()
|
||||
{
|
||||
TotalItems = totalItems,
|
||||
Items = pagedItems
|
||||
};
|
||||
}
|
||||
|
||||
private async Task OnSearchTermsChanged(string args)
|
||||
{
|
||||
_searchString = args;
|
||||
await DataGrid.ReloadServerData();
|
||||
}
|
||||
|
||||
public async Task<List<BlogPost>> SelectedItems()
|
||||
{
|
||||
List<BlogPost> selectedGroupings = [];
|
||||
foreach (BlogPostRowElement row in DataGrid.SelectedItems)
|
||||
{
|
||||
await using var context = await ContextFactory.CreateDbContextAsync();
|
||||
var post = await context.BlogPosts.Where(p => p.Id == row.Id).FirstOrDefaultAsync();
|
||||
if (post is null)
|
||||
{
|
||||
Snackbar.Add($"Post with id {row.Id} no longer exists in the database.", Severity.Error);
|
||||
continue;
|
||||
}
|
||||
selectedGroupings.Add(post);
|
||||
}
|
||||
|
||||
return selectedGroupings;
|
||||
}
|
||||
|
||||
public Task SetSelectedItemsAsync(IEnumerable<BlogPost> postsToSelect)
|
||||
{
|
||||
var rowElementsToSelect = postsToSelect.Select(post => new BlogPostRowElement
|
||||
{
|
||||
Id = post.Id,
|
||||
Title = post.Title,
|
||||
CreationTime = post.CreationTime,
|
||||
ModifiedTime = post.ModifiedTime
|
||||
});
|
||||
|
||||
_selectedItems = new HashSet<BlogPostRowElement>(rowElementsToSelect, _comparer);
|
||||
|
||||
StateHasChanged();
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public void ClearSelected()
|
||||
{
|
||||
_selectedItems = new HashSet<BlogPostRowElement>();
|
||||
}
|
||||
|
||||
}
|
||||
128
OpenArchival.Blazor.Blog/BlogPostViewer.razor
Normal file
128
OpenArchival.Blazor.Blog/BlogPostViewer.razor
Normal file
@@ -0,0 +1,128 @@
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
@using MudBlazor
|
||||
@using OpenArchival.DataAccess
|
||||
|
||||
@page "/articles/{ArticleIdString}"
|
||||
|
||||
@if (_article is not null)
|
||||
{
|
||||
@if (_article.ArtifactGroupings.Any()) {
|
||||
{
|
||||
<MudPaper Class="pa-4 ma-2 rounded overflow-y-auto" Style="max-height: 400px;" Elevation="3">
|
||||
<MudText Typo="Typo.h6">Related Artifacts</MudText>
|
||||
<MudDivider/>
|
||||
|
||||
<MudGrid Justify="Justify.Center" Class="mt-4">
|
||||
@foreach(ArtifactGrouping grouping in _article.ArtifactGroupings)
|
||||
{
|
||||
<MudItem xs="12" sm="12" md="8" lg="4">
|
||||
<MudLink Href="@($"/archive/{grouping.Id}")" Target="_blank" Style="text-decoration: none; color: inherit;">
|
||||
|
||||
<MudCard Style="@($"height: {Math.Floor(400 * 0.7)}px; display: flex; flex-direction: column;")" >
|
||||
@if (grouping.ChildArtifactEntries[0].Files.Any())
|
||||
{
|
||||
<MudCardMedia Image="@($"/api/files/{grouping.ChildArtifactEntries[0].Files[0].Id}")"/>
|
||||
}
|
||||
|
||||
<MudCardContent Style=@($"flex-grow: 1; overflow-y: clip; height:{Math.Floor(400 * 0.3)}px;")>
|
||||
<MudText Typo="Typo.h5">@grouping.Title</MudText>
|
||||
<MudText Typo="Typo.body2">@grouping.Description</MudText>
|
||||
</MudCardContent>
|
||||
</MudCard>
|
||||
|
||||
</MudLink>
|
||||
</MudItem>
|
||||
}
|
||||
</MudGrid>
|
||||
</MudPaper>
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
<MudPaper Class="pa-4 ma-2 rounded" Elevation="3">
|
||||
<MudGrid Justify="Justify.Center" Class="mb-2">
|
||||
<MudItem>
|
||||
<MudImage ObjectPosition=ObjectPosition.Center Class="rounded-1g" Src=@($"/api/files/{_article.MainPhoto.Id}") Height="400"></MudImage>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
<MudText Typo="Typo.h6">@_article.Title</MudText>
|
||||
<MudDivider/>
|
||||
<MudText Typo="Typo.caption">Posted: @_article.CreationTime.Hour:@_article.CreationTime.Minute @_article.CreationTime.Month/@_article.CreationTime.Day/@_article.CreationTime.Year</MudText>
|
||||
<MudText Typo="Typo.caption">Updated: @_article.ModifiedTime.Hour:@_article.ModifiedTime.Minute @_article.ModifiedTime.Month/@_article.ModifiedTime.Day/@_article.ModifiedTime.Year</MudText>
|
||||
<MudDivider/>
|
||||
<MudText Typo="Typo.caption" style="font-weight: 100;">Tags:</MudText>
|
||||
<OpenArchival.Blazor.CustomComponents.ChipContainer T="BlogPostTag" @bind-Items=_article.Tags DeleteEnabled=false></OpenArchival.Blazor.CustomComponents.ChipContainer>
|
||||
</MudPaper>
|
||||
|
||||
<MudPaper Class="pa-4 ma-2 rounded" Elevation="3">
|
||||
@((MarkupString)_article.Content)
|
||||
</MudPaper>
|
||||
}
|
||||
@inject IArtifactGroupingProvider GroupingProvider;
|
||||
@inject NavigationManager NavigationManager;
|
||||
@inject IDbContextFactory<ApplicationDbContext> ContextFactory;
|
||||
@code {
|
||||
[Parameter]
|
||||
public string ArticleIdString { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The converted grouping id from the URL
|
||||
/// </summary>
|
||||
private int _articleId { get; set; }
|
||||
|
||||
private BlogPost _article { get; set; } = default!;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
if (!int.TryParse(ArticleIdString, out int articleId))
|
||||
{
|
||||
NavigationManager.NavigateTo("/article-not-found");
|
||||
return;
|
||||
}
|
||||
|
||||
_articleId = articleId;
|
||||
|
||||
await using var context = await ContextFactory.CreateDbContextAsync();
|
||||
|
||||
// --- FIX: Added .Include(a => a.Views) AND .FirstOrDefaultAsync(a => a.Id == _articleId)
|
||||
var article = await context.BlogPosts
|
||||
.Include(a => a.Views)
|
||||
.Include(a => a.ArtifactGroupings)
|
||||
.ThenInclude(g => g.ChildArtifactEntries)
|
||||
.ThenInclude(e => e.Files)
|
||||
.Include(article=>article.Views)
|
||||
.Include(article=>article.Tags)
|
||||
.Include(article=>article.MainPhoto)
|
||||
.FirstOrDefaultAsync(a => a.Id == _articleId); // <-- FIX 2: Filter by the correct ID
|
||||
|
||||
if (article is null)
|
||||
{
|
||||
NavigationManager.NavigateTo("/article-not-found");
|
||||
return;
|
||||
}
|
||||
|
||||
_article = article;
|
||||
|
||||
// --- This logic will now work correctly ---
|
||||
if (_article.Views is null)
|
||||
{
|
||||
// This article has never been viewed, create a new view count
|
||||
var viewCount = new BlogPostViewCount() { Post = _article, Views = 1 };
|
||||
context.Add(viewCount); // Add the new count to the context
|
||||
_article.Views = viewCount; // Associate it with the article
|
||||
}
|
||||
else
|
||||
{
|
||||
// It has been viewed, just increment the count
|
||||
_article.Views.Views++;
|
||||
}
|
||||
|
||||
await context.SaveChangesAsync(); // This will now correctly INSERT or UPDATE
|
||||
|
||||
// StateHasChanged() is not strictly necessary here, but doesn't hurt.
|
||||
StateHasChanged();
|
||||
|
||||
await base.OnParametersSetAsync();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -17,7 +17,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\OpenArchival.Blazor.AdminPages\OpenArchival.Blazor.AdminPages.csproj" />
|
||||
<ProjectReference Include="..\OpenArchival.Blazor.AdminPages.Shared\OpenArchival.Blazor.AdminPages.Shared.csproj" />
|
||||
<ProjectReference Include="..\OpenArchival.Blazor.Config\OpenArchival.Blazor.Config.csproj" />
|
||||
<ProjectReference Include="..\OpenArchival.Blazor.CustomComponents\OpenArchival.Blazor.CustomComponents.csproj" />
|
||||
<ProjectReference Include="..\OpenArchival.DataAccess\OpenArchival.DataAccess.csproj" />
|
||||
|
||||
166
OpenArchival.Blazor.Blog/SearchBlog.razor
Normal file
166
OpenArchival.Blazor.Blog/SearchBlog.razor
Normal file
@@ -0,0 +1,166 @@
|
||||
@page "/articles/search"
|
||||
@page "/articles/search/{SearchTerms}"
|
||||
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
@using Microsoft.Extensions.Logging
|
||||
@using MudBlazor
|
||||
@using OpenArchival.DataAccess
|
||||
@using System.Linq
|
||||
@using System.Text.RegularExpressions
|
||||
@using System.Net
|
||||
|
||||
<BlogPostSearchBar @ref="_searchBar"
|
||||
@bind-SelectedFilter="_selectedFilter"
|
||||
SearchTermsChanged="PerformSearchAsyncCallback" />
|
||||
@{
|
||||
if (_showMostRecent && PostSearch.TotalResults > 0)
|
||||
{
|
||||
<MudGrid Justify="Justify.FlexStart" Class="mt-1 ml-1 mb-2">
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary">Most Recent Posts:</MudText>
|
||||
</MudGrid>
|
||||
}
|
||||
else if (PostSearch.TotalResults > 0)
|
||||
{
|
||||
<MudGrid Justify="Justify.FlexStart" Class="mt-1 ml-1 mb-2">
|
||||
<MudText Typo="Typo.subtitle2" Class="my-2">@PostSearch.TotalResults results found</MudText>
|
||||
<MudButton Class="ml-1" StartIcon="@Icons.Material.Filled.Clear" OnClick="OnClearResults" Variant="Variant.Filled" Color="Color.Primary" Size="Size.Small">Clear</MudButton>
|
||||
</MudGrid>
|
||||
}
|
||||
}
|
||||
|
||||
@if (PostSearch.SearchResults.Count > 0)
|
||||
{
|
||||
<MudGrid>
|
||||
@foreach (var post in PostSearch.SearchResults)
|
||||
{
|
||||
<MudItem xs="12" sm="6" md="4" lg="4">
|
||||
<MudLink Href="@($"/articles/{post.Id}")" Target="_blank" Style="text-decoration: none; color: inherit;">
|
||||
<MudCard Style="@($"height: {Math.Floor(400 * 0.7)}px; display: flex; flex-direction: column;")">
|
||||
|
||||
@if (post.MainPhoto != null)
|
||||
{
|
||||
<MudCardMedia Image="@($"/api/files/{post.MainPhoto.Id}")" Style="height: 100%;" />
|
||||
}
|
||||
else
|
||||
{
|
||||
<MudCardMedia Image="/images/placeholder.png" Style="height: 100%;" /> }
|
||||
|
||||
<MudCardContent Style=@($"flex-grow: 1; overflow-y: clip; height:{Math.Floor(400 * 0.3)}px;")>
|
||||
<MudText Typo="Typo.h5">@post.Title</MudText>
|
||||
<MudText Typo="Typo.body2">@CreateContentSnippet(post.Content)</MudText>
|
||||
</MudCardContent>
|
||||
</MudCard>
|
||||
</MudLink>
|
||||
</MudItem>
|
||||
}
|
||||
</MudGrid>
|
||||
|
||||
<MudPaper Class="d-flex justify-center py-2 mt-4" Elevation="0">
|
||||
<MudPagination Count="PostSearch.TotalPages"
|
||||
Selected="PostSearch.CurrentPage"
|
||||
SelectedChanged="OnPageChangedAsync" />
|
||||
</MudPaper>
|
||||
}
|
||||
|
||||
@inject IDbContextFactory<ApplicationDbContext> ContextFactory;
|
||||
@inject ILogger<SearchBlog> Logger;
|
||||
@inject NavigationManager NavigationManager;
|
||||
@inject BlogPostSearch PostSearch;
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public string SearchTerms { get; set; } = "";
|
||||
|
||||
private BlogSearchFilterType _selectedFilter = BlogSearchFilterType.All;
|
||||
private BlogPostSearchBar _searchBar = default!;
|
||||
|
||||
// List for the "no results" slider display
|
||||
private List<SearchPageSliderEntry> _sliderEntries { get; set; } = [];
|
||||
|
||||
private bool _showMostRecent = true;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
// This runs when the page loads, checking for search terms in the URL
|
||||
if (string.IsNullOrWhiteSpace(SearchTerms))
|
||||
{
|
||||
await PostSearch.Search("", _selectedFilter, 1);
|
||||
_showMostRecent = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
await PostSearch.Search(SearchTerms, _selectedFilter, 1);
|
||||
_showMostRecent = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This is called by the SearchBar component's 'SearchTermsChanged' event.
|
||||
/// </summary>
|
||||
private async Task PerformSearchAsyncCallback(string searchTerms)
|
||||
{
|
||||
if (string.IsNullOrEmpty(searchTerms))
|
||||
{
|
||||
_showMostRecent = true;
|
||||
} else
|
||||
{
|
||||
_showMostRecent = false;
|
||||
}
|
||||
|
||||
SearchTerms = searchTerms; // Update the page's parameter
|
||||
|
||||
// Update the URL to reflect the new search
|
||||
NavigationManager.NavigateTo($"/articles/search/{Uri.EscapeDataString(searchTerms)}", replace: true);
|
||||
|
||||
// Perform the search (always start on page 1)
|
||||
await PostSearch.Search(searchTerms, _selectedFilter, 1);
|
||||
|
||||
StateHasChanged(); // Re-render the page with results
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This is called by the MudPagination's 'SelectedChanged' event.
|
||||
/// </summary>
|
||||
private async Task OnPageChangedAsync(int page)
|
||||
{
|
||||
// Load the specific page using the service
|
||||
await PostSearch.LoadPageAsync(page);
|
||||
StateHasChanged(); // Re-render with the new page's data
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears the search results and state.
|
||||
/// </summary>
|
||||
private void OnClearResults()
|
||||
{
|
||||
PostSearch.ClearResults();
|
||||
SearchTerms = "";
|
||||
|
||||
// Navigate back to the base search page
|
||||
NavigationManager.NavigateTo("/articles/search", replace: true);
|
||||
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
public static string CreateContentSnippet(string html, int maxLength = 150)
|
||||
{
|
||||
if (string.IsNullOrEmpty(html))
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
// Strip HTML tags
|
||||
string plainText = Regex.Replace(html, @"<[^>]+>", string.Empty);
|
||||
|
||||
// Decode HTML entities
|
||||
plainText = WebUtility.HtmlDecode(plainText).Trim();
|
||||
|
||||
if (plainText.Length > maxLength)
|
||||
{
|
||||
return plainText.Substring(0, maxLength) + "...";
|
||||
}
|
||||
|
||||
return plainText;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
@page
|
||||
@model OpenArchival.Blazor.CustomComponents.MyFeature.Pages.Page1Model
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<title>Page1</title>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,13 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
|
||||
namespace OpenArchival.Blazor.CustomComponents.MyFeature.Pages
|
||||
{
|
||||
public class Page1Model : PageModel
|
||||
{
|
||||
public void OnGet()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\OpenArchival.Blazor.Config\OpenArchival.Blazor.Config.csproj" />
|
||||
<ProjectReference Include="..\OpenArchival.DataAccess\OpenArchival.DataAccess.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
@using OpenArchival.DataAccess
|
||||
@using Microsoft.AspNetCore.Components.Forms
|
||||
@using MudBlazor
|
||||
@using OpenArchival.Blazor.Config
|
||||
|
||||
<style>
|
||||
.file-upload-input {
|
||||
@@ -97,6 +98,7 @@
|
||||
@inject IFilePathListingProvider PathProvider;
|
||||
@inject ISnackbar Snackbar;
|
||||
@inject ILogger<UploadDropBox> _logger;
|
||||
@inject IDialogService DialogService;
|
||||
|
||||
@code {
|
||||
private const string DefaultDragClass = "relative rounded-lg border-2 border-dashed pa-4 mt-4 mud-width-full mud-height-full";
|
||||
@@ -130,50 +132,64 @@
|
||||
|
||||
private async Task ClearAsync()
|
||||
{
|
||||
foreach (var pair in _fileToDiskFileName)
|
||||
|
||||
bool? confirmed = await DialogService.ShowMessageBox
|
||||
(
|
||||
new MessageBoxOptions(){
|
||||
Message=$"Are you sure you want to clear files? You will loose all changes.",
|
||||
Title="Clear Files",
|
||||
CancelText="Cancel",
|
||||
YesText="Clear"
|
||||
});
|
||||
|
||||
if (confirmed is not null && (confirmed ?? throw new ArgumentNullException("confirmed was null")))
|
||||
{
|
||||
try
|
||||
foreach (var pair in _fileToDiskFileName)
|
||||
{
|
||||
FileInfo targetFile = new(pair.Value);
|
||||
if (targetFile.Exists)
|
||||
try
|
||||
{
|
||||
targetFile.Delete();
|
||||
FileInfo targetFile = new(pair.Value);
|
||||
if (targetFile.Exists)
|
||||
{
|
||||
targetFile.Delete();
|
||||
}
|
||||
await PathProvider.DeleteFilePathListingAsync(pair.Key.Name, pair.Value);
|
||||
}
|
||||
await PathProvider.DeleteFilePathListingAsync(pair.Key.Name, pair.Value);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Error deleting file {FileName}", pair.Key.Name);
|
||||
Snackbar.Add($"Error cleaning up file: {pair.Key.Name}", Severity.Warning);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var listing in ExistingFiles)
|
||||
{
|
||||
try
|
||||
{
|
||||
FileInfo targetFile = new(listing.Path);
|
||||
if (targetFile.Exists)
|
||||
catch (Exception ex)
|
||||
{
|
||||
targetFile.Delete();
|
||||
_logger.LogError(ex, "Error deleting file {FileName}", pair.Key.Name);
|
||||
Snackbar.Add($"Error cleaning up file: {pair.Key.Name}", Severity.Warning);
|
||||
}
|
||||
await PathProvider.DeleteFilePathListingAsync(listing.OriginalName, listing.Path);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, $"Error deleting file {listing.Path}");
|
||||
Snackbar.Add($"Error cleaning up file: {listing.OriginalName}", Severity.Warning);
|
||||
}
|
||||
|
||||
foreach (var listing in ExistingFiles)
|
||||
{
|
||||
try
|
||||
{
|
||||
FileInfo targetFile = new(listing.Path);
|
||||
if (targetFile.Exists)
|
||||
{
|
||||
targetFile.Delete();
|
||||
}
|
||||
await PathProvider.DeleteFilePathListingAsync(listing.OriginalName, listing.Path);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, $"Error deleting file {listing.Path}");
|
||||
Snackbar.Add($"Error cleaning up file: {listing.OriginalName}", Severity.Warning);
|
||||
}
|
||||
}
|
||||
|
||||
_fileToDiskFileName.Clear();
|
||||
Files.Clear();
|
||||
await (_fileUpload?.ClearAsync() ?? Task.CompletedTask);
|
||||
|
||||
ClearDragClass();
|
||||
UploadsComplete = true;
|
||||
await ClearClicked.InvokeAsync();
|
||||
|
||||
}
|
||||
|
||||
_fileToDiskFileName.Clear();
|
||||
Files.Clear();
|
||||
await (_fileUpload?.ClearAsync() ?? Task.CompletedTask);
|
||||
|
||||
ClearDragClass();
|
||||
UploadsComplete = true;
|
||||
await ClearClicked.InvokeAsync();
|
||||
}
|
||||
}
|
||||
|
||||
private Task OpenFilePickerAsync()
|
||||
=> _fileUpload?.OpenFilePickerAsync() ?? Task.CompletedTask;
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"dependencies": {
|
||||
"CodeBeam.MudExtensions": "6.3.0",
|
||||
"MudBlazor": "8.13.0",
|
||||
"OpenArchival.Blazor.Config": "1.0.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
@@ -616,6 +617,14 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenArchival.Blazor.Config/1.0.0": {
|
||||
"runtime": {
|
||||
"OpenArchival.Blazor.Config.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenArchival.DataAccess/1.0.0": {
|
||||
"dependencies": {
|
||||
"EntityFramework": "6.5.1",
|
||||
@@ -1033,6 +1042,11 @@
|
||||
"path": "system.windows.extensions/6.0.0",
|
||||
"hashPath": "system.windows.extensions.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"OpenArchival.Blazor.Config/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"OpenArchival.DataAccess/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -14,7 +14,7 @@ using System.Reflection;
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("OpenArchival.Blazor.CustomComponents")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+0e24ce207395fb1c32a87d10049c1d81dc4784fe")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+b34449808fa29388ff6ca79b560f657d74738fdd")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("OpenArchival.Blazor.CustomComponents")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("OpenArchival.Blazor.CustomComponents")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user