@page "/Metadata/Collections" @using Microsoft.EntityFrameworkCore; @using System.Web @attribute [Authorize(Roles = RoleService.AdministratorRoleName)] @inject DatabaseServiceFactory DatabaseServiceFactory @inject NavigationManager NavigationManager @inject IMessageService MessageService @inject ILogger Logger
@code { IEnumerable Collections { get; set; } = new List(); bool Loading = true; int PageIndex = 1; int PageSize = 50; int TotalCount = 0; string Search = ""; string Url; TableColumnPicker Picker; bool ColumnPickerVisible = false; bool AddCollectionVisible = false; Collection CollectionContext = new Collection(); protected override async Task OnInitializedAsync() { Url = NavigationManager.Uri; NavigationManager.LocationChanged += LocationChanged; LoadTableParameter(); await LoadData(); Loading = false; } async Task LoadData() { var fuzzySearch = Search.ToLower().Trim(); using (var collectionService = DatabaseServiceFactory.Create()) { var results = await collectionService .Include(c => c.Games) .Include(c => c.CreatedBy) .Include(c => c.UpdatedBy) .SortBy(c => c.Name) .PaginateAsync(c => c.Name.ToLower().Contains(fuzzySearch), PageIndex, PageSize); TotalCount = results.Count; Collections = results.Results; } } async void LocationChanged(object sender, LocationChangedEventArgs e) { Url = e.Location; LoadTableParameter(); await LoadData(); } void LoadTableParameter() { var uri = NavigationManager.ToAbsoluteUri(Url); var query = HttpUtility.ParseQueryString(uri.Query); PageIndex = int.TryParse(query["Page"], out var index) ? index > 0 ? index : 1 : 1; PageSize = int.TryParse(query["Size"], out var size) ? size > 0 ? size : 50 : 50; if (query["Search"] != null) Search = query["Search"]; else Search = ""; } void PageIndexChanged(PaginationEventArgs args) { NavigationManager.NavigateTo($"/Metadata/Collections?Page={args.Page}&Size={args.PageSize}{(Search != "" ? "&Search=" + Search : "")}"); } void PageSizeChanged(PaginationEventArgs args) { NavigationManager.NavigateTo($"/Metadata/Collections?Page={args.Page}&Size={args.PageSize}{(Search != "" ? "&Search=" + Search : "")}"); } void SearchChanged() { NavigationManager.NavigateTo($"/Metadata/Collections?Search={Search}&Size={PageSize}"); } async Task OpenAdd() { CollectionContext = new Collection(); AddCollectionVisible = true; await InvokeAsync(StateHasChanged); } async Task CloseAdd() { AddCollectionVisible = false; await InvokeAsync(StateHasChanged); } async Task Add() { try { using (var collectionService = DatabaseServiceFactory.Create()) { await collectionService.AddMissingAsync(x => x.Name == CollectionContext.Name, CollectionContext); } MessageService.Success($"{CollectionContext.Name} was added!"); await LoadData(); await CloseAdd(); } catch (Exception ex) { MessageService.Error($"Could not add {CollectionContext.Name}!"); Logger.LogError(ex, $"Could not add {CollectionContext.Name}!"); } } async Task Delete(Collection Collection) { Collections = new List(); Loading = true; using (var collectionService = DatabaseServiceFactory.Create()) { await collectionService.DeleteAsync(Collection); } await LoadData(); Loading = false; } async Task OpenColumnPicker() { ColumnPickerVisible = true; } async Task CloseColumnPicker() { ColumnPickerVisible = false; } public void Dispose() { NavigationManager.LocationChanged -= LocationChanged; } }