@namespace OpenArchival.Blazor.AdminPages @using Microsoft.AspNetCore.Components.Web @using MudBlazor @using MudExtensions @using OpenArchival.DataAccess Delete Edit @inject IArtifactGroupingProvider GroupingProvider; @inject IDialogService DialogService; @inject IArtifactGroupingProvider GroupingProvider; @inject ArtifactEntrySharedHelpers Helpers; @code { public List ArtifactGroupingRows { get; set; } = new(); public MudDataGrid DataGrid { get; set; } = default!; protected override async Task OnInitializedAsync() { // Load inital data List groupings = await GroupingProvider.GetGroupingsPaged(1, 25); SetGroupingRows(groupings); await base.OnInitializedAsync(); StateHasChanged(); } private void SetGroupingRows(IEnumerable 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("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 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> ServerReload(GridState state) { int totalItems = await GroupingProvider.GetTotalCount(); IEnumerable groupings = await GroupingProvider.GetGroupingsPaged(state.Page + 1, state.PageSize); var pagedItems = groupings.Select(grouping => new ArtifactGroupingRowElement() { Id = grouping.Id, Title = grouping.Title, ArtifactGroupingIdentifier = grouping.ArtifactGroupingIdentifier ?? throw new ArgumentNullException(nameof(grouping), "Got a null ArtifactGroupingIdentifier"), CategoryName = grouping.Category.Name, IsPublicallyVisible = grouping.IsPublicallyVisible, }); return new GridData() { TotalItems = totalItems, Items = pagedItems }; } }