From a25e767b296e12b86b4272bc33880695450581c3 Mon Sep 17 00:00:00 2001 From: Kevin Matsubara Date: Sun, 30 Mar 2025 19:56:47 +0200 Subject: [PATCH] Use ProtectedSessionStorage to for add server wizard. And replace the URL query string with it. --- .../Pages/Wizards/SetCityName.razor | 53 ++++++------- .../Pages/Wizards/SetServerName.razor | 43 +++++++---- .../Components/Pages/Wizards/SetStatus.razor | 75 +++++++------------ .../Components/StateStore/SessionStorage.cs | 33 ++++++++ ServerManagement/Components/_Imports.razor | 3 +- ServerManagement/Program.cs | 3 + 6 files changed, 123 insertions(+), 87 deletions(-) create mode 100644 ServerManagement/Components/StateStore/SessionStorage.cs diff --git a/ServerManagement/Components/Pages/Wizards/SetCityName.razor b/ServerManagement/Components/Pages/Wizards/SetCityName.razor index 6e88347..1db2cf9 100644 --- a/ServerManagement/Components/Pages/Wizards/SetCityName.razor +++ b/ServerManagement/Components/Pages/Wizards/SetCityName.razor @@ -1,6 +1,9 @@ @page "/cityname" +@using ServerManagement.StateStore + @inject NavigationManager NavigationManager +@inject SessionStorage sessionStorage

City Name


@@ -12,17 +15,20 @@ } - - - - - -
- +@if (server != null) +{ + + + + + +
+ +} @code { + private Server? server; private string? errorMessage; - private string? cityName; [SupplyParameterFromQuery] private string? ServerName { get; set; } @@ -32,31 +38,28 @@ base.OnInitialized(); } - protected override void OnAfterRender(bool firstRender) + protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { - if (string.IsNullOrWhiteSpace(ServerName)) - { - this.errorMessage = "Server name was not provided."; - StateHasChanged(); - } + this.server = await sessionStorage.GetServerAsync(); + StateHasChanged(); } } - private void GoNext() + private async Task GoNext() { - if (string.IsNullOrWhiteSpace(ServerName)) + if (server != null) { - this.errorMessage = "Server name is required."; - return; + if (string.IsNullOrWhiteSpace(server.City)) + { + this.errorMessage = "City name is required."; + } + else + { + await this.sessionStorage.SetServerAsync(server); + NavigationManager.NavigateTo($"/serverstatus"); + } } - if (string.IsNullOrWhiteSpace(cityName)) - { - this.errorMessage = "City name is required."; - return; - } - - NavigationManager.NavigateTo($"/serverstatus?servername={ServerName}&cityname={cityName}"); } } \ No newline at end of file diff --git a/ServerManagement/Components/Pages/Wizards/SetServerName.razor b/ServerManagement/Components/Pages/Wizards/SetServerName.razor index 872243e..0ea9158 100644 --- a/ServerManagement/Components/Pages/Wizards/SetServerName.razor +++ b/ServerManagement/Components/Pages/Wizards/SetServerName.razor @@ -1,6 +1,9 @@ @page "/servername" +@using ServerManagement.StateStore + @inject NavigationManager NavigationManager +@inject SessionStorage sessionStorage

Server Name


@@ -12,31 +15,45 @@ } - - - - - -
- +@if (server != null) +{ + + + + + +
+ +} @code { + private Server? server; private string? errorMessage; - private string? serverName; protected override void OnInitialized() { base.OnInitialized(); } - private void GoNext() + protected override void OnAfterRender(bool firstRender) { - if (string.IsNullOrWhiteSpace(serverName)) + if (firstRender) + { + server = new Server(); + StateHasChanged(); + } + } + + private async Task GoNext() + { + if (string.IsNullOrWhiteSpace(server?.Name)) { this.errorMessage = "Server name is required."; - return; } - - NavigationManager.NavigateTo($"/cityname?servername={serverName}"); + else + { + await sessionStorage.SetServerAsync(server); + NavigationManager.NavigateTo($"/cityname"); + } } } \ No newline at end of file diff --git a/ServerManagement/Components/Pages/Wizards/SetStatus.razor b/ServerManagement/Components/Pages/Wizards/SetStatus.razor index 3c4ebd2..f6995d2 100644 --- a/ServerManagement/Components/Pages/Wizards/SetStatus.razor +++ b/ServerManagement/Components/Pages/Wizards/SetStatus.razor @@ -1,76 +1,55 @@ @page "/serverstatus" +@using ServerManagement.StateStore + @inject NavigationManager NavigationManager +@inject SessionStorage sessionStorage

