diff --git a/LANCommander/Pages/Games/Index.razor b/LANCommander/Pages/Games/Index.razor index 051c44d..4e9da10 100644 --- a/LANCommander/Pages/Games/Index.razor +++ b/LANCommander/Pages/Games/Index.razor @@ -1,4 +1,6 @@ @page "/Games" +@using LANCommander.Extensions; +@using System.ComponentModel.DataAnnotations; @attribute [Authorize] @inject GameService GameService @inject NavigationManager NavigationManager @@ -9,35 +11,176 @@ + + + @Field.Icon.GetDisplayName() + @Field.Title.GetDisplayName() + @Field.SortTitle.GetDisplayName() + @Field.ReleasedOn.GetDisplayName() + @Field.CreatedOn.GetDisplayName() + @Field.CreatedBy.GetDisplayName() + @Field.UpdatedOn.GetDisplayName() + @Field.UpdatedBy.GetDisplayName() + @Field.Singleplayer.GetDisplayName() + @Field.Multiplayer.GetDisplayName() + @Field.TotalKeys.GetDisplayName() + @Field.KeysAllocated.GetDisplayName() + @Field.Developers.GetDisplayName() + @Field.Publishers.GetDisplayName() + @Field.Genres.GetDisplayName() + @Field.MultiplayerModes.GetDisplayName() + @Field.ArchiveSize.GetDisplayName() + + + - - - - - - - - - @context.CreatedBy?.UserName - - - - @context.UpdatedBy?.UserName - + @if (FieldVisible(Field.Icon)) + { + + + + } + + @if (FieldVisible(Field.Title)) + { + + } + + @if (FieldVisible(Field.SortTitle)) + { + + } + + @if (FieldVisible(Field.ReleasedOn)) + { + + } + + @if (FieldVisible(Field.CreatedOn)) + { + + } + + @if (FieldVisible(Field.CreatedBy)) + { + + @context.CreatedBy?.UserName + + } + + @if (FieldVisible(Field.UpdatedOn)) + { + + } + + @if (FieldVisible(Field.UpdatedBy)) + { + + @context.UpdatedBy?.UserName + + } + + @if (FieldVisible(Field.Singleplayer)) + { + + + + } + + @if (FieldVisible(Field.Multiplayer)) + { + + + + } + + @if (FieldVisible(Field.TotalKeys)) + { + + @context.Keys?.Count + + } + + @if (FieldVisible(Field.KeysAllocated)) + { + + @context.Keys?.Count(k => k.ClaimedOn.HasValue) + + } + + @if (FieldVisible(Field.Developers)) + { + + @foreach (var dev in context.Developers) + { + @dev.Name + } + + } + + @if (FieldVisible(Field.Publishers)) + { + + @foreach (var pub in context.Publishers) + { + @pub.Name + } + + } + + @if (FieldVisible(Field.Genres)) + { + + @foreach (var genre in context.Genres) + { + @genre.Name + } + + } + + @if (FieldVisible(Field.MultiplayerModes)) + { + + @foreach (var mode in context.MultiplayerModes.Select(mm => mm.Type).Distinct()) + { + @mode.GetDisplayName() + } + + } + + @if (FieldVisible(Field.ArchiveSize)) + { + long? compressedSize = context.Archives?.OrderByDescending(a => a.CreatedOn).FirstOrDefault()?.CompressedSize; + + + @if (compressedSize.HasValue) + { + @ByteSizeLib.ByteSize.FromBytes((double)compressedSize) + } + + } + - - - - - - Edit - - - - + + + Edit + + + +
@@ -45,6 +188,50 @@ IEnumerable Games { get; set; } = new List(); bool Loading = true; + bool FieldPickerVisible = false; + + Dictionary FieldVisibility = new Dictionary() + { + { Field.Icon, true }, + { Field.Title, true }, + { Field.SortTitle, true }, + { Field.ReleasedOn, true }, + { Field.CreatedOn, true }, + { Field.CreatedBy, true }, + { Field.UpdatedOn, true }, + { Field.UpdatedBy, true } + }; + + enum Field + { + Icon, + Title, + [Display(Name = "Sort Title")] + SortTitle, + [Display(Name = "Released On")] + ReleasedOn, + [Display(Name = "Created On")] + CreatedOn, + [Display(Name = "Created By")] + CreatedBy, + [Display(Name = "Updated On")] + UpdatedOn, + [Display(Name = "Updated By")] + UpdatedBy, + Singleplayer, + Multiplayer, + [Display(Name = "Total Keys")] + TotalKeys, + [Display(Name = "Keys Allocated")] + KeysAllocated, + Developers, + Publishers, + Genres, + [Display(Name = "Multiplayer Modes")] + MultiplayerModes, + [Display(Name = "Archive Size")] + ArchiveSize, + } protected override void OnAfterRender(bool firstRender) { @@ -58,6 +245,16 @@ } } + private bool FieldVisible(Field field) + { + return FieldVisibility.ContainsKey(field) && FieldVisibility[field] == true; + } + + private void ChangeFieldVisibility(Field field, bool state) + { + FieldVisibility[field] = state; + } + private string GetIcon(Game game) { return $"/api/Games/{game.Id}/Icon.png";