From 2b2eb2cf7534b7a0a51156aece4894d2f39a1929 Mon Sep 17 00:00:00 2001 From: Pat Hartl Date: Sat, 11 Feb 2023 21:40:45 -0600 Subject: [PATCH] Keys list and edit pages --- LANCommander/LANCommander.csproj | 1 + LANCommander/Pages/Games/Keys/Edit.razor | 65 +++++++++++++++++++++++ LANCommander/Pages/Games/Keys/Index.razor | 61 +++++++++++++++++++++ LANCommander/Pages/_Layout.cshtml | 3 ++ LANCommander/_Imports.razor | 2 + 5 files changed, 132 insertions(+) create mode 100644 LANCommander/Pages/Games/Keys/Edit.razor create mode 100644 LANCommander/Pages/Games/Keys/Index.razor diff --git a/LANCommander/LANCommander.csproj b/LANCommander/LANCommander.csproj index 2dcae15..959f468 100644 --- a/LANCommander/LANCommander.csproj +++ b/LANCommander/LANCommander.csproj @@ -20,6 +20,7 @@ + diff --git a/LANCommander/Pages/Games/Keys/Edit.razor b/LANCommander/Pages/Games/Keys/Edit.razor new file mode 100644 index 0000000..3c7ec94 --- /dev/null +++ b/LANCommander/Pages/Games/Keys/Edit.razor @@ -0,0 +1,65 @@ +@page "/Games/{id:guid}/Keys/Edit" +@inject GameService GameService +@inject KeyService KeyService +@inject NavigationManager NavigationManager + + + + + + + + + + + + + +@code { + [Parameter] public Guid Id { get; set; } + + private Game Game { get; set; } + + private StandaloneCodeEditor Editor; + + private StandaloneEditorConstructionOptions EditorConstructionOptions(StandaloneCodeEditor editor) + { + return new StandaloneEditorConstructionOptions + { + AutomaticLayout = true, + Language = "text", + Value = String.Join('\n', Game.Keys.Select(k => k.Value)), + Theme = "vs-dark", + }; + } + + protected override async Task OnInitializedAsync() + { + Game = await GameService.Get(Id); + } + + private async Task Save() + { + var value = await Editor.GetValue(); + var keys = value.Split("\n").Select(k => k.Trim()).Where(k => !String.IsNullOrWhiteSpace(k)); + + var keysDeleted = Game.Keys.Where(k => !keys.Contains(k.Value)); + var keysAdded = keys.Where(k => !Game.Keys.Any(gk => gk.Value == k)); + + foreach (var key in keysDeleted) + KeyService.Delete(key); + + foreach (var key in keysAdded) + await KeyService.Add(new Key() + { + Game = Game, + Value = key + }); + + NavigationManager.NavigateTo($"/Games/{Game.Id}/Keys"); + } +} diff --git a/LANCommander/Pages/Games/Keys/Index.razor b/LANCommander/Pages/Games/Keys/Index.razor new file mode 100644 index 0000000..918d5c0 --- /dev/null +++ b/LANCommander/Pages/Games/Keys/Index.razor @@ -0,0 +1,61 @@ +@page "/Games/{id:guid}/Keys" +@inject GameService GameService +@inject KeyService KeyService + + + + Keys + + Edit + + + + Key + Allocation Method + Claimed By + Claimed On + + + + + @context.Value + @context.AllocationMethod + + @switch (context.AllocationMethod) + { + case KeyAllocationMethod.MacAddress: + @context.ClaimedByMacAddress + break; + + case KeyAllocationMethod.UserAccount: + @context.ClaimedByUser?.UserName + break; + } + + @context.ClaimedOn + + @if ((context.AllocationMethod == KeyAllocationMethod.MacAddress && !String.IsNullOrWhiteSpace(context.ClaimedByMacAddress)) || (context.AllocationMethod == KeyAllocationMethod.UserAccount && context.ClaimedByUser != null)) + { + Release + } + + + + +@code { + [Parameter] public Guid Id { get; set; } + + private ICollection Keys { get; set; } + + protected override async Task OnInitializedAsync() + { + var game = await GameService.Get(Id); + + Keys = game.Keys; + } + + private async Task Release(Key key) + { + key = await KeyService.Release(key); + } +} diff --git a/LANCommander/Pages/_Layout.cshtml b/LANCommander/Pages/_Layout.cshtml index d82ac1f..42a7704 100644 --- a/LANCommander/Pages/_Layout.cshtml +++ b/LANCommander/Pages/_Layout.cshtml @@ -22,5 +22,8 @@ + + + diff --git a/LANCommander/_Imports.razor b/LANCommander/_Imports.razor index ff420ec..eea0492 100644 --- a/LANCommander/_Imports.razor +++ b/LANCommander/_Imports.razor @@ -5,6 +5,8 @@ @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using MudBlazor +@using BlazorMonaco +@using BlazorMonaco.Editor @using LANCommander.Components @using LANCommander.Shared @using LANCommander.Services