Server Status


-@if (!string.IsNullOrWhiteSpace(errorMessage)) +@if (server != null) { -
- @errorMessage -
+ + + @if (server.IsOnline) + { + + } + else + { + + } + + +
+ } - - - - - -
- - @code { - private string? errorMessage; - private bool isOnline; - [SupplyParameterFromQuery] - private string? CityName { get; set; } - - [SupplyParameterFromQuery] - private string? ServerName { get; set; } + private Server? server; protected override void OnInitialized() { base.OnInitialized(); } - protected override void OnAfterRender(bool firstRender) + protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { - if (string.IsNullOrWhiteSpace(ServerName)) - { - this.errorMessage = "Server name was not provided."; - StateHasChanged(); - } - else if (string.IsNullOrWhiteSpace(CityName)) - { - this.errorMessage = "City name was not provided."; - StateHasChanged(); - } + this.server = await sessionStorage.GetServerAsync(); + StateHasChanged(); } } - private void Save() + private async Task Save() { - if (string.IsNullOrWhiteSpace(ServerName)) + if (server != null) { - this.errorMessage = "Server name is required."; - return; + await sessionStorage.SetServerAsync(null); + ServersRepository.AddServer(server); + NavigationManager.NavigateTo($"/servers/back_from/{server?.City}"); } - if (string.IsNullOrWhiteSpace(CityName)) - { - this.errorMessage = "City name is required."; - return; - } - - var server = new Server - { - Name = this.ServerName, - City = this.CityName, - IsOnline = this.isOnline - }; - ServersRepository.AddServer(server); - NavigationManager.NavigateTo($"/servers/back_from/{CityName}"); } } \ No newline at end of file diff --git a/ServerManagement/Components/StateStore/SessionStorage.cs b/ServerManagement/Components/StateStore/SessionStorage.cs new file mode 100644 index 0000000..41e570a --- /dev/null +++ b/ServerManagement/Components/StateStore/SessionStorage.cs @@ -0,0 +1,33 @@ +using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage; +using ServerManagement.Models; + +namespace ServerManagement.StateStore +{ + public class SessionStorage + { + private readonly ProtectedSessionStorage protectedSessionStorage; + + public SessionStorage(ProtectedSessionStorage protectedSessionStorage) + { + this.protectedSessionStorage = protectedSessionStorage; + } + + public async Task GetServerAsync() + { + var result = await this.protectedSessionStorage.GetAsync("server"); + if (result.Success) + { + return result.Value; + } + else + { + return null; + } + } + + public async Task SetServerAsync(Server? server) + { + await this.protectedSessionStorage.SetAsync("server", server); + } + } +} diff --git a/ServerManagement/Components/_Imports.razor b/ServerManagement/Components/_Imports.razor index 457bc73..c5ebe79 100644 --- a/ServerManagement/Components/_Imports.razor +++ b/ServerManagement/Components/_Imports.razor @@ -10,4 +10,5 @@ @using ServerManagement.Components @using ServerManagement.Components.Controls @using ServerManagement.Components.Controls.Generic -@using ServerManagement.Models \ No newline at end of file +@using ServerManagement.Models +@using ServerManagement.StateStore \ No newline at end of file diff --git a/ServerManagement/Program.cs b/ServerManagement/Program.cs index a9fbd5e..7fb926a 100644 --- a/ServerManagement/Program.cs +++ b/ServerManagement/Program.cs @@ -1,4 +1,5 @@ using ServerManagement.Components; +using ServerManagement.StateStore; var builder = WebApplication.CreateBuilder(args); @@ -6,6 +7,8 @@ var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorComponents() .AddInteractiveServerComponents(); // Provides server interactivity. +builder.Services.AddTransient(); + var app = builder.Build(); // Configure the HTTP request pipeline.