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";