Extracted some pages to their own assembly and finished the artifact display page code
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
@page "/archiveadmin"
|
||||
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
@using MudBlazor
|
||||
@using OpenArchival.Blazor.AdminComponents;
|
||||
|
||||
@attribute [Authorize(Roles = "Admin")]
|
||||
|
||||
<MudTabs
|
||||
ApplyEffectsToContainer="true"
|
||||
PanelClass=""
|
||||
Centered=true>
|
||||
|
||||
<MudTabPanel Text="Categories">
|
||||
<ViewAddCategoriesComponent></ViewAddCategoriesComponent>
|
||||
</MudTabPanel>
|
||||
|
||||
<MudTabPanel Text="Add Grouping">
|
||||
<OpenArchival.Blazor.AdminComponents.ArchiveItems.AddArchiveGroupingComponent
|
||||
GroupingPublished="Helpers.OnGroupingPublished"
|
||||
ForwardLink="@null"
|
||||
ClearOnPublish=true/>
|
||||
</MudTabPanel>
|
||||
|
||||
<MudTabPanel Text="Manage Groupings">
|
||||
<OpenArchival.Blazor.AdminComponents.ArchiveItems.ArchiveGroupingsTable/>
|
||||
</MudTabPanel>
|
||||
</MudTabs>
|
||||
|
||||
@inject ArtifactEntrySharedHelpers Helpers;
|
||||
@inject IDialogService DialogService;
|
||||
|
||||
@code {
|
||||
/*
|
||||
public async Task ShowAddGroupingDialog(ArtifactGroupingRowElement validationModel)
|
||||
{
|
||||
var parameters = new DialogParameters { ["Model"] = validationModel};
|
||||
|
||||
var options = new DialogOptions { CloseOnEscapeKey = true, BackdropClick = false };
|
||||
|
||||
var dialog = await DialogService.ShowAsync<AddGroupingDialog>("Create a Group", parameters, options);
|
||||
var result = await dialog.Result;
|
||||
|
||||
if (result is not null && !result.Canceled)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
@@ -0,0 +1,354 @@
|
||||
@using Microsoft.AspNetCore.Components.Web
|
||||
@using MudBlazor
|
||||
@using OpenArchival.Blazor.AdminComponents.Categories
|
||||
@using OpenArchival.Blazor.CustomComponents;
|
||||
@using OpenArchival.DataAccess;
|
||||
@using System.ComponentModel.DataAnnotations
|
||||
|
||||
@inject IDialogService DialogService
|
||||
@inject NavigationManager NavigationManager;
|
||||
@inject IArchiveCategoryProvider CategoryProvider;
|
||||
@inject ArtifactEntrySharedHelpers Helpers;
|
||||
|
||||
<MudPaper Class="pa-4 ma-2 rounded" Elevation="3">
|
||||
<MudText Typo="Typo.h5" Color="Color.Primary">Add an Archive Item</MudText>
|
||||
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
|
||||
@foreach (var result in ValidationResults)
|
||||
{
|
||||
<MudAlert Severity="Severity.Error">@result.ErrorMessage</MudAlert>
|
||||
}
|
||||
|
||||
<MudGrid Justify="Justify.Center" Class="pt-4">
|
||||
<MudItem>
|
||||
<MudAutocomplete
|
||||
T="ArchiveCategory"
|
||||
ToStringFunc="@(val => val?.Name)"
|
||||
Label="Category"
|
||||
@bind-Value="Model.Category"
|
||||
@bind-Value:after=OnCategoryChanged
|
||||
SearchFunc="SearchCategory"
|
||||
CoerceValue=false
|
||||
CoerceText=false
|
||||
/>
|
||||
</MudItem>
|
||||
|
||||
<MudItem>
|
||||
<MudFab Color="Color.Primary" StartIcon="@Icons.Material.Filled.Add" OnClick="OnAddCategoryClicked"/>
|
||||
</MudItem>
|
||||
|
||||
</MudGrid>
|
||||
</MudPaper>
|
||||
|
||||
<div @ref="_formDiv" style="@_formDivStyle">
|
||||
|
||||
<MudPaper Class="pa-4 ma-2 rounded" Elevation="3">
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Archive Item Identifier</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<IdentifierTextBox @ref="_identifierTextBox" IdentifierFields="@Model.IdentifierFieldValues"></IdentifierTextBox>
|
||||
</MudPaper>
|
||||
|
||||
<MudPaper Class="pa-4 ma-2 rounded" Elevation="3">
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Grouping Title</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<MudTextField
|
||||
T="string"
|
||||
For="@(() => Model.Title)"
|
||||
Placeholder="Grouping Title"
|
||||
@bind-Value=Model.Title></MudTextField>
|
||||
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Grouping Description</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<MudTextField
|
||||
T="string"
|
||||
For="@(() => Model.Description)"
|
||||
Lines="5"
|
||||
Placeholder="Grouping Description"
|
||||
@bind-Value=Model.Description></MudTextField>
|
||||
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Grouping Type</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<MudAutocomplete
|
||||
For="@(() => Model.Type)"
|
||||
T="string"
|
||||
Label="Artifact Type"
|
||||
Class="pt-0 mt-0 pl-2 pr-2"
|
||||
@bind-Value=Model.Type
|
||||
SearchFunc="Helpers.SearchItemTypes"
|
||||
CoerceValue=true></MudAutocomplete>
|
||||
</MudPaper>
|
||||
|
||||
<MudPaper Class="pa-4 ma-2 rounded" Elevation="3">
|
||||
<UploadDropBox
|
||||
@ref="@_uploadComponent"
|
||||
FilesUploaded="OnFilesUploaded"
|
||||
ClearClicked="OnClearFilesClicked"
|
||||
ExistingFiles="ExistingFiles"></UploadDropBox>
|
||||
</MudPaper>
|
||||
@if (Model is not null)
|
||||
{
|
||||
@for (int index = 0; index < Model.ArtifactEntries.Count; ++index)
|
||||
{
|
||||
// Capture the current item in a local variable for the lambda
|
||||
var currentEntry = Model.ArtifactEntries[index];
|
||||
|
||||
<ArchiveEntryCreatorCard Model="currentEntry"
|
||||
ModelChanged="(updatedEntry) => HandleEntryUpdate(currentEntry, updatedEntry)"
|
||||
InputsChanged="OnChanged"
|
||||
@key="currentEntry"
|
||||
ArtifactEntryIndex="index"
|
||||
OnEntryDeletedClicked="OnDeleteEntryClicked"/>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
|
||||
<MudGrid Justify="Justify.FlexEnd" Class="pt-6">
|
||||
<MudItem>
|
||||
<MudCheckBox Label="Publicly Visible" T="bool" @bind-Value=Model.IsPublicallyVisible></MudCheckBox>
|
||||
</MudItem>
|
||||
|
||||
@if (FormButtonsEnabled)
|
||||
{
|
||||
<MudItem Class="pr-0">
|
||||
<MudButton Color="Color.Primary" Variant="Variant.Filled" Class="ml-4" OnClick="CancelClicked">Cancel</MudButton>
|
||||
</MudItem>
|
||||
|
||||
<MudItem Class="pl-2">
|
||||
<MudButton Color="Color.Primary" Variant="Variant.Filled" Class="ml-4" OnClick="PublishClicked" Disabled="@(!IsValid)" >Publish</MudButton>
|
||||
</MudItem>
|
||||
}
|
||||
</MudGrid>
|
||||
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public bool ClearOnPublish { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// The URI to navigate to if cancel is pressed. null to navigate to no page
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public string? BackLink { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// The URI to navigate to if publish is pressed, null to navigate to no page
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public string? ForwardLink { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Called when publish is clicked
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public EventCallback<ArtifactGroupingValidationModel> GroupingPublished { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The model to display on the form
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public ArtifactGroupingValidationModel Model { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// Determines if the cancel and publish buttons should be show to the user or if the containing component will
|
||||
/// handle their functionality (ie if used in a dialog and you want to use the dialog buttons instead of this component's handlers)
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public bool FormButtonsEnabled { get; set; } = true;
|
||||
|
||||
private UploadDropBox _uploadComponent = default!;
|
||||
|
||||
private IdentifierTextBox _identifierTextBox = default!;
|
||||
|
||||
private ElementReference _formDiv = default!;
|
||||
|
||||
private bool _isFormDivVisible = false;
|
||||
|
||||
private string _formDivStyle => _isFormDivVisible ? "" : "display: none;";
|
||||
|
||||
public List<string> DatesData { get; set; } = [];
|
||||
|
||||
public List<ArchiveCategory> Categories { get; set; } = new();
|
||||
|
||||
private List<FilePathListing> _filePathListings = new();
|
||||
|
||||
private bool _categorySelected = false;
|
||||
|
||||
public bool IsValid { get; set; } = false;
|
||||
|
||||
public List<ValidationResult> ValidationResults { get; private set; } = [];
|
||||
|
||||
// Used to store the files that have already been uploaded if this component is being displayed
|
||||
// with a filled in model. Used to populate the upload drop box
|
||||
private List<FilePathListing> ExistingFiles { get; set; } = new();
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
// Ensure to reload the component if a model has been supplied so that the full
|
||||
// component will render
|
||||
if (Model?.Category is not null)
|
||||
{
|
||||
await OnCategoryChanged();
|
||||
}
|
||||
|
||||
if (Model is not null && Model.Category is not null)
|
||||
{
|
||||
// The data entry should only be shown if a category has been selected
|
||||
_isFormDivVisible = true;
|
||||
}
|
||||
|
||||
if (Model is not null)
|
||||
{
|
||||
ExistingFiles = Model.ArtifactEntries
|
||||
.Where(e => e.Files.Any())
|
||||
.Select(e => e.Files[0])
|
||||
.ToList();
|
||||
}
|
||||
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private async Task PublishClicked(MouseEventArgs args)
|
||||
{
|
||||
var validationContext = new ValidationContext(Model);
|
||||
var validationResult = new List<ValidationResult>();
|
||||
|
||||
IsValid = Validator.TryValidateObject(Model, validationContext, validationResult);
|
||||
ArtifactGroupingValidationModel oldModel = Model;
|
||||
if (ForwardLink is not null)
|
||||
{
|
||||
if (IsValid)
|
||||
{
|
||||
NavigationManager.NavigateTo(ForwardLink);
|
||||
}
|
||||
}
|
||||
|
||||
if (IsValid && ClearOnPublish)
|
||||
{
|
||||
Model = new();
|
||||
await _uploadComponent.ClearClicked.InvokeAsync();
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
await GroupingPublished.InvokeAsync(oldModel);
|
||||
}
|
||||
|
||||
private void CancelClicked(MouseEventArgs args)
|
||||
{
|
||||
if (BackLink is not null) {
|
||||
NavigationManager.NavigateTo(BackLink);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentNullException("No back link provided for the add archive item page.");
|
||||
}
|
||||
}
|
||||
|
||||
private async Task HandleEntryUpdate(ArtifactEntryValidationModel originalEntry, ArtifactEntryValidationModel updatedEntry)
|
||||
{
|
||||
// Find the index of the original object in our list
|
||||
var index = Model.ArtifactEntries.IndexOf(originalEntry);
|
||||
|
||||
// If found, replace it with the updated version
|
||||
if (index != -1)
|
||||
{
|
||||
Model.ArtifactEntries[index] = updatedEntry;
|
||||
}
|
||||
|
||||
// Now, run the validation logic
|
||||
await OnChanged();
|
||||
}
|
||||
|
||||
// You can now simplify your OnFilesUploaded method slightly
|
||||
private async Task OnFilesUploaded(List<FilePathListing> args)
|
||||
{
|
||||
_filePathListings = args;
|
||||
|
||||
// This part is tricky. Adding items while iterating can be problematic.
|
||||
// A better approach is to create the entries first, then tell Blazor to render.
|
||||
var newEntries = new List<ArtifactEntryValidationModel>();
|
||||
foreach (var file in args)
|
||||
{
|
||||
// Associate the file with the entry if needed
|
||||
newEntries.Add(new ArtifactEntryValidationModel { Files = [file]});
|
||||
}
|
||||
Model.ArtifactEntries.AddRange(newEntries);
|
||||
|
||||
// StateHasChanged() is implicitly called by OnChanged() if validation passes
|
||||
await OnChanged();
|
||||
}
|
||||
|
||||
private async Task OnClearFilesClicked()
|
||||
{
|
||||
_filePathListings = [];
|
||||
Model.ArtifactEntries = [];
|
||||
StateHasChanged();
|
||||
await OnChanged();
|
||||
}
|
||||
|
||||
async Task OnChanged()
|
||||
{
|
||||
var validationContext = new ValidationContext(Model);
|
||||
var validationResult = new List<ValidationResult>();
|
||||
|
||||
IsValid = Validator.TryValidateObject(Model, validationContext, validationResult);
|
||||
|
||||
if (IsValid)
|
||||
{
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
async Task OnCategoryChanged()
|
||||
{
|
||||
if (Model.Category is not null && _identifierTextBox is not null)
|
||||
{
|
||||
_identifierTextBox.VerifyFormatCategory = Model.Category;
|
||||
_isFormDivVisible = true;
|
||||
if (!_categorySelected)
|
||||
{
|
||||
_categorySelected = true;
|
||||
}
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
await OnChanged();
|
||||
}
|
||||
|
||||
public async Task OnAddCategoryClicked()
|
||||
{
|
||||
var options = new DialogOptions { CloseOnEscapeKey = true, BackdropClick = false };
|
||||
var dialog = await DialogService.ShowAsync<CategoryCreatorDialog>("Create a Category", options);
|
||||
|
||||
var result = await dialog.Result;
|
||||
|
||||
if (result is not null && !result.Canceled)
|
||||
{
|
||||
await CategoryProvider.CreateCategoryAsync(CategoryValidationModel.ToArchiveCategory((CategoryValidationModel)result.Data));
|
||||
StateHasChanged();
|
||||
await OnChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<IEnumerable<ArchiveCategory>> SearchCategory(string value, CancellationToken cancellationToken)
|
||||
{
|
||||
List<ArchiveCategory> categories;
|
||||
if (string.IsNullOrEmpty(value))
|
||||
{
|
||||
categories = new(await CategoryProvider.Top(25) ?? []);
|
||||
}
|
||||
else
|
||||
{
|
||||
categories = new((await CategoryProvider.Search(value) ?? []));
|
||||
}
|
||||
|
||||
return categories;
|
||||
}
|
||||
|
||||
private async void OnDeleteEntryClicked((int index, string filename) data)
|
||||
{
|
||||
Model.ArtifactEntries.RemoveAt(data.index);
|
||||
_uploadComponent.RemoveFile(data.filename);
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<MudDialog>
|
||||
<TitleContent>
|
||||
<MudText Typo="Typo.h6">Edit a Category</MudText>
|
||||
</TitleContent>
|
||||
|
||||
<DialogContent>
|
||||
<AddArchiveGroupingComponent
|
||||
Model="Model"
|
||||
FormButtonsEnabled=false></AddArchiveGroupingComponent>
|
||||
</DialogContent>
|
||||
|
||||
<DialogActions>
|
||||
<MudButton OnClick="OnCancel">Cancel</MudButton>
|
||||
<MudButton Color="Color.Primary" OnClick="OnSubmit">OK</MudButton>
|
||||
</DialogActions>
|
||||
</MudDialog>
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public required ArtifactGroupingValidationModel Model { get; set; }
|
||||
|
||||
[CascadingParameter]
|
||||
IMudDialogInstance MudDialog { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public bool IsUpdate { get; set; } = false;
|
||||
|
||||
|
||||
private void OnCancel(MouseEventArgs args)
|
||||
{
|
||||
MudDialog.Cancel();
|
||||
}
|
||||
private void OnSubmit(MouseEventArgs args)
|
||||
{
|
||||
MudDialog.Close(DialogResult.Ok(Model));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,323 @@
|
||||
@using OpenArchival.Blazor.Components.CustomComponents;
|
||||
@using System.ComponentModel.DataAnnotations
|
||||
@using MudBlazor
|
||||
|
||||
@inject ArtifactEntrySharedHelpers Helpers;
|
||||
@inject IArtifactDefectProvider DefectsProvider;
|
||||
@inject IArtifactStorageLocationProvider StorageLocationProvider;
|
||||
@inject IArchiveEntryTagProvider TagsProvider;
|
||||
@inject IArtifactTypeProvider TypesProvider;
|
||||
@inject IListedNameProvider ListedNameProvider;
|
||||
|
||||
<MudPaper Class="pa-4 ma-2 rounded" Elevation="3">
|
||||
<MudGrid>
|
||||
<MudItem>
|
||||
@if (Model.Files.Count > 0) {
|
||||
<MudText Typo="Typo.h6">@(Model.Files[0].OriginalName)</MudText>
|
||||
}
|
||||
</MudItem>
|
||||
<MudItem>
|
||||
<MudButton
|
||||
Variant="Variant.Filled"
|
||||
StartIcon="@Icons.Material.Filled.Delete"
|
||||
Color="Color.Error"
|
||||
OnClick="OnDeleteEntryClicked"
|
||||
>Delete</MudButton>
|
||||
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
|
||||
@foreach (var error in ValidationResults)
|
||||
{
|
||||
<MudAlert Severity="Severity.Error">
|
||||
@error.ErrorMessage
|
||||
</MudAlert>
|
||||
}
|
||||
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Archive Item Title</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<MudTextField For="@(() => Model.Title)" Required=true Placeholder="Archive Item Title" T="string" Class="pl-4 pr-4" @bind-Value=Model.Title @bind-Value:after=OnInputsChanged></MudTextField>
|
||||
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Archive Item Numbering</MudText>
|
||||
<MudText Typo="Typo.caption" Color="Color.Secondary" Class="pb-2">Enter a unique ID for this entry</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<MudTextField For="@(() => Model.ArtifactNumber)" Placeholder="Numbering" T="string" @bind-Value=Model.ArtifactNumber @bind-Value:after=OnInputsChanged/>
|
||||
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Item Description</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<MudTextField For="@(() => Model.Description)" Lines=8 Placeholder="Description" T="string" Class="pl-4 pr-4" @bind-Value=Model.Description @bind-Value:after=OnInputsChanged></MudTextField>
|
||||
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Storage Location</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<MudAutocomplete For="@(() => Model.StorageLocation)" T="string" Label="Storage Location" Class="pt-0 mt-0 pl-2 pr-2" @bind-Value=Model.StorageLocation @bind-Value:after=OnInputsChanged SearchFunc="Helpers.SearchStorageLocation" CoerceValue=true></MudAutocomplete>
|
||||
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Artifact Type</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<MudAutocomplete For="@(() => Model.Type)" T="string" Label="Artifact Type" Class="pt-0 mt-0 pl-2 pr-2" @bind-Value=Model.Type @bind-Value:after=OnInputsChanged SearchFunc="Helpers.SearchItemTypes" CoerceValue=true></MudAutocomplete>
|
||||
|
||||
@* Tags entry *@
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Tags</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<ChipContainer T="string" @ref="@_tagsChipContainer" @bind-Items="Model.Tags">
|
||||
<InputContent>
|
||||
<MudAutocomplete T="string"
|
||||
OnInternalInputChanged="OnInputsChanged"
|
||||
SearchFunc="Helpers.SearchTags"
|
||||
Value="_tagsInputValue"
|
||||
ValueChanged="OnTagsInputTextChanged"
|
||||
OnKeyDown="@(ev => HandleChipContainerEnter<string>(ev, _tagsChipContainer, _tagsInputValue, () => _tagsInputValue = string.Empty))"
|
||||
CoerceValue=true
|
||||
Placeholder="Add Tags..."
|
||||
ShowProgressIndicator="true"
|
||||
>
|
||||
</MudAutocomplete>
|
||||
</InputContent>
|
||||
</ChipContainer>
|
||||
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Listed Names</MudText>
|
||||
<MudText Typo="Typo.caption" Color="Color.Secondary" Class="pb-2">Enter any names of the people associated with this entry.</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<ChipContainer T="string" @ref=_listedNamesChipContainer @bind-Items="Model.ListedNames">
|
||||
<InputContent>
|
||||
<MudAutocomplete T="string"
|
||||
SearchFunc="Helpers.SearchListedNames"
|
||||
OnInternalInputChanged="OnInputsChanged"
|
||||
Value="_listedNamesInputValue"
|
||||
ValueChanged="OnListedNamesTextChanged"
|
||||
OnKeyDown="@(ev=>HandleChipContainerEnter<string>(ev, _listedNamesChipContainer, _listedNamesInputValue, () => _listedNamesInputValue = string.Empty))"
|
||||
CoerceValue=true
|
||||
Placeholder="Add Listed Names..."
|
||||
ShowProgressIndicator=true>
|
||||
</MudAutocomplete>
|
||||
</InputContent>
|
||||
</ChipContainer>
|
||||
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Associated Dates</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<ChipContainer T="DateTime" @ref="_assocaitedDatesChipContainer" @bind-Items="Model.AssociatedDates" DisplayFunc="date => date.ToShortDateString()">
|
||||
<InputContent>
|
||||
<MudDatePicker @bind-Date=_associatedDateInputValue>
|
||||
</MudDatePicker>
|
||||
</InputContent>
|
||||
<SubmitButton>
|
||||
<MudButton Color="Color.Primary"
|
||||
OnClick="HandleAssociatedDateChipContainerAdd">+</MudButton>
|
||||
</SubmitButton>
|
||||
</ChipContainer>
|
||||
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Defects</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<ChipContainer T="string" @ref=_defectsChipContainer @bind-Items="Model.Defects">
|
||||
<InputContent>
|
||||
<MudAutocomplete T="string"
|
||||
SearchFunc="Helpers.SearchDefects"
|
||||
OnInternalInputChanged="OnInputsChanged"
|
||||
Value="_defectsInputValue"
|
||||
ValueChanged="OnDefectsValueChanged"
|
||||
OnKeyDown="@(ev=>HandleChipContainerEnter<string>(ev, _defectsChipContainer, _defectsInputValue, () => _defectsInputValue = string.Empty))"
|
||||
CoerceValue=true
|
||||
Placeholder="Add Defects..."
|
||||
ShowProgressIndicator=true>
|
||||
</MudAutocomplete>
|
||||
</InputContent>
|
||||
</ChipContainer>
|
||||
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Related Artifacts</MudText>
|
||||
<MudText Typo="Typo.caption" Color="Color.Secondary" Class="pb-2">Tag this entry with the identifier of any other entry to link them.</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<ChipContainer T="ArtifactEntry" @ref="_assocaitedArtifactsChipContainer" @bind-Items="Model.RelatedArtifacts" DisplayFunc="artifact => artifact.ArtifactIdentifier">
|
||||
<InputContent>
|
||||
<MudAutocomplete T="ArtifactEntry"
|
||||
OnInternalInputChanged="OnInputsChanged"
|
||||
Value="_associatedArtifactValue"
|
||||
ValueChanged="OnAssociatedArtifactChanged"
|
||||
OnKeyDown="@(EventArgs=>HandleChipContainerEnter<ArtifactEntry>(EventArgs, _assocaitedArtifactsChipContainer, _associatedArtifactValue, () => _associatedArtifactValue = null))"
|
||||
CoerceValue="false"
|
||||
Placeholder="Link artifact groupings..."
|
||||
ShowProgressIndicator=true>
|
||||
</MudAutocomplete>
|
||||
</InputContent>
|
||||
</ChipContainer>
|
||||
|
||||
<MudText Typo="Typo.h6" Color="Color.Primary" Class="pt-4 pb-0">Artifact Text Contents</MudText>
|
||||
<MudText Typo="Typo.caption" Color="Color.Secondary" Class="pb-2">Input the text transcription of the words on the artifact if applicable to aid the search engine.</MudText>
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<MudTextField T="string"
|
||||
Value=Model.FileTextContent
|
||||
ValueChanged="OnArtifactTextContentChanged"
|
||||
Lines="5"
|
||||
For="@(() => Model.FileTextContent)"></MudTextField>
|
||||
|
||||
<MudText Typo=Typo.h6 Color="Color.Primary">Additional files</MudText>
|
||||
<UploadDropBox @ref=_uploadDropBox FilesUploaded="OnFilesUploaded"></UploadDropBox>
|
||||
</MudPaper>
|
||||
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public required FilePathListing MainFilePath { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<ArtifactEntryValidationModel> ModelChanged { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback InputsChanged { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public required ArtifactEntryValidationModel Model { get; set; } = new() { StorageLocation = "hello", Title = "Hello" };
|
||||
|
||||
[Parameter]
|
||||
public required int ArtifactEntryIndex {get; set;}
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<(int index, string filename)> OnEntryDeletedClicked { get; set; }
|
||||
|
||||
private ChipContainer<string> _tagsChipContainer;
|
||||
|
||||
private string _tagsInputValue { get; set; } = "";
|
||||
|
||||
private ChipContainer<DateTime> _assocaitedDatesChipContainer;
|
||||
|
||||
private DateTime? _associatedDateInputValue { get; set; } = default;
|
||||
|
||||
private ChipContainer<string> _listedNamesChipContainer;
|
||||
|
||||
private string _listedNamesInputValue { get; set; } = "";
|
||||
|
||||
private ChipContainer<string> _defectsChipContainer;
|
||||
|
||||
private string _defectsInputValue = "";
|
||||
|
||||
private ChipContainer<ArtifactEntry> _assocaitedArtifactsChipContainer;
|
||||
|
||||
private ArtifactEntry? _associatedArtifactValue = null;
|
||||
|
||||
private string _artifactTextContent = "";
|
||||
|
||||
public bool IsValid { get; set; }
|
||||
|
||||
public List<ValidationResult> ValidationResults { get; private set; } = [];
|
||||
|
||||
public UploadDropBox _uploadDropBox = default!;
|
||||
|
||||
protected override Task OnParametersSetAsync()
|
||||
{
|
||||
if (_uploadDropBox is not null && Model is not null && Model.Files is not null)
|
||||
{
|
||||
_uploadDropBox.ExistingFiles = Model.Files.GetRange(1, Model.Files.Count - 1);
|
||||
}
|
||||
|
||||
if (Model.Files is not null && Model.Files.Any())
|
||||
{
|
||||
MainFilePath = Model.Files[0];
|
||||
}
|
||||
|
||||
return base.OnParametersSetAsync();
|
||||
}
|
||||
|
||||
public async Task OnInputsChanged()
|
||||
{
|
||||
// 1. Clear previous validation errors
|
||||
ValidationResults.Clear();
|
||||
|
||||
var validationContext = new ValidationContext(Model);
|
||||
|
||||
// 2. Run the validator
|
||||
IsValid = Validator.TryValidateObject(Model, validationContext, ValidationResults, validateAllProperties: true);
|
||||
// 3. REMOVE this line. Let the parent's update trigger the re-render.
|
||||
// StateHasChanged();
|
||||
|
||||
await InputsChanged.InvokeAsync();
|
||||
}
|
||||
|
||||
private async Task OnFilesUploaded(List<FilePathListing> filePathListings)
|
||||
{
|
||||
if (MainFilePath is not null)
|
||||
{
|
||||
var oldFiles = Model.Files.GetRange(1, Model.Files.Count - 1);
|
||||
Model.Files = [MainFilePath];
|
||||
Model.Files.AddRange(oldFiles);
|
||||
Model.Files.AddRange(filePathListings);
|
||||
} else
|
||||
{
|
||||
Model.Files = [];
|
||||
}
|
||||
Model.Files.AddRange(filePathListings);
|
||||
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private async Task OnFilesCleared()
|
||||
{
|
||||
if (MainFilePath is not null) {
|
||||
Model.Files = [MainFilePath];
|
||||
} else
|
||||
{
|
||||
Model.Files = [];
|
||||
}
|
||||
}
|
||||
|
||||
private Task OnDefectsValueChanged(string text)
|
||||
{
|
||||
_defectsInputValue = text;
|
||||
return ModelChanged.InvokeAsync(Model);
|
||||
}
|
||||
|
||||
private Task OnTagsInputTextChanged(string text)
|
||||
{
|
||||
_tagsInputValue = text;
|
||||
return ModelChanged.InvokeAsync(Model);
|
||||
}
|
||||
|
||||
private Task OnListedNamesTextChanged(string text)
|
||||
{
|
||||
_listedNamesInputValue = text;
|
||||
return ModelChanged.InvokeAsync(Model);
|
||||
}
|
||||
|
||||
private Task OnAssociatedArtifactChanged(ArtifactEntry grouping)
|
||||
{
|
||||
if (grouping is not null)
|
||||
{
|
||||
_associatedArtifactValue = grouping;
|
||||
return ModelChanged.InvokeAsync(Model);
|
||||
}
|
||||
|
||||
return ModelChanged.InvokeAsync(Model);
|
||||
}
|
||||
|
||||
private Task OnArtifactTextContentChanged(string value)
|
||||
{
|
||||
Model.FileTextContent = value;
|
||||
return ModelChanged.InvokeAsync(Model);
|
||||
}
|
||||
|
||||
public async Task HandleChipContainerEnter<Type>(KeyboardEventArgs args, ChipContainer<Type> container, Type value, Action resetInputAction)
|
||||
{
|
||||
if (args.Key == "Enter")
|
||||
{
|
||||
await container.AddItem(value);
|
||||
resetInputAction?.Invoke();
|
||||
StateHasChanged();
|
||||
await ModelChanged.InvokeAsync(Model);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task HandleAssociatedDateChipContainerAdd(MouseEventArgs args)
|
||||
{
|
||||
if (_associatedDateInputValue is not null)
|
||||
{
|
||||
DateTime unspecifiedDate = (DateTime)_associatedDateInputValue;
|
||||
|
||||
DateTime utcDate = DateTime.SpecifyKind(unspecifiedDate, DateTimeKind.Utc);
|
||||
|
||||
await _assocaitedDatesChipContainer.AddItem(utcDate);
|
||||
|
||||
_associatedDateInputValue = default;
|
||||
}
|
||||
}
|
||||
private async Task OnDeleteEntryClicked(MouseEventArgs args)
|
||||
{
|
||||
await OnEntryDeletedClicked.InvokeAsync((ArtifactEntryIndex, MainFilePath.OriginalName));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,173 @@
|
||||
@using Microsoft.AspNetCore.Components.Web
|
||||
@using MudBlazor
|
||||
@using OpenArchival.DataAccess
|
||||
<MudDataGrid
|
||||
T="ArtifactGroupingRowElement"
|
||||
MultiSelection=true
|
||||
Filterable=false
|
||||
SelectOnRowClick=true
|
||||
ServerData="new Func<GridState<ArtifactGroupingRowElement>, Task<GridData<ArtifactGroupingRowElement>>>(ServerReload)"
|
||||
@key=@ArtifactGroupingRows
|
||||
@ref=@DataGrid>
|
||||
|
||||
<ToolBarContent>
|
||||
<MudButton
|
||||
Variant="Variant.Filled"
|
||||
StartIcon="@Icons.Material.Filled.Delete"
|
||||
Color="Color.Error"
|
||||
OnClick="OnDeleteClicked">Delete</MudButton>
|
||||
</ToolBarContent>
|
||||
|
||||
<Columns>
|
||||
<SelectColumn T="ArtifactGroupingRowElement"/>
|
||||
|
||||
<PropertyColumn
|
||||
Title="Id"
|
||||
Property="x=>x.ArtifactGroupingIdentifier"
|
||||
Filterable="false"/>
|
||||
|
||||
<PropertyColumn
|
||||
Title="Category"
|
||||
Property="x=>x.CategoryName"
|
||||
Filterable="false"/>
|
||||
|
||||
<PropertyColumn
|
||||
Title="Title"
|
||||
Property="x=>x.Title"
|
||||
Filterable="false"/>
|
||||
|
||||
<PropertyColumn
|
||||
Title="Publically Visible"
|
||||
Property="x=>x.IsPublicallyVisible"
|
||||
Filterable="false"/>
|
||||
|
||||
<TemplateColumn Title="Edit">
|
||||
<CellTemplate>
|
||||
<MudIconButton
|
||||
Color="Color.Primary"
|
||||
Icon="@Icons.Material.Filled.Edit"
|
||||
Variant="Variant.Filled"
|
||||
OnClick="() => OnRowEditClick(context.Item)">Edit</MudIconButton>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
|
||||
</Columns>
|
||||
|
||||
<PagerContent>
|
||||
<MudDataGridPager T="ArtifactGroupingRowElement"/>
|
||||
</PagerContent>
|
||||
</MudDataGrid>
|
||||
|
||||
|
||||
@inject IArtifactGroupingProvider GroupingProvider;
|
||||
@inject IDialogService DialogService;
|
||||
@inject IArtifactGroupingProvider GroupingProvider;
|
||||
@inject ArtifactEntrySharedHelpers Helpers;
|
||||
|
||||
@code
|
||||
{
|
||||
public List<ArtifactGroupingRowElement> ArtifactGroupingRows { get; set; } = new();
|
||||
|
||||
public MudDataGrid<ArtifactGroupingRowElement> DataGrid { get; set; } = default!;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
// Load inital data
|
||||
List<ArtifactGrouping> groupings = await GroupingProvider.GetGroupingsPaged(1, 25);
|
||||
SetGroupingRows(groupings);
|
||||
|
||||
await base.OnInitializedAsync();
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private void SetGroupingRows(IEnumerable<ArtifactGrouping> groupings)
|
||||
{
|
||||
ArtifactGroupingRows.Clear();
|
||||
|
||||
foreach (var grouping in groupings)
|
||||
{
|
||||
ArtifactGroupingRows.Add(new ArtifactGroupingRowElement()
|
||||
{
|
||||
ArtifactGroupingIdentifier=grouping.ArtifactGroupingIdentifier ?? throw new ArgumentNullException(nameof(grouping), "Got a null grouping identifier"),
|
||||
CategoryName=grouping.Category.Name,
|
||||
Title=grouping.Title,
|
||||
IsPublicallyVisible=grouping.IsPublicallyVisible,
|
||||
Id=grouping.Id
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task OnRowEditClick(ArtifactGroupingRowElement row)
|
||||
{
|
||||
var parameters = new DialogParameters();
|
||||
|
||||
var model = await GroupingProvider.GetGroupingAsync(row.Id);
|
||||
|
||||
parameters.Add("Model", ArtifactGroupingValidationModel.ToValidationModel(model));
|
||||
|
||||
var options = new DialogOptions()
|
||||
{
|
||||
MaxWidth = MaxWidth.ExtraExtraLarge,
|
||||
FullWidth = true
|
||||
};
|
||||
|
||||
var dialog = await DialogService.ShowAsync<AddGroupingDialog>("Edit Grouping", parameters, options);
|
||||
|
||||
var result = await dialog.Result;
|
||||
|
||||
if (result is not null && !result.Canceled)
|
||||
{
|
||||
var validationModel = (ArtifactGroupingValidationModel)result.Data!;
|
||||
|
||||
await Helpers.OnGroupingPublished(validationModel);
|
||||
|
||||
await DataGrid.ReloadServerData();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task OnDeleteClicked(MouseEventArgs args)
|
||||
{
|
||||
HashSet<ArtifactGroupingRowElement> selected = DataGrid.SelectedItems;
|
||||
|
||||
bool? confirmed = await DialogService.ShowMessageBox
|
||||
(
|
||||
new MessageBoxOptions(){
|
||||
Message=$"Are you sure you want to delete {selected.Count} groupings?",
|
||||
Title="Delete Groupings",
|
||||
CancelText="Cancel",
|
||||
YesText="Delete"
|
||||
});
|
||||
|
||||
if (confirmed is not null && (confirmed ?? throw new ArgumentNullException("confirmed was null")))
|
||||
{
|
||||
foreach (var grouping in selected)
|
||||
{
|
||||
await GroupingProvider.DeleteGroupingAsync(grouping.Id);
|
||||
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);
|
||||
|
||||
var pagedItems = groupings.Select(grouping => new ArtifactGroupingRowElement()
|
||||
{
|
||||
Id = grouping.Id,
|
||||
Title = grouping.Title,
|
||||
ArtifactGroupingIdentifier = grouping.ArtifactGroupingIdentifier ?? throw new ArgumentNullException(nameof(grouping), "Got a null ArtifactGroupingIdentifier"),
|
||||
CategoryName = grouping.Category.Name,
|
||||
IsPublicallyVisible = grouping.IsPublicallyVisible,
|
||||
});
|
||||
|
||||
return new GridData<ArtifactGroupingRowElement>()
|
||||
{
|
||||
TotalItems = totalItems,
|
||||
Items = pagedItems
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,260 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using OpenArchival.DataAccess;
|
||||
|
||||
namespace OpenArchival.Blazor.AdminComponents;
|
||||
|
||||
public class ArtifactEntrySharedHelpers
|
||||
{
|
||||
IArtifactDefectProvider DefectsProvider { get; set; }
|
||||
|
||||
IArtifactStorageLocationProvider StorageLocationProvider { get; set; }
|
||||
|
||||
IArchiveEntryTagProvider TagsProvider { get; set; }
|
||||
|
||||
IArtifactTypeProvider TypesProvider { get; set; }
|
||||
|
||||
IListedNameProvider ListedNameProvider { get; set; }
|
||||
|
||||
IDbContextFactory<ApplicationDbContext> DbContextFactory { get; set; }
|
||||
|
||||
IArtifactGroupingProvider GroupingProvider { get; set; }
|
||||
|
||||
|
||||
public ArtifactEntrySharedHelpers(IArtifactDefectProvider defectsProvider, IArtifactStorageLocationProvider storageLocationProvider, IArchiveEntryTagProvider tagsProvider, IArtifactTypeProvider typesProvider, IListedNameProvider listedNamesProvider, IDbContextFactory<ApplicationDbContext> contextFactory, IArtifactGroupingProvider groupingProvider)
|
||||
{
|
||||
DefectsProvider = defectsProvider;
|
||||
StorageLocationProvider = storageLocationProvider;
|
||||
TagsProvider = tagsProvider;
|
||||
TypesProvider = typesProvider;
|
||||
ListedNameProvider = listedNamesProvider;
|
||||
DbContextFactory = contextFactory;
|
||||
GroupingProvider = groupingProvider;
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<string>> SearchDefects(string value, CancellationToken cancellationToken)
|
||||
{
|
||||
List<string> defects;
|
||||
if (string.IsNullOrEmpty(value))
|
||||
{
|
||||
defects = new((await DefectsProvider.Top(25) ?? []).Select(prop => prop.Description));
|
||||
}
|
||||
else
|
||||
{
|
||||
defects = new((await DefectsProvider.Search(value) ?? []).Select(prop => prop.Description));
|
||||
}
|
||||
|
||||
return defects;
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<string>> SearchStorageLocation(string value, CancellationToken cancellationToken)
|
||||
{
|
||||
List<string> storageLocations;
|
||||
if (string.IsNullOrEmpty(value))
|
||||
{
|
||||
storageLocations = new((await StorageLocationProvider.Top(25) ?? []).Select(prop => prop.Location));
|
||||
}
|
||||
else
|
||||
{
|
||||
storageLocations = new((await StorageLocationProvider.Search(value) ?? []).Select(prop => prop.Location));
|
||||
}
|
||||
|
||||
return storageLocations;
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<string>> SearchTags(string value, CancellationToken cancellationToken)
|
||||
{
|
||||
List<string> tags;
|
||||
if (string.IsNullOrEmpty(value))
|
||||
{
|
||||
tags = new((await TagsProvider.Top(25) ?? []).Select(prop => prop.Name));
|
||||
}
|
||||
else
|
||||
{
|
||||
tags = new((await TagsProvider.Search(value) ?? []).Select(prop => prop.Name));
|
||||
}
|
||||
|
||||
return tags;
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<string>> SearchItemTypes(string value, CancellationToken cancellationToken)
|
||||
{
|
||||
List<string> itemTypes;
|
||||
if (string.IsNullOrEmpty(value))
|
||||
{
|
||||
itemTypes = new((await TypesProvider.Top(25) ?? []).Select(prop => prop.Name));
|
||||
}
|
||||
else
|
||||
{
|
||||
itemTypes = new((await TypesProvider.Search(value) ?? []).Select(prop => prop.Name));
|
||||
}
|
||||
|
||||
return itemTypes;
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<string>> SearchListedNames(string value, CancellationToken cancellationToken)
|
||||
{
|
||||
List<ListedName> names;
|
||||
if (string.IsNullOrEmpty(value))
|
||||
{
|
||||
names = new((await ListedNameProvider.Top(25) ?? []));
|
||||
}
|
||||
else
|
||||
{
|
||||
names = new((await ListedNameProvider.Search(value) ?? []));
|
||||
}
|
||||
|
||||
return names.Select(p => p.Value);
|
||||
}
|
||||
|
||||
/*
|
||||
public async Task OnGroupingPublished(ArtifactGroupingValidationModel model)
|
||||
{
|
||||
await using var context = await DbContextFactory.CreateDbContextAsync();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var grouping = model.ToArtifactGrouping();
|
||||
|
||||
// The old logic for attaching the category is still good.
|
||||
context.Attach(grouping.Category);
|
||||
|
||||
// 1. Handle ArtifactType (no change, this was fine)
|
||||
if (grouping.Type is not null)
|
||||
{
|
||||
var existingType = await context.ArtifactTypes
|
||||
.FirstOrDefaultAsync(t => t.Name == grouping.Type.Name);
|
||||
|
||||
if (existingType is not null)
|
||||
{
|
||||
grouping.Type = existingType;
|
||||
}
|
||||
}
|
||||
|
||||
// 2. Process ChildArtifactEntries
|
||||
foreach (var entry in grouping.ChildArtifactEntries)
|
||||
{
|
||||
// Handle ArtifactStorageLocation (no change, this was fine)
|
||||
var existingLocation = await context.ArtifactStorageLocations
|
||||
.FirstOrDefaultAsync(l => l.Location == entry.StorageLocation.Location);
|
||||
|
||||
if (existingLocation is not null)
|
||||
{
|
||||
entry.StorageLocation = existingLocation;
|
||||
}
|
||||
|
||||
// Handle Defects
|
||||
if (entry.Defects is not null && entry.Defects.Any())
|
||||
{
|
||||
var defectDescriptions = entry.Defects.Select(d => d.Description).ToList();
|
||||
var existingDefects = await context.ArtifactDefects
|
||||
.Where(d => defectDescriptions.Contains(d.Description))
|
||||
.ToListAsync();
|
||||
|
||||
// Replace in-memory defects with existing ones
|
||||
for (int i = 0; i < entry.Defects.Count; i++)
|
||||
{
|
||||
var existingDefect = existingDefects
|
||||
.FirstOrDefault(ed => ed.Description == entry.Defects[i].Description);
|
||||
|
||||
if (existingDefect is not null)
|
||||
{
|
||||
entry.Defects[i] = existingDefect;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle ListedNames
|
||||
if (entry.ListedNames is not null && entry.ListedNames.Any())
|
||||
{
|
||||
var listedNamesValues = entry.ListedNames.Select(n => n.Value).ToList();
|
||||
var existingNames = await context.ArtifactAssociatedNames
|
||||
.Where(n => listedNamesValues.Contains(n.Value))
|
||||
.ToListAsync();
|
||||
|
||||
for (int i = 0; i < entry.ListedNames.Count; i++)
|
||||
{
|
||||
var existingName = existingNames
|
||||
.FirstOrDefault(en => en.Value == entry.ListedNames[i].Value);
|
||||
|
||||
if (existingName is not null)
|
||||
{
|
||||
entry.ListedNames[i] = existingName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle Tags
|
||||
if (entry.Tags is not null && entry.Tags.Any())
|
||||
{
|
||||
var tagNames = entry.Tags.Select(t => t.Name).ToList();
|
||||
var existingTags = await context.ArtifactEntryTags
|
||||
.Where(t => tagNames.Contains(t.Name))
|
||||
.ToListAsync();
|
||||
|
||||
for (int i = 0; i < entry.Tags.Count; i++)
|
||||
{
|
||||
var existingTag = existingTags
|
||||
.FirstOrDefault(et => et.Name == entry.Tags[i].Name);
|
||||
|
||||
if (existingTag is not null)
|
||||
{
|
||||
entry.Tags[i] = existingTag;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 💡 NEW: Handle pre-existing FilePathListings
|
||||
// This is the key change to resolve the exception
|
||||
if (entry.Files is not null)
|
||||
{
|
||||
foreach (var filepath in entry.Files)
|
||||
{
|
||||
// The issue is trying to add a new entity that has an existing primary key.
|
||||
// Since you stated that all files are pre-added, you must attach them.
|
||||
// Attach() tells EF Core to track the entity, assuming it already exists.
|
||||
context.Attach(filepath);
|
||||
// Also ensure the parent-child relationship is set correctly, though it's likely set by ToArtifactGrouping
|
||||
filepath.ParentArtifactEntry = entry;
|
||||
}
|
||||
}
|
||||
// Tag each entry with the parent grouping so it is linked correctly in the database
|
||||
entry.ArtifactGrouping = grouping;
|
||||
}
|
||||
|
||||
// 3. Add the main grouping object and let EF Core handle the graph
|
||||
// The previous issues with the graph are resolved, so this line should now work.
|
||||
context.ArtifactGroupings.Add(grouping);
|
||||
|
||||
// 4. Save all changes in a single transaction
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
*/
|
||||
|
||||
public async Task OnGroupingPublished(ArtifactGroupingValidationModel model)
|
||||
{
|
||||
// The OnGroupingPublished method in this class should not contain DbContext logic.
|
||||
// It should orchestrate the data flow by calling the appropriate provider methods.
|
||||
var isNew = model.Id == 0 || model.Id is null;
|
||||
|
||||
// Convert the validation model to an entity
|
||||
var grouping = model.ToArtifactGrouping();
|
||||
|
||||
if (isNew)
|
||||
{
|
||||
// For a new grouping, use the CreateGroupingAsync method.
|
||||
// The provider method will handle the file path logic.
|
||||
await GroupingProvider.CreateGroupingAsync(grouping);
|
||||
}
|
||||
else
|
||||
{
|
||||
// For an existing grouping, use the UpdateGroupingAsync method.
|
||||
// The provider method will handle the change tracking.
|
||||
await GroupingProvider.UpdateGroupingAsync(grouping);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
@using System.Text
|
||||
|
||||
<MudText Typo="Typo.body2" Color="Color.Primary">Item Identifier: @Value</MudText>
|
||||
@if (_identifierError)
|
||||
{
|
||||
<MudAlert Severity="Severity.Error" Class="mt-4">
|
||||
All identifier fields must be filled in.
|
||||
</MudAlert>
|
||||
}
|
||||
<MudDivider DividerType="DividerType.Middle"></MudDivider>
|
||||
<MudGrid Class="pt-0 pl-4 pr-4" Justify="Justify.FlexStart" AlignItems="AlignItems.Center">
|
||||
|
||||
@for (int index = 0; index < IdentifierFields.Count; index++)
|
||||
{
|
||||
// You must create a local variable inside the loop for binding to work correctly.
|
||||
var field = IdentifierFields[index];
|
||||
|
||||
<MudItem Class="pt-6">
|
||||
<MudTextField Label="@field.Name"
|
||||
@bind-Value="@field.Value"
|
||||
@bind-Value:after="OnInputChanged"
|
||||
DebounceInterval="100"
|
||||
Required=true/>
|
||||
</MudItem>
|
||||
|
||||
@if (index < IdentifierFields.Count - 1)
|
||||
{
|
||||
<MudItem Class="pt-6">
|
||||
<MudText>@FieldSeparator</MudText>
|
||||
</MudItem>
|
||||
}
|
||||
}
|
||||
</MudGrid>
|
||||
|
||||
@using OpenArchival.DataAccess;
|
||||
@inject IArchiveCategoryProvider CategoryProvider;
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public required string FieldSeparator { get; set; } = "-";
|
||||
|
||||
private List<IdentifierFieldValidationModel> _identifierFields = new();
|
||||
|
||||
[Parameter]
|
||||
public required List<IdentifierFieldValidationModel> IdentifierFields
|
||||
{
|
||||
get => _identifierFields;
|
||||
set => _identifierFields = value ?? new();
|
||||
}
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<string> ValueChanged { get; set; }
|
||||
|
||||
private ArchiveCategory _verifyFormatCategory;
|
||||
public ArchiveCategory? VerifyFormatCategory
|
||||
{
|
||||
get
|
||||
{
|
||||
return _verifyFormatCategory;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value is not null)
|
||||
{
|
||||
_identifierFields.Clear();
|
||||
_verifyFormatCategory = value;
|
||||
foreach (var field in value.FieldNames)
|
||||
{
|
||||
_identifierFields.Add(new IdentifierFieldValidationModel() {Name=field, Value=""});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsValid { get; set; } = false;
|
||||
|
||||
// Computed property that builds the final string
|
||||
public string Value => string.Join(FieldSeparator, IdentifierFields.Select(f => f.Value).Where(v => !string.IsNullOrEmpty(v)));
|
||||
|
||||
private bool _identifierError = false;
|
||||
|
||||
/// <summary>
|
||||
/// This runs when parameters are first set, ensuring the initial state is correct.
|
||||
/// </summary>
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
ValidateFields();
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This runs after the user types into a field.
|
||||
/// </summary>
|
||||
private async Task OnInputChanged()
|
||||
{
|
||||
ValidateFields();
|
||||
await ValueChanged.InvokeAsync(this.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reusable method to check the validity of the identifier fields.
|
||||
/// </summary>
|
||||
private void ValidateFields()
|
||||
{
|
||||
// Set to true if ANY field is empty or null.
|
||||
_identifierError = IdentifierFields.Any(f => string.IsNullOrEmpty(f.Value));
|
||||
IsValid = !_identifierError;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
namespace OpenArchival.Blazor.AdminComponents;
|
||||
|
||||
using OpenArchival.DataAccess;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
public class ArtifactEntryValidationModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Used when translating between the validation model and the database model
|
||||
/// </summary>
|
||||
public int? Id { get; set; }
|
||||
|
||||
[Required(AllowEmptyStrings = false, ErrorMessage = "An artifact numbering must be supplied")]
|
||||
public string? ArtifactNumber { get; set; }
|
||||
|
||||
[Required(AllowEmptyStrings = false, ErrorMessage = "A title must be provided")]
|
||||
public string? Title { get; set; }
|
||||
|
||||
public string? Description { get; set; }
|
||||
|
||||
public string? Type { get; set; }
|
||||
|
||||
public string? StorageLocation { get; set; }
|
||||
|
||||
public List<string>? Tags { get; set; } = [];
|
||||
|
||||
public List<string>? ListedNames { get; set; } = [];
|
||||
|
||||
public List<DateTime>? AssociatedDates { get; set; } = [];
|
||||
|
||||
public List<string>? Defects { get; set; } = [];
|
||||
|
||||
public List<string>? Links { get; set; } = [];
|
||||
|
||||
public List<FilePathListing>? Files { get; set; } = [];
|
||||
|
||||
public string? FileTextContent { get; set; }
|
||||
|
||||
public List<ArtifactEntry> RelatedArtifacts { get; set; } = [];
|
||||
|
||||
public bool IsPublicallyVisible { get; set; } = true;
|
||||
|
||||
public ArtifactEntry ToArtifactEntry(ArtifactGrouping? parent = null)
|
||||
{
|
||||
List<ArtifactEntryTag> tags = new();
|
||||
if (Tags is not null)
|
||||
{
|
||||
foreach (var tag in Tags)
|
||||
{
|
||||
tags.Add(new ArtifactEntryTag() { Name = tag });
|
||||
}
|
||||
}
|
||||
|
||||
List<ArtifactDefect> defects = new();
|
||||
foreach (var defect in Defects)
|
||||
{
|
||||
defects.Add(new ArtifactDefect() { Description=defect});
|
||||
}
|
||||
|
||||
var entry = new ArtifactEntry()
|
||||
{
|
||||
Id = Id ?? 0,
|
||||
Files = Files,
|
||||
Type = new DataAccess.ArtifactType() { Name = Type },
|
||||
ArtifactNumber = ArtifactNumber,
|
||||
AssociatedDates = AssociatedDates,
|
||||
Defects = defects,
|
||||
Links = Links,
|
||||
StorageLocation = null,
|
||||
Description = Description,
|
||||
FileTextContent = FileTextContent,
|
||||
IsPubliclyVisible = IsPublicallyVisible,
|
||||
Tags = tags,
|
||||
Title = Title,
|
||||
ArtifactGrouping = parent,
|
||||
RelatedTo = RelatedArtifacts,
|
||||
};
|
||||
|
||||
List<ListedName> listedNames = new();
|
||||
foreach (var name in ListedNames)
|
||||
{
|
||||
listedNames.Add(new ListedName() { Value=name });
|
||||
}
|
||||
|
||||
entry.ListedNames = listedNames;
|
||||
|
||||
if (!string.IsNullOrEmpty(StorageLocation))
|
||||
{
|
||||
entry.StorageLocation = new ArtifactStorageLocation() { Location = StorageLocation };
|
||||
}
|
||||
|
||||
return entry;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
using OpenArchival.DataAccess;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace OpenArchival.Blazor.AdminComponents;
|
||||
|
||||
public class ArtifactGroupingValidationModel : IValidatableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// Used by update code to track the database record that corresponds to the data within this DTO
|
||||
/// </summary>
|
||||
public int? Id { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "A grouping title is required.")]
|
||||
public string? Title { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "A grouping description is required.")]
|
||||
public string? Description { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "A type is required.")]
|
||||
public string? Type { get; set; }
|
||||
|
||||
public ArchiveCategory? Category { get; set; }
|
||||
|
||||
public List<IdentifierFieldValidationModel> IdentifierFieldValues { get; set; } = new();
|
||||
|
||||
public List<ArtifactEntryValidationModel> ArtifactEntries { get; set; } = new();
|
||||
|
||||
public bool IsPublicallyVisible { get; set; } = true;
|
||||
|
||||
public ArtifactGrouping ToArtifactGrouping()
|
||||
{
|
||||
IdentifierFields identifierFields = new();
|
||||
identifierFields.Values = IdentifierFieldValues.Select(p => p.Value).ToList();
|
||||
|
||||
List<ArtifactEntry> entries = [];
|
||||
foreach (var entry in ArtifactEntries)
|
||||
{
|
||||
entries.Add(entry.ToArtifactEntry());
|
||||
}
|
||||
|
||||
var grouping = new ArtifactGrouping()
|
||||
{
|
||||
Id = Id ?? default,
|
||||
Title = Title,
|
||||
Description = Description,
|
||||
Category = Category,
|
||||
IdentifierFields = identifierFields,
|
||||
IsPublicallyVisible = true,
|
||||
ChildArtifactEntries = entries,
|
||||
Type = new ArtifactType() { Name = Type }
|
||||
};
|
||||
|
||||
// Create the parent link
|
||||
foreach (var entry in grouping.ChildArtifactEntries)
|
||||
{
|
||||
entry.ArtifactGrouping = grouping;
|
||||
}
|
||||
|
||||
return grouping;
|
||||
}
|
||||
|
||||
public static ArtifactGroupingValidationModel ToValidationModel(ArtifactGrouping grouping)
|
||||
{
|
||||
var entries = new List<ArtifactEntryValidationModel>();
|
||||
|
||||
foreach (var entry in grouping.ChildArtifactEntries)
|
||||
{
|
||||
var defects = new List<string>();
|
||||
|
||||
if (entry.Defects is not null)
|
||||
{
|
||||
defects.AddRange(entry.Defects.Select(defect => defect.Description));
|
||||
}
|
||||
|
||||
var validationModel = new ArtifactEntryValidationModel()
|
||||
{
|
||||
Id = entry.Id,
|
||||
Title = entry.Title,
|
||||
StorageLocation = entry.StorageLocation.Location,
|
||||
ArtifactNumber = entry.ArtifactNumber,
|
||||
AssociatedDates = entry.AssociatedDates,
|
||||
Defects = entry?.Defects?.Select(defect => defect.Description).ToList(),
|
||||
Description = entry?.Description,
|
||||
Files = entry?.Files,
|
||||
FileTextContent = entry?.FileTextContent,
|
||||
IsPublicallyVisible = entry.IsPubliclyVisible,
|
||||
Links = entry.Links,
|
||||
ListedNames = entry?.ListedNames?.Select(name => name.Value).ToList(),
|
||||
RelatedArtifacts = entry.RelatedTo,
|
||||
Tags = entry?.Tags?.Select(tag => tag.Name).ToList(),
|
||||
Type = entry?.Type.Name,
|
||||
};
|
||||
|
||||
entries.Add(validationModel);
|
||||
}
|
||||
|
||||
var identifierFieldsStrings = grouping.IdentifierFields.Values;
|
||||
List<IdentifierFieldValidationModel> identifierFields = new();
|
||||
for (int index = 0; index < identifierFieldsStrings.Count; ++index)
|
||||
{
|
||||
identifierFields.Add(new IdentifierFieldValidationModel()
|
||||
{
|
||||
Value = identifierFieldsStrings[index],
|
||||
Name = grouping.Category.FieldNames[index]
|
||||
});
|
||||
}
|
||||
return new ArtifactGroupingValidationModel()
|
||||
{
|
||||
Id = grouping.Id,
|
||||
Title = grouping.Title,
|
||||
ArtifactEntries = entries,
|
||||
Category = grouping.Category,
|
||||
Description = grouping.Description,
|
||||
IdentifierFieldValues = identifierFields,
|
||||
IsPublicallyVisible = grouping.IsPublicallyVisible,
|
||||
Type = grouping.Type.Name
|
||||
};
|
||||
}
|
||||
|
||||
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
|
||||
{
|
||||
foreach (var entry in ArtifactEntries)
|
||||
{
|
||||
var context = new ValidationContext(entry);
|
||||
var validationResult = new List<ValidationResult>();
|
||||
|
||||
bool valid = Validator.TryValidateObject(entry, context, validationResult);
|
||||
foreach (var result in validationResult)
|
||||
{
|
||||
yield return result;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ArtifactEntries.Any())
|
||||
{
|
||||
yield return new ValidationResult("Must upload one or more files");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace OpenArchival.Blazor.AdminComponents;
|
||||
|
||||
public class IdentifierFieldValidationModel
|
||||
{
|
||||
public string Name { get; set; } = "";
|
||||
public string Value { get; set; } = "";
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
@using Microsoft.EntityFrameworkCore;
|
||||
@using MudBlazor.Interfaces
|
||||
|
||||
@page "/categorieslist"
|
||||
|
||||
<MudPaper Class="pa-4 ma-2 rounded" Elevation="3">
|
||||
<MudText Typo="Typo.h6">Categories</MudText>
|
||||
<MudDivider Class="mb-2"></MudDivider>
|
||||
<MudList T="string" Clickable="true">
|
||||
@foreach (ArchiveCategory category in _categories)
|
||||
{
|
||||
<MudListItem OnClick="@(() => OnCategoryItemClicked(category))">
|
||||
@category.Name
|
||||
@if (ShowDeleteButton)
|
||||
{
|
||||
<MudListItemMeta ActionPosition="ActionPosition.End">
|
||||
<MudIconButton
|
||||
Icon="@Icons.Material.Filled.Delete"
|
||||
Color="Color.Error"
|
||||
Size="Size.Small"
|
||||
OnClick="@((e) => HandleDeleteClick(category))"
|
||||
/>
|
||||
</MudListItemMeta>
|
||||
}
|
||||
</MudListItem>
|
||||
}
|
||||
</MudList>
|
||||
@ChildContent
|
||||
</MudPaper>
|
||||
|
||||
@inject IArchiveCategoryProvider CategoryProvider;
|
||||
@inject ILogger<CategoriesListComponent> Logger;
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public bool ShowDeleteButton { get; set; } = false;
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<ArchiveCategory> ListItemClickedCallback { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<ArchiveCategory> OnDeleteClickedCallback { get; set; }
|
||||
|
||||
private List<ArchiveCategory> _categories = new();
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await LoadCategories();
|
||||
}
|
||||
|
||||
private async Task LoadCategories()
|
||||
{
|
||||
var categories = await CategoryProvider.GetAllArchiveCategories();
|
||||
if (categories is null)
|
||||
{
|
||||
Logger.LogError("There were no categories in the database when attempting to load the list of categories.");
|
||||
_categories.Clear();
|
||||
return;
|
||||
}
|
||||
_categories = categories.ToList();
|
||||
}
|
||||
|
||||
public async Task RefreshData()
|
||||
{
|
||||
await LoadCategories();
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private async Task OnCategoryItemClicked(ArchiveCategory category)
|
||||
{
|
||||
await ListItemClickedCallback.InvokeAsync(category);
|
||||
}
|
||||
|
||||
private async Task HandleDeleteClick(ArchiveCategory category)
|
||||
{
|
||||
await OnDeleteClickedCallback.InvokeAsync(category);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,164 @@
|
||||
@using System.ComponentModel.DataAnnotations;
|
||||
@using MudBlazor
|
||||
@using OpenArchival.DataAccess;
|
||||
|
||||
<MudDialog>
|
||||
<TitleContent>
|
||||
<MudText Typo="Typo.h6">Create a Category</MudText>
|
||||
</TitleContent>
|
||||
<DialogContent>
|
||||
<MudForm @ref="_form">
|
||||
<MudTextField @bind-Value="ValidationModel.Name"
|
||||
For="@(() => ValidationModel.Name)"
|
||||
Label="Category Name"
|
||||
Variant="Variant.Filled" />
|
||||
|
||||
<MudDivider Class="pt-4" DividerType="DividerType.Middle"/>
|
||||
|
||||
<MudText Typo="Typo.h6">Item Tag Identifier</MudText>
|
||||
<MudText Typo="Typo.subtitle2">This will be the format of the identifier used for each archive entry.</MudText>
|
||||
|
||||
<MudStack Row="true" AlignItems="AlignItems.Center" Spacing="2">
|
||||
<MudText Typo="Typo.body2">Format Preview: </MudText>
|
||||
<MudText Type="Typo.body2" Color="Color.Primary">@FormatPreview</MudText>
|
||||
</MudStack>
|
||||
|
||||
<MudTextField @bind-Value="ValidationModel.FieldSeparator"
|
||||
@bind-Value:after="UpdateFormatPreview"
|
||||
For="@(() => ValidationModel.FieldSeparator)"
|
||||
Label="Field Separator"
|
||||
Variant="Variant.Filled"
|
||||
MaxLength="1" />
|
||||
|
||||
<MudDivider Class="pt-4" />
|
||||
|
||||
<MudNumericField
|
||||
Value="ValidationModel.NumFields"
|
||||
ValueChanged="@((int newCount) => OnNumFieldsChanged(newCount))"
|
||||
Label="Number of fields in the item identifiers"
|
||||
Variant="Variant.Filled"
|
||||
Min="1"></MudNumericField>
|
||||
|
||||
<MudDivider Class="pt-4" />
|
||||
|
||||
<MudGrid Class="pr-2 pt-2 pb-2 pl-8" Justify="Justify.FlexStart" Spacing="3">
|
||||
@for (int index = 0; index < ValidationModel.FieldNames.Count; ++index)
|
||||
{
|
||||
var localIndex = index;
|
||||
|
||||
<MudItem xs="12" sm="6" md="6">
|
||||
<CategoryFieldCardComponent Index="localIndex"
|
||||
FieldName="@ValidationModel.FieldNames[localIndex]"
|
||||
FieldDescription="@ValidationModel.FieldDescriptions[localIndex]"
|
||||
OnNameUpdate="HandleNameUpdate"
|
||||
OnDescriptionUpdate="HandleDescriptionUpdate"/>
|
||||
</MudItem>
|
||||
}
|
||||
</MudGrid>
|
||||
</MudForm>
|
||||
</DialogContent>
|
||||
<DialogActions>
|
||||
<MudButton OnClick="Cancel">Cancel</MudButton>
|
||||
<MudButton Color="Color.Primary" OnClick="Submit">OK</MudButton>
|
||||
</DialogActions>
|
||||
</MudDialog>
|
||||
|
||||
@inject IArchiveCategoryProvider CategoryProvider;
|
||||
|
||||
@code {
|
||||
[CascadingParameter]
|
||||
private IMudDialogInstance MudDialog { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public CategoryValidationModel ValidationModel { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public bool IsUpdate { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string OriginalName { get; set; } = string.Empty;
|
||||
|
||||
|
||||
private MudForm _form = default!;
|
||||
private string FormatPreview { get; set; } = string.Empty;
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
if (ValidationModel is null)
|
||||
{
|
||||
ValidationModel = new CategoryValidationModel { NumFields = 1 };
|
||||
} else
|
||||
{
|
||||
ValidationModel.NumFields = ValidationModel.FieldNames.Count;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnNumFieldsChanged(int newCount)
|
||||
{
|
||||
if (newCount < 1) return;
|
||||
ValidationModel.NumFields = newCount;
|
||||
UpdateStateFromModel();
|
||||
}
|
||||
|
||||
private void UpdateStateFromModel()
|
||||
{
|
||||
ValidationModel.FieldNames ??= new List<string>();
|
||||
ValidationModel.FieldDescriptions ??= new List<string>();
|
||||
|
||||
while (ValidationModel.FieldNames.Count < ValidationModel.NumFields)
|
||||
{
|
||||
ValidationModel.FieldNames.Add($"Field {ValidationModel.FieldNames.Count + 1}");
|
||||
}
|
||||
while (ValidationModel.FieldNames.Count > ValidationModel.NumFields)
|
||||
{
|
||||
ValidationModel.FieldNames.RemoveAt(ValidationModel.FieldNames.Count - 1);
|
||||
}
|
||||
|
||||
while (ValidationModel.FieldDescriptions.Count < ValidationModel.NumFields)
|
||||
{
|
||||
ValidationModel.FieldDescriptions.Add("");
|
||||
}
|
||||
while (ValidationModel.FieldDescriptions.Count > ValidationModel.NumFields)
|
||||
{
|
||||
ValidationModel.FieldDescriptions.RemoveAt(ValidationModel.FieldDescriptions.Count - 1);
|
||||
}
|
||||
|
||||
UpdateFormatPreview();
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private void UpdateFormatPreview()
|
||||
{
|
||||
var fieldNames = ValidationModel.FieldNames.Select(name => string.IsNullOrEmpty(name) ? "<...>" : $"<{name}>");
|
||||
FormatPreview = string.Join(ValidationModel.FieldSeparator, fieldNames);
|
||||
}
|
||||
|
||||
private async Task Submit()
|
||||
{
|
||||
await _form.Validate();
|
||||
if (!_form.IsValid) return;
|
||||
|
||||
MudDialog.Close(DialogResult.Ok(ValidationModel));
|
||||
}
|
||||
|
||||
private void Cancel() => MudDialog.Cancel();
|
||||
|
||||
// In your MudDialog component's @code block
|
||||
|
||||
private void HandleNameUpdate((int Index, string NewValue) data)
|
||||
{
|
||||
if (data.Index < ValidationModel.FieldNames.Count)
|
||||
{
|
||||
ValidationModel.FieldNames[data.Index] = data.NewValue;
|
||||
UpdateFormatPreview(); // Update the preview in real-time
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleDescriptionUpdate((int Index, string NewValue) data)
|
||||
{
|
||||
if (data.Index < ValidationModel.FieldDescriptions.Count)
|
||||
{
|
||||
ValidationModel.FieldDescriptions[data.Index] = data.NewValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<MudCard Outlined="true">
|
||||
<MudCardContent>
|
||||
<MudTextField @bind-Value="FieldName"
|
||||
@bind-Value:after="OnNameChanged"
|
||||
Label="Field Name"
|
||||
Variant="Variant.Filled"
|
||||
Immediate="true"
|
||||
/>
|
||||
|
||||
<MudTextField @bind-Value="FieldDescription"
|
||||
@bind-Value:after="OnDescriptionChanged"
|
||||
Label="Field Description"
|
||||
Variant="Variant.Filled"
|
||||
Lines="2"
|
||||
Class="mt-3"
|
||||
Immediate="true"
|
||||
/>
|
||||
</MudCardContent>
|
||||
</MudCard>
|
||||
|
||||
@code {
|
||||
[Parameter] public int Index { get; set; }
|
||||
|
||||
[Parameter] public string FieldName { get; set; } = "";
|
||||
[Parameter] public string FieldDescription { get; set; } = "";
|
||||
|
||||
[Parameter] public EventCallback<(int Index, string NewValue)> OnNameUpdate { get; set; }
|
||||
[Parameter] public EventCallback<(int Index, string NewValue)> OnDescriptionUpdate { get; set; }
|
||||
|
||||
private async Task OnNameChanged()
|
||||
{
|
||||
await OnNameUpdate.InvokeAsync((Index, FieldName));
|
||||
}
|
||||
|
||||
private async Task OnDescriptionChanged()
|
||||
{
|
||||
await OnDescriptionUpdate.InvokeAsync((Index, FieldDescription));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
namespace OpenArchival.Blazor.AdminComponents;
|
||||
|
||||
public class ArtifactGroupingRowElement
|
||||
{
|
||||
public required int Id { get; set; }
|
||||
|
||||
public required string ArtifactGroupingIdentifier { get; set; }
|
||||
|
||||
public required string CategoryName { get; set; }
|
||||
|
||||
public required string Title { get; set; }
|
||||
|
||||
public bool IsPublicallyVisible { get; set; }
|
||||
|
||||
public bool Equals(ArtifactGroupingRowElement? other)
|
||||
{
|
||||
if (other is null) return false;
|
||||
if (ReferenceEquals(this, other)) return true;
|
||||
return Id == other.Id; // Compare based on the unique Id
|
||||
}
|
||||
|
||||
public override bool Equals(object? obj) => Equals(obj as ArtifactGroupingRowElement);
|
||||
|
||||
public override int GetHashCode() => Id.GetHashCode();
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
namespace OpenArchival.Blazor.AdminComponents;
|
||||
|
||||
using Microsoft.IdentityModel.Abstractions;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using OpenArchival.DataAccess;
|
||||
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
public class CategoryValidationModel
|
||||
{
|
||||
public int? DatabaseId { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "Category name is required.")]
|
||||
public string? Name { get; set; }
|
||||
|
||||
public string? Description { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "Field separator is required.")]
|
||||
[StringLength(1, ErrorMessage = "Separator must be a single character.")]
|
||||
public string FieldSeparator { get; set; } = "-";
|
||||
|
||||
[Required(ErrorMessage = "At least one field is needed")]
|
||||
[Range(1, int.MaxValue, ErrorMessage = "At least one field must be created.")]
|
||||
public int NumFields { get; set; } = 1;
|
||||
|
||||
public List<string> FieldNames { get; set; } = [""];
|
||||
|
||||
public List<string> FieldDescriptions { get; set; } = [""];
|
||||
|
||||
public IEnumerable<ValidationResult> Validate(ValidationContext context)
|
||||
{
|
||||
if ((FieldNames is not null && FieldNames.Any()) || (FieldDescriptions is not null && FieldDescriptions.Any()))
|
||||
{
|
||||
yield return new ValidationResult(
|
||||
"Either the FieldNames or FieldDescriptions were null or empty. At least one is required",
|
||||
new[] { nameof(FieldNames), nameof(FieldDescriptions) }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public static CategoryValidationModel FromArchiveCategory(ArchiveCategory category)
|
||||
{
|
||||
return new CategoryValidationModel()
|
||||
{
|
||||
Name = category.Name,
|
||||
Description = category.Description,
|
||||
DatabaseId = category.Id,
|
||||
FieldSeparator = category.FieldSeparator,
|
||||
FieldNames = category.FieldNames,
|
||||
FieldDescriptions = category.FieldDescriptions,
|
||||
};
|
||||
}
|
||||
|
||||
public static ArchiveCategory ToArchiveCategory(CategoryValidationModel model)
|
||||
{
|
||||
return new ArchiveCategory()
|
||||
{
|
||||
Name = model.Name,
|
||||
FieldSeparator = model.FieldSeparator,
|
||||
Description = model.Description,
|
||||
FieldNames = model.FieldNames,
|
||||
FieldDescriptions = model.FieldDescriptions
|
||||
};
|
||||
}
|
||||
|
||||
public static void UpdateArchiveValidationModel(CategoryValidationModel model, ArchiveCategory category)
|
||||
{
|
||||
category.Name = model.Name ?? throw new ArgumentNullException(nameof(model.Name), "The model name was null.");
|
||||
category.Description = model.Description;
|
||||
category.FieldSeparator = model.FieldSeparator;
|
||||
category.FieldNames = model.FieldNames;
|
||||
category.FieldDescriptions = model.FieldDescriptions;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
@page "/categories"
|
||||
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
@using MudBlazor
|
||||
@using OpenArchival.DataAccess;
|
||||
|
||||
@inject IDialogService DialogService
|
||||
@inject IArchiveCategoryProvider CategoryProvider;
|
||||
@inject IDbContextFactory<ApplicationDbContext> DbContextFactory;
|
||||
@inject ILogger<ViewAddCategoriesComponent> Logger;
|
||||
|
||||
<CategoriesListComponent
|
||||
@ref=_categoriesListComponent
|
||||
ListItemClickedCallback="ShowFilledDialog"
|
||||
ShowDeleteButton=true
|
||||
OnDeleteClickedCallback="DeleteCategory">
|
||||
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="OnAddClick">Add Category</MudButton>
|
||||
</CategoriesListComponent>
|
||||
|
||||
|
||||
@code {
|
||||
CategoriesListComponent _categoriesListComponent = default!;
|
||||
|
||||
private async Task DeleteCategory(ArchiveCategory category)
|
||||
{
|
||||
// 1. Show a confirmation dialog (recommended)
|
||||
var confirmed = await DialogService.ShowMessageBox("Confirm", $"Delete {category.Name}?", yesText:"Delete", cancelText:"Cancel");
|
||||
if (confirmed != true) return;
|
||||
|
||||
await CategoryProvider.DeleteCategoryAsync(category);
|
||||
await _categoriesListComponent.RefreshData();
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private async Task ShowFilledDialog(ArchiveCategory category)
|
||||
{
|
||||
CategoryValidationModel validationModel = CategoryValidationModel.FromArchiveCategory(category);
|
||||
|
||||
var parameters = new DialogParameters { ["ValidationModel"] = validationModel, ["IsUpdate"] = true, ["OriginalName"] = category.Name};
|
||||
|
||||
var options = new DialogOptions { CloseOnEscapeKey = true, BackdropClick=false};
|
||||
|
||||
var dialog = await DialogService.ShowAsync<CategoryCreatorDialog>("Create a Category", parameters, options);
|
||||
var result = await dialog.Result;
|
||||
|
||||
if (result is not null && !result.Canceled && _categoriesListComponent is not null)
|
||||
{
|
||||
if (result.Data is null)
|
||||
{
|
||||
Logger.LogError($"The new category received by the result had a null data result member.");
|
||||
throw new NullReferenceException($"The new category received by the result had a null data result member.");
|
||||
}
|
||||
|
||||
CategoryValidationModel model = (CategoryValidationModel)result.Data;
|
||||
CategoryValidationModel.UpdateArchiveValidationModel(model, category);
|
||||
|
||||
await using var context = await DbContextFactory.CreateDbContextAsync();
|
||||
await context.SaveChangesAsync();
|
||||
|
||||
StateHasChanged();
|
||||
await _categoriesListComponent.RefreshData();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task OnAddClick()
|
||||
{
|
||||
var options = new DialogOptions { CloseOnEscapeKey = true, BackdropClick=false };
|
||||
var dialog = await DialogService.ShowAsync<CategoryCreatorDialog>("Create a Category", options);
|
||||
|
||||
var result = await dialog.Result;
|
||||
|
||||
if (result is not null && !result.Canceled && _categoriesListComponent is not null && result.Data is not null)
|
||||
{
|
||||
await using var context = await DbContextFactory.CreateDbContextAsync();
|
||||
CategoryValidationModel model = (CategoryValidationModel)result.Data;
|
||||
context.ArchiveCategories.Add(CategoryValidationModel.ToArchiveCategory(model));
|
||||
|
||||
await context.SaveChangesAsync();
|
||||
StateHasChanged();
|
||||
await _categoriesListComponent.RefreshData();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<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>
|
||||
<ProjectReference Include="..\OpenArchival.Blazor.CustomComponents\OpenArchival.Blazor.CustomComponents.csproj" />
|
||||
<ProjectReference Include="..\OpenArchival.DataAccess\OpenArchival.DataAccess.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
|
||||
@@ -0,0 +1,23 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("OpenArchival.Blazor.AdminComponents")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+781793a27f2e164808340b1adb5ce70e1800b187")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("OpenArchival.Blazor.AdminComponents")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("OpenArchival.Blazor.AdminComponents")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
d6c702980d8ce768dd39ac9044db7e13722a53b6d82b1db84001a96fa1795b07
|
||||
@@ -0,0 +1,61 @@
|
||||
is_global = true
|
||||
build_property.TargetFramework = net9.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = OpenArchival.Blazor.AdminComponents
|
||||
build_property.RootNamespace = OpenArchival.Blazor.AdminComponents
|
||||
build_property.ProjectDir = C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminComponents\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.RazorLangVersion = 9.0
|
||||
build_property.SupportLocalizedComponentNames =
|
||||
build_property.GenerateRazorMetadataSourceChecksumAttributes =
|
||||
build_property.MSBuildProjectDirectory = C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminComponents
|
||||
build_property._RazorSourceGeneratorDebug =
|
||||
build_property.EffectiveAnalysisLevelStyle = 9.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/ArchiveConfiguration.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUNvbmZpZ3VyYXRpb24ucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/ArchiveItems/AddArchiveGroupingComponent.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXEFkZEFyY2hpdmVHcm91cGluZ0NvbXBvbmVudC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/ArchiveItems/AddGroupingDialog.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXEFkZEdyb3VwaW5nRGlhbG9nLnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/ArchiveItems/ArchiveEntryCreatorCard.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXEFyY2hpdmVFbnRyeUNyZWF0b3JDYXJkLnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/ArchiveItems/ArchiveGroupingsTable.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXEFyY2hpdmVHcm91cGluZ3NUYWJsZS5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/ArchiveItems/IdentifierTextBox.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXElkZW50aWZpZXJUZXh0Qm94LnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/Categories/CategoriesListComponent.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q2F0ZWdvcmllc1xDYXRlZ29yaWVzTGlzdENvbXBvbmVudC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/Categories/CategoryCreatorDialog.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q2F0ZWdvcmllc1xDYXRlZ29yeUNyZWF0b3JEaWFsb2cucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/Categories/CategoryFieldCardComponent.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q2F0ZWdvcmllc1xDYXRlZ29yeUZpZWxkQ2FyZENvbXBvbmVudC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/Categories/ViewAddCategoriesComponent.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q2F0ZWdvcmllc1xWaWV3QWRkQ2F0ZWdvcmllc0NvbXBvbmVudC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
@@ -0,0 +1,8 @@
|
||||
// <auto-generated/>
|
||||
global using global::System;
|
||||
global using global::System.Collections.Generic;
|
||||
global using global::System.IO;
|
||||
global using global::System.Linq;
|
||||
global using global::System.Net.Http;
|
||||
global using global::System.Threading;
|
||||
global using global::System.Threading.Tasks;
|
||||
@@ -0,0 +1 @@
|
||||
d5ac7ab69059af111e9d7125adeb7b174ca570725d4b64a544cca7bd11ac7ca0
|
||||
@@ -0,0 +1,18 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute("Microsoft.AspNetCore.Mvc.ApplicationParts.ConsolidatedAssemblyApplicationPartFact" +
|
||||
"ory, Microsoft.AspNetCore.Mvc.Razor")]
|
||||
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
c26e6e8be0dcc89c95ebb12c96c280a82b473997e8e280f4d82776a11a637964
|
||||
@@ -0,0 +1,7 @@
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminComponents\obj\Debug\net9.0\OpenArchival.Blazor.AdminComponents.csproj.AssemblyReference.cache
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminComponents\obj\Debug\net9.0\rpswa.dswa.cache.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminComponents\obj\Debug\net9.0\OpenArchival.Blazor.AdminComponents.GeneratedMSBuildEditorConfig.editorconfig
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminComponents\obj\Debug\net9.0\OpenArchival.Blazor.AdminComponents.AssemblyInfoInputs.cache
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminComponents\obj\Debug\net9.0\OpenArchival.Blazor.AdminComponents.AssemblyInfo.cs
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminComponents\obj\Debug\net9.0\OpenArchival.Blazor.AdminComponents.csproj.CoreCompileInputs.cache
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminComponents\obj\Debug\net9.0\OpenArchival.Blazor.AdminComponents.sourcelink.json
|
||||
@@ -0,0 +1 @@
|
||||
{"documents":{"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\*":"https://raw.githubusercontent.com/vtallen/Open-Archival/781793a27f2e164808340b1adb5ce70e1800b187/*"}}
|
||||
@@ -0,0 +1 @@
|
||||
{"GlobalPropertiesHash":"RcMo5LzxSIOCNCu7lbTmlJrIoAR1WVdGIK4+WGrWvPo=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["QXk5oc0JzooFBqYEdVwSwJAdvQND37MS5tfyc5UXI\u002B0=","FdIr21w0XuwQaHm717YUc2GAhCIM9CX\u002BDOY0\u002Bnnox\u002Bg=","g4RssrHaMNy8RI5sKXNoFfkPgj77256Ar4XmqgWG8Sk=","sfHl\u002BTtl\u002B/Dp5mZDJ\u002B/vdcI76Epl\u002BuPvQPs/KGsyKgg=","t0iPXI/PT10SLjUd9IrFtx8E7x5Km3obwTAL\u002BNKwz4I=","zSCCzXtj6V7SzFECnpbq7y6c8ayqCunsl64t1n1724c=","rTXTHpYV89IUh4tv0q03RoGMVLkWo9dZszTqdLcnFXg=","LkaMxwPm\u002BmOD013lPaQKwsvxlvCIHmjZOn4mFw69d9M=","gQxgQC2M5p5VkN9CbAm45xBqNdmu9Qk9Er4QPIi2UbM=","AisFpM0rBaG4l/\u002BvkfzsVGuG3nbW6CwkQi8v8zur8FA="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
@@ -0,0 +1,268 @@
|
||||
{
|
||||
"format": 1,
|
||||
"restore": {
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminComponents\\OpenArchival.Blazor.AdminComponents.csproj": {}
|
||||
},
|
||||
"projects": {
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminComponents\\OpenArchival.Blazor.AdminComponents.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminComponents\\OpenArchival.Blazor.AdminComponents.csproj",
|
||||
"projectName": "OpenArchival.Blazor.AdminComponents",
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminComponents\\OpenArchival.Blazor.AdminComponents.csproj",
|
||||
"packagesPath": "C:\\Users\\vtall\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminComponents\\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.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",
|
||||
"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.CustomComponents\\OpenArchival.Blazor.CustomComponents.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\OpenArchival.Blazor.CustomComponents.csproj",
|
||||
"projectName": "OpenArchival.Blazor.CustomComponents",
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\OpenArchival.Blazor.CustomComponents.csproj",
|
||||
"packagesPath": "C:\\Users\\vtall\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\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.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.MudBlazor.Extensions": {
|
||||
"target": "Package",
|
||||
"version": "[8.2.4, )"
|
||||
},
|
||||
"MudBlazor": {
|
||||
"target": "Package",
|
||||
"version": "[8.12.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.DataAccess\\OpenArchival.DataAccess.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj",
|
||||
"projectName": "OpenArchival.DataAccess",
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj",
|
||||
"packagesPath": "C:\\Users\\vtall\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\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": {}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "direct"
|
||||
},
|
||||
"SdkAnalysisLevel": "9.0.300"
|
||||
},
|
||||
"frameworks": {
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"dependencies": {
|
||||
"EntityFramework": {
|
||||
"target": "Package",
|
||||
"version": "[6.5.1, )"
|
||||
},
|
||||
"Microsoft.AspNetCore.Identity.EntityFrameworkCore": {
|
||||
"target": "Package",
|
||||
"version": "[9.0.8, )"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore": {
|
||||
"target": "Package",
|
||||
"version": "[9.0.8, )"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Design": {
|
||||
"include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive",
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[9.0.8, )"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": {
|
||||
"target": "Package",
|
||||
"version": "[9.0.8, )"
|
||||
},
|
||||
"Npgsql": {
|
||||
"target": "Package",
|
||||
"version": "[9.0.3, )"
|
||||
},
|
||||
"Npgsql.EntityFrameworkCore.PostgreSQL": {
|
||||
"target": "Package",
|
||||
"version": "[9.0.4, )"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
|
||||
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
||||
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
||||
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
|
||||
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\vtall\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
|
||||
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
||||
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.14.1</NuGetToolVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<SourceRoot Include="C:\Users\vtall\.nuget\packages\" />
|
||||
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
|
||||
</ItemGroup>
|
||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore\9.0.8\buildTransitive\net8.0\Microsoft.EntityFrameworkCore.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore\9.0.8\buildTransitive\net8.0\Microsoft.EntityFrameworkCore.props')" />
|
||||
<Import Project="$(NuGetPackageRoot)entityframework\6.5.1\buildTransitive\net6.0\EntityFramework.props" Condition="Exists('$(NuGetPackageRoot)entityframework\6.5.1\buildTransitive\net6.0\EntityFramework.props')" />
|
||||
<Import Project="$(NuGetPackageRoot)mudblazor\8.12.0\buildTransitive\MudBlazor.props" Condition="Exists('$(NuGetPackageRoot)mudblazor\8.12.0\buildTransitive\MudBlazor.props')" />
|
||||
<Import Project="$(NuGetPackageRoot)codebeam.mudblazor.extensions\8.2.4\buildTransitive\CodeBeam.MudBlazor.Extensions.props" Condition="Exists('$(NuGetPackageRoot)codebeam.mudblazor.extensions\8.2.4\buildTransitive\CodeBeam.MudBlazor.Extensions.props')" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<PkgEntityFramework Condition=" '$(PkgEntityFramework)' == '' ">C:\Users\vtall\.nuget\packages\entityframework\6.5.1</PkgEntityFramework>
|
||||
<PkgBuildBundlerMinifier Condition=" '$(PkgBuildBundlerMinifier)' == '' ">C:\Users\vtall\.nuget\packages\buildbundlerminifier\3.2.449</PkgBuildBundlerMinifier>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\9.0.8\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\9.0.8\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\9.0.8\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\9.0.8\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)entityframework\6.5.1\buildTransitive\net6.0\EntityFramework.targets" Condition="Exists('$(NuGetPackageRoot)entityframework\6.5.1\buildTransitive\net6.0\EntityFramework.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.components.analyzers\9.0.7\buildTransitive\netstandard2.0\Microsoft.AspNetCore.Components.Analyzers.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.components.analyzers\9.0.7\buildTransitive\netstandard2.0\Microsoft.AspNetCore.Components.Analyzers.targets')" />
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
|
||||
@@ -0,0 +1,23 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("OpenArchival.Blazor.AdminComponents")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+781793a27f2e164808340b1adb5ce70e1800b187")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("OpenArchival.Blazor.AdminComponents")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("OpenArchival.Blazor.AdminComponents")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
d50caa8352c298607a0de8c3bbd9699415b1177ccb100bf2c5e920acaf251772
|
||||
@@ -0,0 +1,61 @@
|
||||
is_global = true
|
||||
build_property.TargetFramework = net9.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = OpenArchival.Blazor.AdminComponents
|
||||
build_property.RootNamespace = OpenArchival.Blazor.AdminComponents
|
||||
build_property.ProjectDir = C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminComponents\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.RazorLangVersion = 9.0
|
||||
build_property.SupportLocalizedComponentNames =
|
||||
build_property.GenerateRazorMetadataSourceChecksumAttributes =
|
||||
build_property.MSBuildProjectDirectory = C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.AdminComponents
|
||||
build_property._RazorSourceGeneratorDebug =
|
||||
build_property.EffectiveAnalysisLevelStyle = 9.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/ArchiveConfiguration.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUNvbmZpZ3VyYXRpb24ucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/ArchiveItems/AddArchiveGroupingComponent.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXEFkZEFyY2hpdmVHcm91cGluZ0NvbXBvbmVudC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/ArchiveItems/AddGroupingDialog.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXEFkZEdyb3VwaW5nRGlhbG9nLnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/ArchiveItems/ArchiveEntryCreatorCard.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXEFyY2hpdmVFbnRyeUNyZWF0b3JDYXJkLnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/ArchiveItems/ArchiveGroupingsTable.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXEFyY2hpdmVHcm91cGluZ3NUYWJsZS5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/ArchiveItems/IdentifierTextBox.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJjaGl2ZUl0ZW1zXElkZW50aWZpZXJUZXh0Qm94LnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/Categories/CategoriesListComponent.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q2F0ZWdvcmllc1xDYXRlZ29yaWVzTGlzdENvbXBvbmVudC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/Categories/CategoryCreatorDialog.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q2F0ZWdvcmllc1xDYXRlZ29yeUNyZWF0b3JEaWFsb2cucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/Categories/CategoryFieldCardComponent.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q2F0ZWdvcmllc1xDYXRlZ29yeUZpZWxkQ2FyZENvbXBvbmVudC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.AdminComponents/Categories/ViewAddCategoriesComponent.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q2F0ZWdvcmllc1xWaWV3QWRkQ2F0ZWdvcmllc0NvbXBvbmVudC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
@@ -0,0 +1,8 @@
|
||||
// <auto-generated/>
|
||||
global using global::System;
|
||||
global using global::System.Collections.Generic;
|
||||
global using global::System.IO;
|
||||
global using global::System.Linq;
|
||||
global using global::System.Net.Http;
|
||||
global using global::System.Threading;
|
||||
global using global::System.Threading.Tasks;
|
||||
@@ -0,0 +1 @@
|
||||
d5ac7ab69059af111e9d7125adeb7b174ca570725d4b64a544cca7bd11ac7ca0
|
||||
@@ -0,0 +1,18 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute("Microsoft.AspNetCore.Mvc.ApplicationParts.ConsolidatedAssemblyApplicationPartFact" +
|
||||
"ory, Microsoft.AspNetCore.Mvc.Razor")]
|
||||
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
2593
old/OpenArchival.Blazor.AdminComponents/obj/project.assets.json
Normal file
2593
old/OpenArchival.Blazor.AdminComponents/obj/project.assets.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "FUnZ4Gld9dY=",
|
||||
"success": true,
|
||||
"projectFilePath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.AdminComponents\\OpenArchival.Blazor.AdminComponents.csproj",
|
||||
"expectedPackageFiles": [
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\buildbundlerminifier\\3.2.449\\buildbundlerminifier.3.2.449.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\codebeam.mudblazor.extensions\\8.2.4\\codebeam.mudblazor.extensions.8.2.4.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\csvhelper\\33.0.1\\csvhelper.33.0.1.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\entityframework\\6.5.1\\entityframework.6.5.1.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.aspnetcore.authorization\\9.0.7\\microsoft.aspnetcore.authorization.9.0.7.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.aspnetcore.components\\9.0.7\\microsoft.aspnetcore.components.9.0.7.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.aspnetcore.components.analyzers\\9.0.7\\microsoft.aspnetcore.components.analyzers.9.0.7.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.aspnetcore.components.forms\\9.0.7\\microsoft.aspnetcore.components.forms.9.0.7.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.aspnetcore.components.web\\9.0.7\\microsoft.aspnetcore.components.web.9.0.7.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.aspnetcore.cryptography.internal\\9.0.8\\microsoft.aspnetcore.cryptography.internal.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.aspnetcore.cryptography.keyderivation\\9.0.8\\microsoft.aspnetcore.cryptography.keyderivation.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.aspnetcore.identity.entityframeworkcore\\9.0.8\\microsoft.aspnetcore.identity.entityframeworkcore.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.aspnetcore.metadata\\9.0.7\\microsoft.aspnetcore.metadata.9.0.7.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.csharp\\4.7.0\\microsoft.csharp.4.7.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.entityframeworkcore\\9.0.8\\microsoft.entityframeworkcore.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.entityframeworkcore.abstractions\\9.0.8\\microsoft.entityframeworkcore.abstractions.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.entityframeworkcore.analyzers\\9.0.8\\microsoft.entityframeworkcore.analyzers.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.entityframeworkcore.relational\\9.0.8\\microsoft.entityframeworkcore.relational.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.extensions.caching.abstractions\\9.0.8\\microsoft.extensions.caching.abstractions.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.extensions.caching.memory\\9.0.8\\microsoft.extensions.caching.memory.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\9.0.8\\microsoft.extensions.configuration.abstractions.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\9.0.8\\microsoft.extensions.dependencyinjection.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\9.0.8\\microsoft.extensions.dependencyinjection.abstractions.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.extensions.identity.core\\9.0.8\\microsoft.extensions.identity.core.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.extensions.identity.stores\\9.0.8\\microsoft.extensions.identity.stores.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.extensions.localization\\9.0.1\\microsoft.extensions.localization.9.0.1.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.extensions.localization.abstractions\\9.0.1\\microsoft.extensions.localization.abstractions.9.0.1.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.extensions.logging\\9.0.8\\microsoft.extensions.logging.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\9.0.8\\microsoft.extensions.logging.abstractions.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.extensions.options\\9.0.8\\microsoft.extensions.options.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.extensions.primitives\\9.0.8\\microsoft.extensions.primitives.9.0.8.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.jsinterop\\9.0.7\\microsoft.jsinterop.9.0.7.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.win32.registry\\4.7.0\\microsoft.win32.registry.4.7.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\microsoft.win32.systemevents\\6.0.0\\microsoft.win32.systemevents.6.0.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\mudblazor\\8.12.0\\mudblazor.8.12.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\npgsql\\9.0.3\\npgsql.9.0.3.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\npgsql.entityframeworkcore.postgresql\\9.0.4\\npgsql.entityframeworkcore.postgresql.9.0.4.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\runtime.native.system.data.sqlclient.sni\\4.7.0\\runtime.native.system.data.sqlclient.sni.4.7.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\runtime.win-arm64.runtime.native.system.data.sqlclient.sni\\4.4.0\\runtime.win-arm64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\runtime.win-x64.runtime.native.system.data.sqlclient.sni\\4.4.0\\runtime.win-x64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\runtime.win-x86.runtime.native.system.data.sqlclient.sni\\4.4.0\\runtime.win-x86.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\system.codedom\\6.0.0\\system.codedom.6.0.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\system.componentmodel.annotations\\5.0.0\\system.componentmodel.annotations.5.0.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\system.configuration.configurationmanager\\6.0.1\\system.configuration.configurationmanager.6.0.1.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\system.data.sqlclient\\4.8.6\\system.data.sqlclient.4.8.6.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\system.drawing.common\\6.0.0\\system.drawing.common.6.0.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\system.security.accesscontrol\\6.0.0\\system.security.accesscontrol.6.0.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\system.security.cryptography.protecteddata\\6.0.0\\system.security.cryptography.protecteddata.6.0.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\system.security.permissions\\6.0.0\\system.security.permissions.6.0.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\system.security.principal.windows\\4.7.0\\system.security.principal.windows.4.7.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\system.windows.extensions\\6.0.0\\system.windows.extensions.6.0.0.nupkg.sha512",
|
||||
"C:\\Users\\vtall\\.nuget\\packages\\zxing.net\\0.16.9\\zxing.net.0.16.9.nupkg.sha512"
|
||||
],
|
||||
"logs": []
|
||||
}
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
82
old/OpenArchival.Blazor.CustomComponents/ChipContainer.razor
Normal file
82
old/OpenArchival.Blazor.CustomComponents/ChipContainer.razor
Normal file
@@ -0,0 +1,82 @@
|
||||
@* ChipContainer.razor *@
|
||||
@typeparam T
|
||||
|
||||
<div class="d-flex flex-wrap ga-2 align-center">
|
||||
@* Loop through and display each item as a chip *@
|
||||
@foreach (var item in Items)
|
||||
{
|
||||
<MudChip Color="Color.Primary" OnClose="() => RemoveItem(item)" T="T">
|
||||
@DisplayFunc(item)
|
||||
</MudChip>
|
||||
}
|
||||
|
||||
@* Render the input control provided by the consumer *@
|
||||
<div style="min-width: 150px;">
|
||||
@if (InputContent is not null)
|
||||
{
|
||||
@InputContent(this)
|
||||
}
|
||||
</div>
|
||||
|
||||
@SubmitButton
|
||||
</div>
|
||||
|
||||
@code {
|
||||
/// <summary>
|
||||
/// The list of items to display and manage.
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public required List<T> Items { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// Required for two-way binding (@bind-Items).
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public EventCallback<List<T>> ItemsChanged { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The RenderFragment that defines the custom input control.
|
||||
/// The 'context' is a reference to this component instance.
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public RenderFragment<ChipContainer<T>>? InputContent { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment SubmitButton { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// A function to convert an item of type T to a string for display in the chip.
|
||||
/// Defaults to item.ToString().
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public Func<T, string> DisplayFunc { get; set; } = item => item?.ToString() ?? string.Empty;
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A public method that the consumer's input control can call to add a new item.
|
||||
/// </summary>
|
||||
public async Task AddItem(T item)
|
||||
{
|
||||
if (item is null || (item is string str && string.IsNullOrWhiteSpace(str)))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Add the item if it doesn't already exist
|
||||
if (!Items.Contains(item))
|
||||
{
|
||||
Items.Add(item);
|
||||
await ItemsChanged.InvokeAsync(Items);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes an item from the list when the chip's close icon is clicked.
|
||||
/// </summary>
|
||||
private async Task RemoveItem(T item)
|
||||
{
|
||||
Items.Remove(item);
|
||||
await ItemsChanged.InvokeAsync(Items);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace OpenArchival.Blazor.CustomComponents;
|
||||
|
||||
public class FileUploadOptions
|
||||
{
|
||||
public static string Key = "FileUploadOptions";
|
||||
public required long MaxUploadSizeBytes { get; set; }
|
||||
public required string UploadFolderPath { get; set; }
|
||||
|
||||
public required int MaxFileCount { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<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="CodeBeam.MudBlazor.Extensions" Version="8.2.4" />
|
||||
<PackageReference Include="MudBlazor" Version="8.12.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\OpenArchival.DataAccess\OpenArchival.DataAccess.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
|
||||
</Project>
|
||||
252
old/OpenArchival.Blazor.CustomComponents/UploadDropBox.razor
Normal file
252
old/OpenArchival.Blazor.CustomComponents/UploadDropBox.razor
Normal file
@@ -0,0 +1,252 @@
|
||||
@using Microsoft.AspNetCore.Components.Forms
|
||||
@using Microsoft.Extensions.Logging
|
||||
@using Microsoft.Extensions.Options
|
||||
@using MudBlazor
|
||||
@using OpenArchival.DataAccess;
|
||||
|
||||
<style>
|
||||
.file-upload-input {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
z-index: 10;
|
||||
opacity: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<MudStack Style="width: 100%">
|
||||
<MudFileUpload T="IReadOnlyList<IBrowserFile>"
|
||||
@ref="@_fileUpload"
|
||||
OnFilesChanged="OnInputFileChanged"
|
||||
AppendMultipleFiles=true
|
||||
MaximumFileCount="_options.Value.MaxFileCount"
|
||||
Hidden="@false"
|
||||
InputClass="file-upload-input"
|
||||
tabindex="-1"
|
||||
@ondrop="@ClearDragClass"
|
||||
@ondragenter="@SetDragClass"
|
||||
@ondragleave="@ClearDragClass"
|
||||
@ondragend="@ClearDragClass">
|
||||
<ActivatorContent>
|
||||
<MudPaper Outlined="true"
|
||||
Class="@_dragClass"
|
||||
Style="height: 150px; display: flex; flex-direction: column; position: relative;">
|
||||
|
||||
<div class="d-flex align-center justify-center pa-4" style="flex-shrink: 0;">
|
||||
<MudText Typo="Typo.h6">
|
||||
Drag and drop files here or click
|
||||
</MudText>
|
||||
</div>
|
||||
|
||||
</MudPaper>
|
||||
</ActivatorContent>
|
||||
</MudFileUpload>
|
||||
@if (Files.Any() || ExistingFiles.Any())
|
||||
{
|
||||
<MudPaper Style="max-height: 150px; overflow-y: auto;" Outlined="true" Class="pa-4">
|
||||
@foreach (var file in Files)
|
||||
{
|
||||
var color = _fileToDiskFileName.Keys.Contains(file) ? Color.Success : Color.Warning;
|
||||
<MudChip T="string"
|
||||
Color="@color"
|
||||
Text="@file.Name"
|
||||
tabindex="-1" />
|
||||
}
|
||||
|
||||
@foreach (var filelisting in ExistingFiles)
|
||||
{
|
||||
<MudChip T="string"
|
||||
Color="@Color.Success"
|
||||
Text="@filelisting.OriginalName"
|
||||
tabindex="-1" />
|
||||
}
|
||||
</MudPaper>
|
||||
}
|
||||
|
||||
<MudToolBar Gutters="@false"
|
||||
Class="relative d-flex justify-end gap-4">
|
||||
<MudButton Color="Color.Primary"
|
||||
OnClick="@OpenFilePickerAsync"
|
||||
Variant="Variant.Filled">
|
||||
Open file picker
|
||||
</MudButton>
|
||||
<MudButton Color="Color.Primary"
|
||||
Disabled="@(!Files.Any())"
|
||||
OnClick="@Upload"
|
||||
Variant="Variant.Filled">
|
||||
Upload
|
||||
</MudButton>
|
||||
<MudButton Color="Color.Error"
|
||||
Disabled="@(!Files.Any())"
|
||||
OnClick="@ClearAsync"
|
||||
Variant="Variant.Filled">
|
||||
Clear
|
||||
</MudButton>
|
||||
</MudToolBar>
|
||||
|
||||
@if (Files.Count != _fileToDiskFileName.Count)
|
||||
{
|
||||
<MudText Color="Color.Error" Align="Align.Right">*Files must be uploaded</MudText>
|
||||
}
|
||||
</MudStack>
|
||||
|
||||
@inject IOptions<FileUploadOptions> _options;
|
||||
@inject IFilePathListingProvider PathProvider;
|
||||
@inject ISnackbar Snackbar;
|
||||
@inject ILogger<UploadDropBox> _logger;
|
||||
|
||||
@code {
|
||||
private const string DefaultDragClass = "relative rounded-lg border-2 border-dashed pa-4 mt-4 mud-width-full mud-height-full";
|
||||
|
||||
private string _dragClass = DefaultDragClass;
|
||||
|
||||
public readonly List<IBrowserFile> Files = new();
|
||||
|
||||
private readonly Dictionary<IBrowserFile, string> _fileToDiskFileName = new();
|
||||
|
||||
private MudFileUpload<IReadOnlyList<IBrowserFile>>? _fileUpload;
|
||||
|
||||
public int SelectedFileCount { get => Files.Count; }
|
||||
|
||||
public bool UploadsComplete { get; set; } = true;
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<List<FilePathListing>> FilesUploaded {get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback ClearClicked { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public List<FilePathListing> ExistingFiles { get; set; } = new();
|
||||
|
||||
protected override Task OnParametersSetAsync()
|
||||
{
|
||||
StateHasChanged();
|
||||
return base.OnParametersSetAsync();
|
||||
}
|
||||
|
||||
private async Task ClearAsync()
|
||||
{
|
||||
foreach (var pair in _fileToDiskFileName)
|
||||
{
|
||||
try
|
||||
{
|
||||
FileInfo targetFile = new(pair.Value);
|
||||
if (targetFile.Exists)
|
||||
{
|
||||
targetFile.Delete();
|
||||
}
|
||||
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)
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
private Task OpenFilePickerAsync()
|
||||
=> _fileUpload?.OpenFilePickerAsync() ?? Task.CompletedTask;
|
||||
|
||||
private void OnInputFileChanged(InputFileChangeEventArgs e)
|
||||
{
|
||||
ClearDragClass();
|
||||
var files = e.GetMultipleFiles(maximumFileCount: _options.Value.MaxFileCount);
|
||||
Files.AddRange(files);
|
||||
|
||||
UploadsComplete = false;
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private async Task Upload()
|
||||
{
|
||||
if (!Files.Any())
|
||||
{
|
||||
Snackbar.Add("No files to upload.", Severity.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
Snackbar.Configuration.PositionClass = Defaults.Classes.Position.TopCenter;
|
||||
|
||||
List<FilePathListing> fileListings = [];
|
||||
foreach (var file in Files)
|
||||
{
|
||||
if (_fileToDiskFileName.ContainsKey(file)) continue;
|
||||
try
|
||||
{
|
||||
var diskFileName = $"{Guid.NewGuid()}{Path.GetExtension(file.Name)}";
|
||||
var destinationPath = Path.Combine(_options.Value.UploadFolderPath, diskFileName);
|
||||
|
||||
await using var browserUploadStream = file.OpenReadStream(maxAllowedSize: _options.Value.MaxUploadSizeBytes);
|
||||
await using var outFileStream = new FileStream(destinationPath, FileMode.Create);
|
||||
|
||||
await browserUploadStream.CopyToAsync(outFileStream);
|
||||
|
||||
_fileToDiskFileName.Add(file, destinationPath);
|
||||
|
||||
var fileListing = new FilePathListing() { Path = destinationPath, OriginalName = Path.GetFileName(file.Name) };
|
||||
fileListings.Add(fileListing);
|
||||
await PathProvider.CreateFilePathListingAsync(fileListing);
|
||||
|
||||
Snackbar.Add($"Uploaded {file.Name}", Severity.Success);
|
||||
|
||||
UploadsComplete = true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Snackbar.Add($"Error uploading file {file.Name}: {ex.Message}", Severity.Error);
|
||||
}
|
||||
}
|
||||
|
||||
await FilesUploaded.InvokeAsync(fileListings);
|
||||
}
|
||||
|
||||
private void SetDragClass()
|
||||
=> _dragClass = $"{DefaultDragClass} mud-border-primary";
|
||||
|
||||
private void ClearDragClass()
|
||||
=> _dragClass = DefaultDragClass;
|
||||
|
||||
public void RemoveFile(string filename)
|
||||
{
|
||||
var existingFile = ExistingFiles.Where(f => f.OriginalName == filename).FirstOrDefault();
|
||||
if (existingFile is not null)
|
||||
{
|
||||
ExistingFiles.Remove(existingFile);
|
||||
}
|
||||
|
||||
var file = Files.Where(f => f.Name == filename).FirstOrDefault();
|
||||
if (file is not null)
|
||||
{
|
||||
Files.Remove(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,965 @@
|
||||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v9.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v9.0": {
|
||||
"OpenArchival.Blazor.CustomComponents/1.0.0": {
|
||||
"dependencies": {
|
||||
"CodeBeam.MudBlazor.Extensions": "8.2.4",
|
||||
"MudBlazor": "8.12.0",
|
||||
"OpenArchival.DataAccess": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"OpenArchival.Blazor.CustomComponents.dll": {}
|
||||
}
|
||||
},
|
||||
"BuildBundlerMinifier/3.2.449": {},
|
||||
"CodeBeam.MudBlazor.Extensions/8.2.4": {
|
||||
"dependencies": {
|
||||
"BuildBundlerMinifier": "3.2.449",
|
||||
"CsvHelper": "33.0.1",
|
||||
"Microsoft.AspNetCore.Components": "9.0.7",
|
||||
"Microsoft.AspNetCore.Components.Web": "9.0.7",
|
||||
"MudBlazor": "8.12.0",
|
||||
"ZXing.Net": "0.16.9"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/CodeBeam.MudBlazor.Extensions.dll": {
|
||||
"assemblyVersion": "8.2.4.0",
|
||||
"fileVersion": "8.2.4.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"CsvHelper/33.0.1": {
|
||||
"runtime": {
|
||||
"lib/net8.0/CsvHelper.dll": {
|
||||
"assemblyVersion": "33.0.0.0",
|
||||
"fileVersion": "33.0.1.24"
|
||||
}
|
||||
}
|
||||
},
|
||||
"EntityFramework/6.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.CSharp": "4.7.0",
|
||||
"System.CodeDom": "6.0.0",
|
||||
"System.ComponentModel.Annotations": "5.0.0",
|
||||
"System.Configuration.ConfigurationManager": "6.0.1",
|
||||
"System.Data.SqlClient": "4.8.6"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/EntityFramework.SqlServer.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.500.124.31603"
|
||||
},
|
||||
"lib/netstandard2.1/EntityFramework.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.500.124.31603"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Authorization/9.0.7": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Metadata": "9.0.7",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.8",
|
||||
"Microsoft.Extensions.Options": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.AspNetCore.Authorization.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.725.31702"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Components/9.0.7": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Authorization": "9.0.7",
|
||||
"Microsoft.AspNetCore.Components.Analyzers": "9.0.7"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.AspNetCore.Components.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.725.31702"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Components.Analyzers/9.0.7": {},
|
||||
"Microsoft.AspNetCore.Components.Forms/9.0.7": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Components": "9.0.7"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.AspNetCore.Components.Forms.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.725.31702"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Components.Web/9.0.7": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Components": "9.0.7",
|
||||
"Microsoft.AspNetCore.Components.Forms": "9.0.7",
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.8",
|
||||
"Microsoft.Extensions.Primitives": "9.0.8",
|
||||
"Microsoft.JSInterop": "9.0.7"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.AspNetCore.Components.Web.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.725.31702"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Cryptography.Internal/9.0.8": {
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.AspNetCore.Cryptography.Internal.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.825.36808"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Cryptography.KeyDerivation/9.0.8": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Cryptography.Internal": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.825.36808"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Identity.EntityFrameworkCore/9.0.8": {
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore.Relational": "9.0.8",
|
||||
"Microsoft.Extensions.Identity.Stores": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll": {
|
||||
"assemblyVersion": "9.0.8.0",
|
||||
"fileVersion": "9.0.825.36808"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Metadata/9.0.7": {
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.AspNetCore.Metadata.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.725.31702"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.CSharp/4.7.0": {},
|
||||
"Microsoft.EntityFrameworkCore/9.0.8": {
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore.Abstractions": "9.0.8",
|
||||
"Microsoft.EntityFrameworkCore.Analyzers": "9.0.8",
|
||||
"Microsoft.Extensions.Caching.Memory": "9.0.8",
|
||||
"Microsoft.Extensions.Logging": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.EntityFrameworkCore.dll": {
|
||||
"assemblyVersion": "9.0.8.0",
|
||||
"fileVersion": "9.0.825.36802"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Abstractions/9.0.8": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
|
||||
"assemblyVersion": "9.0.8.0",
|
||||
"fileVersion": "9.0.825.36802"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Analyzers/9.0.8": {},
|
||||
"Microsoft.EntityFrameworkCore.Relational/9.0.8": {
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore": "9.0.8",
|
||||
"Microsoft.Extensions.Caching.Memory": "9.0.8",
|
||||
"Microsoft.Extensions.Configuration.Abstractions": "9.0.8",
|
||||
"Microsoft.Extensions.Logging": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": {
|
||||
"assemblyVersion": "9.0.8.0",
|
||||
"fileVersion": "9.0.825.36802"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Abstractions/9.0.8": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.825.36511"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Memory/9.0.8": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Caching.Abstractions": "9.0.8",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.8",
|
||||
"Microsoft.Extensions.Options": "9.0.8",
|
||||
"Microsoft.Extensions.Primitives": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Extensions.Caching.Memory.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.825.36511"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions/9.0.8": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.825.36511"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection/9.0.8": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Extensions.DependencyInjection.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.825.36511"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/9.0.8": {
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.825.36511"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Identity.Core/9.0.8": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Cryptography.KeyDerivation": "9.0.8",
|
||||
"Microsoft.Extensions.Logging": "9.0.8",
|
||||
"Microsoft.Extensions.Options": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Extensions.Identity.Core.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.825.36808"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Identity.Stores/9.0.8": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Caching.Abstractions": "9.0.8",
|
||||
"Microsoft.Extensions.Identity.Core": "9.0.8",
|
||||
"Microsoft.Extensions.Logging": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Extensions.Identity.Stores.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.825.36808"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Localization/9.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8",
|
||||
"Microsoft.Extensions.Localization.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.8",
|
||||
"Microsoft.Extensions.Options": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Extensions.Localization.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.124.61009"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Localization.Abstractions/9.0.1": {
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Extensions.Localization.Abstractions.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.124.61009"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging/9.0.8": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.8",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.8",
|
||||
"Microsoft.Extensions.Options": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Extensions.Logging.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.825.36511"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/9.0.8": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.825.36511"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Options/9.0.8": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8",
|
||||
"Microsoft.Extensions.Primitives": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Extensions.Options.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.825.36511"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/9.0.8": {
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Extensions.Primitives.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.825.36511"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.JSInterop/9.0.7": {
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.JSInterop.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.725.31702"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Win32.Registry/4.7.0": {
|
||||
"dependencies": {
|
||||
"System.Security.AccessControl": "6.0.0",
|
||||
"System.Security.Principal.Windows": "4.7.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Win32.SystemEvents/6.0.0": {
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.Win32.SystemEvents.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/win/lib/net6.0/Microsoft.Win32.SystemEvents.dll": {
|
||||
"rid": "win",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"MudBlazor/8.12.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Components": "9.0.7",
|
||||
"Microsoft.AspNetCore.Components.Web": "9.0.7",
|
||||
"Microsoft.Extensions.Localization": "9.0.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/MudBlazor.dll": {
|
||||
"assemblyVersion": "8.12.0.0",
|
||||
"fileVersion": "8.12.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Npgsql/9.0.3": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.8"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Npgsql.dll": {
|
||||
"assemblyVersion": "9.0.3.0",
|
||||
"fileVersion": "9.0.3.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Npgsql.EntityFrameworkCore.PostgreSQL/9.0.4": {
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore": "9.0.8",
|
||||
"Microsoft.EntityFrameworkCore.Relational": "9.0.8",
|
||||
"Npgsql": "9.0.3"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll": {
|
||||
"assemblyVersion": "9.0.4.0",
|
||||
"fileVersion": "9.0.4.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
|
||||
"dependencies": {
|
||||
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
|
||||
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
|
||||
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0"
|
||||
}
|
||||
},
|
||||
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||
"runtimeTargets": {
|
||||
"runtimes/win-arm64/native/sni.dll": {
|
||||
"rid": "win-arm64",
|
||||
"assetType": "native",
|
||||
"fileVersion": "4.6.25512.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||
"runtimeTargets": {
|
||||
"runtimes/win-x64/native/sni.dll": {
|
||||
"rid": "win-x64",
|
||||
"assetType": "native",
|
||||
"fileVersion": "4.6.25512.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||
"runtimeTargets": {
|
||||
"runtimes/win-x86/native/sni.dll": {
|
||||
"rid": "win-x86",
|
||||
"assetType": "native",
|
||||
"fileVersion": "4.6.25512.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.CodeDom/6.0.0": {
|
||||
"runtime": {
|
||||
"lib/net6.0/System.CodeDom.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.ComponentModel.Annotations/5.0.0": {},
|
||||
"System.Configuration.ConfigurationManager/6.0.1": {
|
||||
"dependencies": {
|
||||
"System.Security.Cryptography.ProtectedData": "6.0.0",
|
||||
"System.Security.Permissions": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Configuration.ConfigurationManager.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.922.41905"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Data.SqlClient/4.8.6": {
|
||||
"dependencies": {
|
||||
"Microsoft.Win32.Registry": "4.7.0",
|
||||
"System.Security.Principal.Windows": "4.7.0",
|
||||
"runtime.native.System.Data.SqlClient.sni": "4.7.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netcoreapp2.1/System.Data.SqlClient.dll": {
|
||||
"assemblyVersion": "4.6.1.6",
|
||||
"fileVersion": "4.700.23.52603"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/unix/lib/netcoreapp2.1/System.Data.SqlClient.dll": {
|
||||
"rid": "unix",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "4.6.1.6",
|
||||
"fileVersion": "4.700.23.52603"
|
||||
},
|
||||
"runtimes/win/lib/netcoreapp2.1/System.Data.SqlClient.dll": {
|
||||
"rid": "win",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "4.6.1.6",
|
||||
"fileVersion": "4.700.23.52603"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Drawing.Common/6.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Win32.SystemEvents": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Drawing.Common.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/unix/lib/net6.0/System.Drawing.Common.dll": {
|
||||
"rid": "unix",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
},
|
||||
"runtimes/win/lib/net6.0/System.Drawing.Common.dll": {
|
||||
"rid": "win",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.AccessControl/6.0.0": {},
|
||||
"System.Security.Cryptography.ProtectedData/6.0.0": {
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Security.Cryptography.ProtectedData.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/win/lib/net6.0/System.Security.Cryptography.ProtectedData.dll": {
|
||||
"rid": "win",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.Permissions/6.0.0": {
|
||||
"dependencies": {
|
||||
"System.Security.AccessControl": "6.0.0",
|
||||
"System.Windows.Extensions": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Security.Permissions.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.Principal.Windows/4.7.0": {},
|
||||
"System.Windows.Extensions/6.0.0": {
|
||||
"dependencies": {
|
||||
"System.Drawing.Common": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/System.Windows.Extensions.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/win/lib/net6.0/System.Windows.Extensions.dll": {
|
||||
"rid": "win",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ZXing.Net/0.16.9": {
|
||||
"runtime": {
|
||||
"lib/net7.0/zxing.dll": {
|
||||
"assemblyVersion": "0.16.9.0",
|
||||
"fileVersion": "0.16.9.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenArchival.DataAccess/1.0.0": {
|
||||
"dependencies": {
|
||||
"EntityFramework": "6.5.1",
|
||||
"Microsoft.AspNetCore.Identity.EntityFrameworkCore": "9.0.8",
|
||||
"Microsoft.EntityFrameworkCore": "9.0.8",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8",
|
||||
"Npgsql": "9.0.3",
|
||||
"Npgsql.EntityFrameworkCore.PostgreSQL": "9.0.4"
|
||||
},
|
||||
"runtime": {
|
||||
"OpenArchival.DataAccess.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"OpenArchival.Blazor.CustomComponents/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"BuildBundlerMinifier/3.2.449": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-uA9sYDy4VepL3xwzBTLcP2LyuVYMt0ZIT3gaSiXvGoX15Ob+rOP+hGydhevlSVd+rFo+Y+VQFEHDuWU8HBW+XA==",
|
||||
"path": "buildbundlerminifier/3.2.449",
|
||||
"hashPath": "buildbundlerminifier.3.2.449.nupkg.sha512"
|
||||
},
|
||||
"CodeBeam.MudBlazor.Extensions/8.2.4": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-IaQoIcREfkHq8VUxFDZQrK69blNw+0FwTjC8JGHhhSGugJZ3UFOjhpYYAhiU/1Eue3PXySLXzJFXzsD/hIArVw==",
|
||||
"path": "codebeam.mudblazor.extensions/8.2.4",
|
||||
"hashPath": "codebeam.mudblazor.extensions.8.2.4.nupkg.sha512"
|
||||
},
|
||||
"CsvHelper/33.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-fev4lynklAU2A9GVMLtwarkwaanjSYB4wUqO2nOJX5hnzObORzUqVLe+bDYCUyIIRQM4o5Bsq3CcyJR89iMmEQ==",
|
||||
"path": "csvhelper/33.0.1",
|
||||
"hashPath": "csvhelper.33.0.1.nupkg.sha512"
|
||||
},
|
||||
"EntityFramework/6.5.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-sQRP2lWg1i3aAGWqdliAM8zrGx7LHMUk+9/MoxUjwfTZYGMXvZ2JYZTlyTm1PqDxvn3c9E3U76TWDON7Y5+CVA==",
|
||||
"path": "entityframework/6.5.1",
|
||||
"hashPath": "entityframework.6.5.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.Authorization/9.0.7": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-P0Gej6X5cEoK+sS9XpgYSzg0Nz8OOlvfQb12aOAJW/P4b9nAzLQCVoNp1GDyR/P8eMSnoPARiKPaa6q51iR0oA==",
|
||||
"path": "microsoft.aspnetcore.authorization/9.0.7",
|
||||
"hashPath": "microsoft.aspnetcore.authorization.9.0.7.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.Components/9.0.7": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-cZpVsxWWGagoP2U6Kjqm107gVZHTmiM2m7YDNRsScTWoBB1iyEIznvYG9ZK4XkDY4yDUTdnZrXRMMVu8K7dJ8Q==",
|
||||
"path": "microsoft.aspnetcore.components/9.0.7",
|
||||
"hashPath": "microsoft.aspnetcore.components.9.0.7.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.Components.Analyzers/9.0.7": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-SlMcfUJHFxjIFAecPY55in8u93AZo5NQrRlPY3hKrSsLEgyjjtZGzWIn+F9RluHw5wRct/QFRCt2sQwEhn8qtA==",
|
||||
"path": "microsoft.aspnetcore.components.analyzers/9.0.7",
|
||||
"hashPath": "microsoft.aspnetcore.components.analyzers.9.0.7.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.Components.Forms/9.0.7": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ecnFWXV/ClmBfkevmalj1e1+T00AkihOyK8yQdKOwKmibraYphyup4BdOLP7v17PNVF4d5njsoHmFtVBvYpsJg==",
|
||||
"path": "microsoft.aspnetcore.components.forms/9.0.7",
|
||||
"hashPath": "microsoft.aspnetcore.components.forms.9.0.7.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.Components.Web/9.0.7": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-fP+WmahEXWgCTgL/aRo/y75v1nni8E8WfbpkbWOeMBk2UdQORqQbFPIkttu8JPYVACDfVYgEDKIDtVqEY9Akkg==",
|
||||
"path": "microsoft.aspnetcore.components.web/9.0.7",
|
||||
"hashPath": "microsoft.aspnetcore.components.web.9.0.7.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.Cryptography.Internal/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-NwGO0wh/IjEthBLGA6fWfIiftsNF/paA5RxWp6ji4wWazetJgQ4truR9nU2thAzzFLiXqlg8vGjdVDA8bHu0zA==",
|
||||
"path": "microsoft.aspnetcore.cryptography.internal/9.0.8",
|
||||
"hashPath": "microsoft.aspnetcore.cryptography.internal.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.Cryptography.KeyDerivation/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-gK70xxXYwwPiXYKYVmLYMuIO5EOGrRtQghmM6PkgtZ/0lgLEjIs//xgSLvZkV/mroNHA1DEqTcqscEj9OzZ1IA==",
|
||||
"path": "microsoft.aspnetcore.cryptography.keyderivation/9.0.8",
|
||||
"hashPath": "microsoft.aspnetcore.cryptography.keyderivation.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.Identity.EntityFrameworkCore/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-z4q9roxXMQePwFM5tXXZS5sKkU78yYXVkj56NYYx9xKe+mxGkJMV1MaO0GFE6HnnM8bE3Xxhs0hAPw2jKbse6w==",
|
||||
"path": "microsoft.aspnetcore.identity.entityframeworkcore/9.0.8",
|
||||
"hashPath": "microsoft.aspnetcore.identity.entityframeworkcore.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.Metadata/9.0.7": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-bM2x5yps2P6eXqFkR5ztKX7QRGGqJ4Vy5PxVdR7ADjYPNmMhrD57r8d9H++hpljk9sdjKI3Sppd7NZyA721nEA==",
|
||||
"path": "microsoft.aspnetcore.metadata/9.0.7",
|
||||
"hashPath": "microsoft.aspnetcore.metadata.9.0.7.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.CSharp/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==",
|
||||
"path": "microsoft.csharp/4.7.0",
|
||||
"hashPath": "microsoft.csharp.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-bNGdPhN762+BIIO5MFYLjafRqkSS1MqLOc/erd55InvLnFxt9H3N5JNsuag1ZHyBor1VtD42U0CHpgqkWeAYgQ==",
|
||||
"path": "microsoft.entityframeworkcore/9.0.8",
|
||||
"hashPath": "microsoft.entityframeworkcore.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Abstractions/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-B2yfAIQRRAQ4zvvWqh+HudD+juV3YoLlpXnrog3tU0PM9AFpuq6xo0+mEglN1P43WgdcUiF+65CWBcZe35s15Q==",
|
||||
"path": "microsoft.entityframeworkcore.abstractions/9.0.8",
|
||||
"hashPath": "microsoft.entityframeworkcore.abstractions.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Analyzers/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-2EYStCXt4Hi9p3J3EYMQbItJDtASJd064Kcs8C8hj8Jt5srILrR9qlaL0Ryvk8NrWQoCQvIELsmiuqLEZMLvGA==",
|
||||
"path": "microsoft.entityframeworkcore.analyzers/9.0.8",
|
||||
"hashPath": "microsoft.entityframeworkcore.analyzers.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Relational/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-OVhfyxiHxMvYpwQ8Jy3YZi4koy6TK5/Q7C1oq3z6db+HEGuu6x9L1BX5zDIdJxxlRePMyO4D8ORiXj/D7+MUqw==",
|
||||
"path": "microsoft.entityframeworkcore.relational/9.0.8",
|
||||
"hashPath": "microsoft.entityframeworkcore.relational.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Abstractions/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-4h7bsVoKoiK+SlPM+euX/ayGnKZhl47pPCidLTiio9xyG+vgVVfcYxcYQgjm0SCrdSxjG0EGIAKF8EFr3G8Ifw==",
|
||||
"path": "microsoft.extensions.caching.abstractions/9.0.8",
|
||||
"hashPath": "microsoft.extensions.caching.abstractions.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Memory/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-grR+oPyj8HVn4DT8CFUUdSw2pZZKS13KjytFe4txpHQliGM1GEDotohmjgvyl3hm7RFB3FRqvbouEX3/1ewp5A==",
|
||||
"path": "microsoft.extensions.caching.memory/9.0.8",
|
||||
"hashPath": "microsoft.extensions.caching.memory.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-yNou2KM35RvzOh4vUFtl2l33rWPvOCoba+nzEDJ+BgD8aOL/jew4WPCibQvntRfOJ2pJU8ARygSMD+pdjvDHuA==",
|
||||
"path": "microsoft.extensions.configuration.abstractions/9.0.8",
|
||||
"hashPath": "microsoft.extensions.configuration.abstractions.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-JJjI2Fa+QtZcUyuNjbKn04OjIUX5IgFGFu/Xc+qvzh1rXdZHLcnqqVXhR4093bGirTwacRlHiVg1XYI9xum6QQ==",
|
||||
"path": "microsoft.extensions.dependencyinjection/9.0.8",
|
||||
"hashPath": "microsoft.extensions.dependencyinjection.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-xY3lTjj4+ZYmiKIkyWitddrp1uL5uYiweQjqo4BKBw01ZC4HhcfgLghDpPZcUlppgWAFqFy9SgkiYWOMx365pw==",
|
||||
"path": "microsoft.extensions.dependencyinjection.abstractions/9.0.8",
|
||||
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Identity.Core/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-giUYz84GHAizDucZp5vWAusDO2s9Jrrg2jQ6HUQNGs5HQMKJVobLPMQSiyg8R4yecH0pIc0QjANh0B/Kw13BHA==",
|
||||
"path": "microsoft.extensions.identity.core/9.0.8",
|
||||
"hashPath": "microsoft.extensions.identity.core.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Identity.Stores/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-sycaHcq78yI591+KxEdd53a7pJGQEl9H/wDsFkaPNE9g7loyq8vufPcc/9RH3KlGt5joR5Ey7PdoRSrlLjCgJg==",
|
||||
"path": "microsoft.extensions.identity.stores/9.0.8",
|
||||
"hashPath": "microsoft.extensions.identity.stores.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Localization/9.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-UgvX4Yb2T3tEsKT30ktZr0H7kTRPapCgEH0bdTwxiEGSdA39/hAQMvvb+vgHpqmevDU5+puyI9ujRkmmbF946w==",
|
||||
"path": "microsoft.extensions.localization/9.0.1",
|
||||
"hashPath": "microsoft.extensions.localization.9.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Localization.Abstractions/9.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-CABog43lyaZQMjmlktuImCy6zmAzRBaXqN81uPaMQjlp//ISDVYItZPh6KWpWRF4MY/B67X5oDc3JTUpfdocZw==",
|
||||
"path": "microsoft.extensions.localization.abstractions/9.0.1",
|
||||
"hashPath": "microsoft.extensions.localization.abstractions.9.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Logging/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-Z/7ze+0iheT7FJeZPqJKARYvyC2bmwu3whbm/48BJjdlGVvgDguoCqJIkI/67NkroTYobd5geai1WheNQvWrgA==",
|
||||
"path": "microsoft.extensions.logging/9.0.8",
|
||||
"hashPath": "microsoft.extensions.logging.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-pYnAffJL7ARD/HCnnPvnFKSIHnTSmWz84WIlT9tPeQ4lHNiu0Az7N/8itihWvcF8sT+VVD5lq8V+ckMzu4SbOw==",
|
||||
"path": "microsoft.extensions.logging.abstractions/9.0.8",
|
||||
"hashPath": "microsoft.extensions.logging.abstractions.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Options/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-OmTaQ0v4gxGQkehpwWIqPoEiwsPuG/u4HUsbOFoWGx4DKET2AXzopnFe/fE608FIhzc/kcg2p8JdyMRCCUzitQ==",
|
||||
"path": "microsoft.extensions.options/9.0.8",
|
||||
"hashPath": "microsoft.extensions.options.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/9.0.8": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-tizSIOEsIgSNSSh+hKeUVPK7xmTIjR8s+mJWOu1KXV3htvNQiPMFRMO17OdI1y/4ZApdBVk49u/08QGC9yvLug==",
|
||||
"path": "microsoft.extensions.primitives/9.0.8",
|
||||
"hashPath": "microsoft.extensions.primitives.9.0.8.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.JSInterop/9.0.7": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-+FFcgE9nFf/M/8sSJPzKnGFkALO5Q3mCdljpsxe/ZFRt6bqMcImv8d74HgMamOauhmVlC7MU9GmnbblF9CpNlQ==",
|
||||
"path": "microsoft.jsinterop/9.0.7",
|
||||
"hashPath": "microsoft.jsinterop.9.0.7.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Win32.Registry/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==",
|
||||
"path": "microsoft.win32.registry/4.7.0",
|
||||
"hashPath": "microsoft.win32.registry.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Win32.SystemEvents/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-hqTM5628jSsQiv+HGpiq3WKBl2c8v1KZfby2J6Pr7pEPlK9waPdgEO6b8A/+/xn/yZ9ulv8HuqK71ONy2tg67A==",
|
||||
"path": "microsoft.win32.systemevents/6.0.0",
|
||||
"hashPath": "microsoft.win32.systemevents.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"MudBlazor/8.12.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ZwgHPt2DwiQoFeP8jxPzNEsUmJF17ljtospVH+uMUKUKpklz6jEkdE5vNs7PnHaPH9HEbpFEQgJw8QPlnFZjsQ==",
|
||||
"path": "mudblazor/8.12.0",
|
||||
"hashPath": "mudblazor.8.12.0.nupkg.sha512"
|
||||
},
|
||||
"Npgsql/9.0.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-tPvY61CxOAWxNsKLEBg+oR646X4Bc8UmyQ/tJszL/7mEmIXQnnBhVJZrZEEUv0Bstu0mEsHZD5At3EO8zQRAYw==",
|
||||
"path": "npgsql/9.0.3",
|
||||
"hashPath": "npgsql.9.0.3.nupkg.sha512"
|
||||
},
|
||||
"Npgsql.EntityFrameworkCore.PostgreSQL/9.0.4": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-mw5vcY2IEc7L+IeGrxpp/J5OSnCcjkjAgJYCm/eD52wpZze8zsSifdqV7zXslSMmfJG2iIUGZyo3KuDtEFKwMQ==",
|
||||
"path": "npgsql.entityframeworkcore.postgresql/9.0.4",
|
||||
"hashPath": "npgsql.entityframeworkcore.postgresql.9.0.4.nupkg.sha512"
|
||||
},
|
||||
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-9kyFSIdN3T0qjDQ2R0HRXYIhS3l5psBzQi6qqhdLz+SzFyEy4sVxNOke+yyYv8Cu8rPER12c3RDjLT8wF3WBYQ==",
|
||||
"path": "runtime.native.system.data.sqlclient.sni/4.7.0",
|
||||
"hashPath": "runtime.native.system.data.sqlclient.sni.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-LbrynESTp3bm5O/+jGL8v0Qg5SJlTV08lpIpFesXjF6uGNMWqFnUQbYBJwZTeua6E/Y7FIM1C54Ey1btLWupdg==",
|
||||
"path": "runtime.win-arm64.runtime.native.system.data.sqlclient.sni/4.4.0",
|
||||
"hashPath": "runtime.win-arm64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
|
||||
},
|
||||
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-38ugOfkYJqJoX9g6EYRlZB5U2ZJH51UP8ptxZgdpS07FgOEToV+lS11ouNK2PM12Pr6X/PpT5jK82G3DwH/SxQ==",
|
||||
"path": "runtime.win-x64.runtime.native.system.data.sqlclient.sni/4.4.0",
|
||||
"hashPath": "runtime.win-x64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
|
||||
},
|
||||
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-YhEdSQUsTx+C8m8Bw7ar5/VesXvCFMItyZF7G1AUY+OM0VPZUOeAVpJ4Wl6fydBGUYZxojTDR3I6Bj/+BPkJNA==",
|
||||
"path": "runtime.win-x86.runtime.native.system.data.sqlclient.sni/4.4.0",
|
||||
"hashPath": "runtime.win-x86.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
|
||||
},
|
||||
"System.CodeDom/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==",
|
||||
"path": "system.codedom/6.0.0",
|
||||
"hashPath": "system.codedom.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.ComponentModel.Annotations/5.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-dMkqfy2el8A8/I76n2Hi1oBFEbG1SfxD2l5nhwXV3XjlnOmwxJlQbYpJH4W51odnU9sARCSAgv7S3CyAFMkpYg==",
|
||||
"path": "system.componentmodel.annotations/5.0.0",
|
||||
"hashPath": "system.componentmodel.annotations.5.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Configuration.ConfigurationManager/6.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-jXw9MlUu/kRfEU0WyTptAVueupqIeE3/rl0EZDMlf8pcvJnitQ8HeVEp69rZdaStXwTV72boi/Bhw8lOeO+U2w==",
|
||||
"path": "system.configuration.configurationmanager/6.0.1",
|
||||
"hashPath": "system.configuration.configurationmanager.6.0.1.nupkg.sha512"
|
||||
},
|
||||
"System.Data.SqlClient/4.8.6": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-2Ij/LCaTQRyAi5lAv7UUTV9R2FobC8xN9mE0fXBZohum/xLl8IZVmE98Rq5ugQHjCgTBRKqpXRb4ORulRdA6Ig==",
|
||||
"path": "system.data.sqlclient/4.8.6",
|
||||
"hashPath": "system.data.sqlclient.4.8.6.nupkg.sha512"
|
||||
},
|
||||
"System.Drawing.Common/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-NfuoKUiP2nUWwKZN6twGqXioIe1zVD0RIj2t976A+czLHr2nY454RwwXs6JU9Htc6mwqL6Dn/nEL3dpVf2jOhg==",
|
||||
"path": "system.drawing.common/6.0.0",
|
||||
"hashPath": "system.drawing.common.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Security.AccessControl/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==",
|
||||
"path": "system.security.accesscontrol/6.0.0",
|
||||
"hashPath": "system.security.accesscontrol.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Security.Cryptography.ProtectedData/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ==",
|
||||
"path": "system.security.cryptography.protecteddata/6.0.0",
|
||||
"hashPath": "system.security.cryptography.protecteddata.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Security.Permissions/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==",
|
||||
"path": "system.security.permissions/6.0.0",
|
||||
"hashPath": "system.security.permissions.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Security.Principal.Windows/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==",
|
||||
"path": "system.security.principal.windows/4.7.0",
|
||||
"hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"System.Windows.Extensions/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==",
|
||||
"path": "system.windows.extensions/6.0.0",
|
||||
"hashPath": "system.windows.extensions.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"ZXing.Net/0.16.9": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-7WaVMHklpT3Ye2ragqRIwlFRsb6kOk63BOGADV0fan3ulVfGLUYkDi5yNUsZS/7FVNkWbtHAlDLmu4WnHGfqvQ==",
|
||||
"path": "zxing.net/0.16.9",
|
||||
"hashPath": "zxing.net.0.16.9.nupkg.sha512"
|
||||
},
|
||||
"OpenArchival.DataAccess/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net9.0",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "9.0.0"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App",
|
||||
"version": "9.0.0"
|
||||
}
|
||||
],
|
||||
"configProperties": {
|
||||
"System.Reflection.NullabilityInfoContext.IsSupported": true,
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"ContentRoots":["C:\\Users\\vtall\\.nuget\\packages\\codebeam.mudblazor.extensions\\8.2.4\\staticwebassets\\","C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\obj\\Debug\\net9.0\\compressed\\","C:\\Users\\vtall\\.nuget\\packages\\mudblazor\\8.12.0\\staticwebassets\\"],"Root":{"Children":{"_content":{"Children":{"CodeBeam.MudBlazor.Extensions":{"Children":{"eraser.cur":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"eraser.cur"},"Patterns":null},"Mud_Secondary.png":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"Mud_Secondary.png"},"Patterns":null},"MudExtensions.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"MudExtensions.min.css"},"Patterns":null},"MudExtensions.min.css.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"y71s3w5f9p-zrxbvx041h.gz"},"Patterns":null},"MudExtensions.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"MudExtensions.min.js"},"Patterns":null},"MudExtensions.min.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"xa5fgxnhtc-g1x2ayen6w.gz"},"Patterns":null},"pencil.cur":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"pencil.cur"},"Patterns":null}},"Asset":null,"Patterns":null},"MudBlazor":{"Children":{"MudBlazor.min.css":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"MudBlazor.min.css"},"Patterns":null},"MudBlazor.min.css.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"tzxjg6is5z-0n6lrtb02s.gz"},"Patterns":null},"MudBlazor.min.js":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"MudBlazor.min.js"},"Patterns":null},"MudBlazor.min.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"0wz98yz2xy-lftp6ydp6b.gz"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}}
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net9.0",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "9.0.0"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App",
|
||||
"version": "9.0.0"
|
||||
}
|
||||
],
|
||||
"configProperties": {
|
||||
"System.GC.Server": true,
|
||||
"System.Reflection.NullabilityInfoContext.IsSupported": true,
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"Version":1,"ManifestType":"Build","Endpoints":[]}
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
|
||||
@@ -0,0 +1,23 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
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+781793a27f2e164808340b1adb5ce70e1800b187")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("OpenArchival.Blazor.CustomComponents")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("OpenArchival.Blazor.CustomComponents")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
0f150b2c6c42fe6dc150484dc552ff72149942a646208d5d65628a770a14b473
|
||||
@@ -0,0 +1,36 @@
|
||||
is_global = true
|
||||
build_property.MudDebugAnalyzer =
|
||||
build_property.MudAllowedAttributePattern =
|
||||
build_property.MudAllowedAttributeList =
|
||||
build_property.TargetFramework = net9.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = OpenArchival.Blazor.CustomComponents
|
||||
build_property.RootNamespace = OpenArchival.Blazor.CustomComponents
|
||||
build_property.ProjectDir = C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.RazorLangVersion = 9.0
|
||||
build_property.SupportLocalizedComponentNames =
|
||||
build_property.GenerateRazorMetadataSourceChecksumAttributes =
|
||||
build_property.MSBuildProjectDirectory = C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents
|
||||
build_property._RazorSourceGeneratorDebug =
|
||||
build_property.EffectiveAnalysisLevelStyle = 9.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.CustomComponents/ChipContainer.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q2hpcENvbnRhaW5lci5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.CustomComponents/UploadDropBox.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = VXBsb2FkRHJvcEJveC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Users/vtall/source/repos/vtallen/Open-Archival/OpenArchival.Blazor.CustomComponents/Areas/MyFeature/Pages/Page1.cshtml]
|
||||
build_metadata.AdditionalFiles.TargetPath = QXJlYXNcTXlGZWF0dXJlXFBhZ2VzXFBhZ2UxLmNzaHRtbA==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
@@ -0,0 +1,8 @@
|
||||
// <auto-generated/>
|
||||
global using global::System;
|
||||
global using global::System.Collections.Generic;
|
||||
global using global::System.IO;
|
||||
global using global::System.Linq;
|
||||
global using global::System.Net.Http;
|
||||
global using global::System.Threading;
|
||||
global using global::System.Threading.Tasks;
|
||||
@@ -0,0 +1 @@
|
||||
d5ac7ab69059af111e9d7125adeb7b174ca570725d4b64a544cca7bd11ac7ca0
|
||||
@@ -0,0 +1,18 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute("Microsoft.AspNetCore.Mvc.ApplicationParts.ConsolidatedAssemblyApplicationPartFact" +
|
||||
"ory, Microsoft.AspNetCore.Mvc.Razor")]
|
||||
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
d1c95df4baf6501159693bc7a8bbcde6df6dfe0af04e22b7be73edf1f31fe102
|
||||
@@ -0,0 +1,46 @@
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\bin\Debug\net9.0\OpenArchival.DataAccess.deps.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\bin\Debug\net9.0\OpenArchival.DataAccess.runtimeconfig.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\bin\Debug\net9.0\OpenArchival.DataAccess.staticwebassets.endpoints.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\bin\Debug\net9.0\OpenArchival.DataAccess.exe
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\bin\Debug\net9.0\OpenArchival.Blazor.CustomComponents.staticwebassets.runtime.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\bin\Debug\net9.0\OpenArchival.Blazor.CustomComponents.staticwebassets.endpoints.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\bin\Debug\net9.0\OpenArchival.Blazor.CustomComponents.deps.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\bin\Debug\net9.0\OpenArchival.Blazor.CustomComponents.runtimeconfig.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\bin\Debug\net9.0\OpenArchival.Blazor.CustomComponents.dll
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\bin\Debug\net9.0\OpenArchival.Blazor.CustomComponents.pdb
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\bin\Debug\net9.0\OpenArchival.DataAccess.dll
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\bin\Debug\net9.0\OpenArchival.DataAccess.pdb
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\OpenArchival.Blazor.CustomComponents.csproj.AssemblyReference.cache
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\rpswa.dswa.cache.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\OpenArchival.Blazor.CustomComponents.GeneratedMSBuildEditorConfig.editorconfig
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\OpenArchival.Blazor.CustomComponents.AssemblyInfoInputs.cache
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\OpenArchival.Blazor.CustomComponents.AssemblyInfo.cs
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\OpenArchival.Blazor.CustomComponents.csproj.CoreCompileInputs.cache
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\OpenArchival.Blazor.CustomComponents.RazorAssemblyInfo.cache
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\OpenArchival.Blazor.CustomComponents.RazorAssemblyInfo.cs
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\OpenArchival.Blazor.CustomComponents.sourcelink.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\rjimswa.dswa.cache.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\rjsmrazor.dswa.cache.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\rjsmcshtml.dswa.cache.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\scopedcss\bundle\OpenArchival.Blazor.CustomComponents.styles.css
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\compressed\tzxjg6is5z-0n6lrtb02s.gz
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\compressed\0wz98yz2xy-lftp6ydp6b.gz
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\compressed\y71s3w5f9p-zrxbvx041h.gz
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\compressed\xa5fgxnhtc-g1x2ayen6w.gz
|
||||
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.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.json.cache
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.development.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.build.endpoints.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets\msbuild.OpenArchival.Blazor.CustomComponents.Microsoft.AspNetCore.StaticWebAssets.props
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets\msbuild.OpenArchival.Blazor.CustomComponents.Microsoft.AspNetCore.StaticWebAssetEndpoints.props
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets\msbuild.build.OpenArchival.Blazor.CustomComponents.props
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets\msbuild.buildMultiTargeting.OpenArchival.Blazor.CustomComponents.props
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets\msbuild.buildTransitive.OpenArchival.Blazor.CustomComponents.props
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.pack.json
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\staticwebassets.upToDateCheck.txt
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\OpenArch.4561040F.Up2Date
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\OpenArchival.Blazor.CustomComponents.dll
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\refint\OpenArchival.Blazor.CustomComponents.dll
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\OpenArchival.Blazor.CustomComponents.pdb
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\OpenArchival.Blazor.CustomComponents.genruntimeconfig.cache
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.Blazor.CustomComponents\obj\Debug\net9.0\ref\OpenArchival.Blazor.CustomComponents.dll
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
8382a9175cc270dea9003105300e8f7b19a3481b3f2543d22618376053abc1de
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"documents":{"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\*":"https://raw.githubusercontent.com/vtallen/Open-Archival/781793a27f2e164808340b1adb5ce70e1800b187/*"}}
|
||||
Binary file not shown.
Binary file not shown.
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.
@@ -0,0 +1 @@
|
||||
{"GlobalPropertiesHash":"lEU9IK7JHCtiQwSBP/TxPcopW1tWNtXaNJKihxw8m0A=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["DcnW3Nme3rNPLAwbMJt8SAc7NtT3s0uMfdyn8pS9wY4=","jhxhndIBeVnh8UxuJCrvJYIm7MWmZd85J9s9o5wXlkY=","2U50UeUXmvocNMe\u002BHlmTkHloBEvoLIKB8dwGnilrdg4="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
@@ -0,0 +1 @@
|
||||
{"GlobalPropertiesHash":"hpbkMQ9hakeljxb8W9+Il0Sx7HacuJPv2rysgndHj4c=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["DcnW3Nme3rNPLAwbMJt8SAc7NtT3s0uMfdyn8pS9wY4=","jhxhndIBeVnh8UxuJCrvJYIm7MWmZd85J9s9o5wXlkY=","2U50UeUXmvocNMe\u002BHlmTkHloBEvoLIKB8dwGnilrdg4="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
@@ -0,0 +1 @@
|
||||
{"GlobalPropertiesHash":"vjz3KQm1uI8qugMtsB8o1ithK8Mz7yLsdmt2+RtOpbA=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["DcnW3Nme3rNPLAwbMJt8SAc7NtT3s0uMfdyn8pS9wY4=","\u002BRXYQkR/ylib3AH5TClvaWmdrF3b0iL1N5oXOpzuOPY=","RKQabnTMfWHZHT3Jsdw/TrcWn3wviF/gRpclvEqduvk="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
AaaKzUDv2YDCHPyoR5Z75brQPzCn7OqSnarOfHDUAhQ=
|
||||
@@ -0,0 +1 @@
|
||||
{"ContentRoots":["C:\\Users\\vtall\\.nuget\\packages\\codebeam.mudblazor.extensions\\8.2.4\\staticwebassets\\","C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\obj\\Debug\\net9.0\\compressed\\","C:\\Users\\vtall\\.nuget\\packages\\mudblazor\\8.12.0\\staticwebassets\\"],"Root":{"Children":{"_content":{"Children":{"CodeBeam.MudBlazor.Extensions":{"Children":{"eraser.cur":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"eraser.cur"},"Patterns":null},"Mud_Secondary.png":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"Mud_Secondary.png"},"Patterns":null},"MudExtensions.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"MudExtensions.min.css"},"Patterns":null},"MudExtensions.min.css.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"y71s3w5f9p-zrxbvx041h.gz"},"Patterns":null},"MudExtensions.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"MudExtensions.min.js"},"Patterns":null},"MudExtensions.min.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"xa5fgxnhtc-g1x2ayen6w.gz"},"Patterns":null},"pencil.cur":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"pencil.cur"},"Patterns":null}},"Asset":null,"Patterns":null},"MudBlazor":{"Children":{"MudBlazor.min.css":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"MudBlazor.min.css"},"Patterns":null},"MudBlazor.min.css.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"tzxjg6is5z-0n6lrtb02s.gz"},"Patterns":null},"MudBlazor.min.js":{"Children":null,"Asset":{"ContentRootIndex":2,"SubPath":"MudBlazor.min.js"},"Patterns":null},"MudBlazor.min.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"0wz98yz2xy-lftp6ydp6b.gz"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null}}
|
||||
@@ -0,0 +1 @@
|
||||
C:\Users\vtall\source\repos\vtallen\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
|
||||
@@ -0,0 +1,4 @@
|
||||
<Project>
|
||||
<Import Project="Microsoft.AspNetCore.StaticWebAssetEndpoints.props" />
|
||||
<Import Project="Microsoft.AspNetCore.StaticWebAssets.props" />
|
||||
</Project>
|
||||
@@ -0,0 +1,3 @@
|
||||
<Project>
|
||||
<Import Project="..\build\OpenArchival.Blazor.CustomComponents.props" />
|
||||
</Project>
|
||||
@@ -0,0 +1,3 @@
|
||||
<Project>
|
||||
<Import Project="..\buildMultiTargeting\OpenArchival.Blazor.CustomComponents.props" />
|
||||
</Project>
|
||||
@@ -0,0 +1,192 @@
|
||||
{
|
||||
"format": 1,
|
||||
"restore": {
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\OpenArchival.Blazor.CustomComponents.csproj": {}
|
||||
},
|
||||
"projects": {
|
||||
"C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\OpenArchival.Blazor.CustomComponents.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\OpenArchival.Blazor.CustomComponents.csproj",
|
||||
"projectName": "OpenArchival.Blazor.CustomComponents",
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\OpenArchival.Blazor.CustomComponents.csproj",
|
||||
"packagesPath": "C:\\Users\\vtall\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.Blazor.CustomComponents\\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.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.MudBlazor.Extensions": {
|
||||
"target": "Package",
|
||||
"version": "[8.2.4, )"
|
||||
},
|
||||
"MudBlazor": {
|
||||
"target": "Package",
|
||||
"version": "[8.12.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.DataAccess\\OpenArchival.DataAccess.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj",
|
||||
"projectName": "OpenArchival.DataAccess",
|
||||
"projectPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj",
|
||||
"packagesPath": "C:\\Users\\vtall\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\vtall\\source\\repos\\vtallen\\Open-Archival\\OpenArchival.DataAccess\\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": {}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "direct"
|
||||
},
|
||||
"SdkAnalysisLevel": "9.0.300"
|
||||
},
|
||||
"frameworks": {
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"dependencies": {
|
||||
"EntityFramework": {
|
||||
"target": "Package",
|
||||
"version": "[6.5.1, )"
|
||||
},
|
||||
"Microsoft.AspNetCore.Identity.EntityFrameworkCore": {
|
||||
"target": "Package",
|
||||
"version": "[9.0.8, )"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore": {
|
||||
"target": "Package",
|
||||
"version": "[9.0.8, )"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Design": {
|
||||
"include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive",
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[9.0.8, )"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": {
|
||||
"target": "Package",
|
||||
"version": "[9.0.8, )"
|
||||
},
|
||||
"Npgsql": {
|
||||
"target": "Package",
|
||||
"version": "[9.0.3, )"
|
||||
},
|
||||
"Npgsql.EntityFrameworkCore.PostgreSQL": {
|
||||
"target": "Package",
|
||||
"version": "[9.0.4, )"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user