151 lines
4.9 KiB
Text
151 lines
4.9 KiB
Text
@page "/Metadata/Collections"
|
|
@using Microsoft.EntityFrameworkCore;
|
|
@attribute [Authorize(Roles = "Administrator")]
|
|
@inject CollectionService CollectionService
|
|
@inject NavigationManager NavigationManager
|
|
@inject IMessageService MessageService
|
|
@inject ILogger<Index> Logger
|
|
|
|
<PageHeader Title="Collections">
|
|
<PageHeaderExtra>
|
|
<Space Direction="DirectionVHType.Horizontal">
|
|
<SpaceItem>
|
|
<Search Placeholder="Search" @bind-Value="Search" BindOnInput DebounceMilliseconds="150" OnChange="() => LoadData()" />
|
|
</SpaceItem>
|
|
<SpaceItem>
|
|
<Button OnClick="OpenAdd" Type="@ButtonType.Primary">Add Collection</Button>
|
|
</SpaceItem>
|
|
</Space>
|
|
</PageHeaderExtra>
|
|
</PageHeader>
|
|
|
|
<TableColumnPicker @ref="Picker" Key="Collections" @bind-Visible="ColumnPickerVisible" />
|
|
|
|
<Table TItem="Collection" DataSource="@Collections" Loading="@Loading" PageSize="25" Responsive>
|
|
<PropertyColumn Property="c => c.Name" Sortable Hidden="@(Picker.IsColumnHidden("Name"))" />
|
|
<PropertyColumn Property="c => c.CreatedOn" Format="MM/dd/yyyy hh:mm tt" Sortable Hidden="@(Picker.IsColumnHidden("Created On"))" />
|
|
<PropertyColumn Property="c => c.CreatedBy != null ? c.CreatedBy.UserName : String.Empty" Title="Created By" Sortable Hidden="@(Picker.IsColumnHidden("Created By"))" />
|
|
<PropertyColumn Property="c => c.UpdatedOn" Format="MM/dd/yyyy hh:mm tt" Sortable Hidden="@(Picker.IsColumnHidden("Updated On", false))" />
|
|
<PropertyColumn Property="c => c.UpdatedBy != null ? c.UpdatedBy.UserName : String.Empty" Title="Updated By" Sortable Hidden="@(Picker.IsColumnHidden("Updated By"))" />
|
|
<Column Title="Games" TData="int">
|
|
@context.Games?.Count
|
|
</Column>
|
|
<ActionColumn Title="" Style="text-align: right; white-space: nowrap">
|
|
<TitleTemplate>
|
|
<div style="text-align: right">
|
|
<Button Icon="@IconType.Outline.Edit" Type="@ButtonType.Text" OnClick="() => OpenColumnPicker()" />
|
|
</div>
|
|
</TitleTemplate>
|
|
<ChildContent>
|
|
<Space Direction="DirectionVHType.Horizontal">
|
|
<SpaceItem>
|
|
<a href="/Metadata/Collections/@(context.Id)" class="ant-btn ant-btn-primary">Edit</a>
|
|
</SpaceItem>
|
|
<SpaceItem>
|
|
<Popconfirm OnConfirm="() => Delete(context)" Title="Are you sure you want to delete this Collection?">
|
|
<Button Icon="@IconType.Outline.Close" Type="@ButtonType.Text" Danger />
|
|
</Popconfirm>
|
|
</SpaceItem>
|
|
</Space>
|
|
</ChildContent>
|
|
</ActionColumn>
|
|
</Table>
|
|
|
|
<Modal Title="Add Collection" OnOk="Add" OnCancel="CloseAdd" @bind-Visible="AddCollectionVisible">
|
|
<Form Model="@CollectionContext">
|
|
<FormItem Label="Name">
|
|
<Input @bind-Value="@context.Name" />
|
|
</FormItem>
|
|
</Form>
|
|
</Modal>
|
|
|
|
@code {
|
|
IEnumerable<Collection> Collections { get; set; } = new List<Collection>();
|
|
|
|
bool Loading = true;
|
|
|
|
string Search = "";
|
|
|
|
TableColumnPicker Picker;
|
|
bool ColumnPickerVisible = false;
|
|
|
|
bool AddCollectionVisible = false;
|
|
Collection CollectionContext = new Collection();
|
|
|
|
protected override void OnAfterRender(bool firstRender)
|
|
{
|
|
if (firstRender)
|
|
{
|
|
LoadData();
|
|
|
|
Loading = false;
|
|
|
|
StateHasChanged();
|
|
}
|
|
}
|
|
|
|
private async Task LoadData()
|
|
{
|
|
var fuzzySearch = Search.ToLower().Trim();
|
|
|
|
Collections = await CollectionService.Get(r => r.Name.ToLower().Contains(fuzzySearch)).OrderBy(r => r.Name).ToListAsync();
|
|
}
|
|
|
|
private async Task OpenAdd()
|
|
{
|
|
CollectionContext = new Collection();
|
|
|
|
AddCollectionVisible = true;
|
|
|
|
await InvokeAsync(StateHasChanged);
|
|
}
|
|
|
|
private async Task CloseAdd()
|
|
{
|
|
AddCollectionVisible = false;
|
|
|
|
await InvokeAsync(StateHasChanged);
|
|
}
|
|
|
|
private async Task Add()
|
|
{
|
|
try
|
|
{
|
|
await CollectionService.AddMissing(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}!");
|
|
}
|
|
}
|
|
|
|
private async Task Delete(Collection Collection)
|
|
{
|
|
Collections = new List<Collection>();
|
|
|
|
Loading = true;
|
|
|
|
await CollectionService.Delete(Collection);
|
|
|
|
Collections = await CollectionService.Get(x => true).OrderBy(r => r.Name).ToListAsync();
|
|
|
|
Loading = false;
|
|
}
|
|
|
|
private async Task OpenColumnPicker()
|
|
{
|
|
ColumnPickerVisible = true;
|
|
}
|
|
|
|
private async Task CloseColumnPicker()
|
|
{
|
|
ColumnPickerVisible = false;
|
|
}
|
|
}
|