1
0

Use ProtectedSessionStorage to for add server wizard.

And replace the URL query string with it.
This commit is contained in:
Kevin Matsubara 2025-03-30 19:56:47 +02:00
parent 28c3449e24
commit a25e767b29
6 changed files with 123 additions and 87 deletions

View File

@ -1,6 +1,9 @@
@page "/cityname" @page "/cityname"
@using ServerManagement.StateStore
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject SessionStorage sessionStorage
<h3>City Name</h3> <h3>City Name</h3>
<br/> <br/>
@ -12,17 +15,20 @@
</div> </div>
} }
<FieldComponent Label="City name"> @if (server != null)
<Control> {
<input type="text" @bind-value="cityName" class="form-control"></input> <FieldComponent Label="City name">
</Control> <Control>
</FieldComponent> <input type="text" @bind-value="server.City" class="form-control"></input>
<br/> </Control>
<button type="button" class="btn btn-primary" @onclick="GoNext">Next</button> </FieldComponent>
<br/>
<button type="button" class="btn btn-primary" @onclick="GoNext">Next</button>
}
@code { @code {
private Server? server;
private string? errorMessage; private string? errorMessage;
private string? cityName;
[SupplyParameterFromQuery] [SupplyParameterFromQuery]
private string? ServerName { get; set; } private string? ServerName { get; set; }
@ -32,31 +38,28 @@
base.OnInitialized(); base.OnInitialized();
} }
protected override void OnAfterRender(bool firstRender) protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
if (firstRender) if (firstRender)
{ {
if (string.IsNullOrWhiteSpace(ServerName)) this.server = await sessionStorage.GetServerAsync();
{ StateHasChanged();
this.errorMessage = "Server name was not provided.";
StateHasChanged();
}
} }
} }
private void GoNext() private async Task GoNext()
{ {
if (string.IsNullOrWhiteSpace(ServerName)) if (server != null)
{ {
this.errorMessage = "Server name is required."; if (string.IsNullOrWhiteSpace(server.City))
return; {
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}");
} }
} }

View File

@ -1,6 +1,9 @@
@page "/servername" @page "/servername"
@using ServerManagement.StateStore
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject SessionStorage sessionStorage
<h3>Server Name</h3> <h3>Server Name</h3>
<br/> <br/>
@ -12,31 +15,45 @@
</div> </div>
} }
<FieldComponent Label="Server name"> @if (server != null)
<Control> {
<input type="text" @bind-value="serverName" class="form-control"></input> <FieldComponent Label="Server name">
</Control> <Control>
</FieldComponent> <input type="text" @bind-value="server.Name" class="form-control"></input>
<br/> </Control>
<button type="button" class="btn btn-primary" @onclick="GoNext">Next</button> </FieldComponent>
<br/>
<button type="button" class="btn btn-primary" @onclick="GoNext">Next</button>
}
@code { @code {
private Server? server;
private string? errorMessage; private string? errorMessage;
private string? serverName;
protected override void OnInitialized() protected override void OnInitialized()
{ {
base.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."; this.errorMessage = "Server name is required.";
return;
} }
else
NavigationManager.NavigateTo($"/cityname?servername={serverName}"); {
await sessionStorage.SetServerAsync(server);
NavigationManager.NavigateTo($"/cityname");
}
} }
} }

View File

@ -1,76 +1,55 @@
@page "/serverstatus" @page "/serverstatus"
@using ServerManagement.StateStore
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject SessionStorage sessionStorage
<h3>Server Status</h3> <h3>Server Status</h3>
<br/> <br/>
@if (!string.IsNullOrWhiteSpace(errorMessage)) @if (server != null)
{ {
<div class="alert alert-danger"> <FieldComponent Label="Server status online">
@errorMessage <Control>
</div> @if (server.IsOnline)
{
<input type="checkbox" @bind-value="server.IsOnline" class="form-check-input"></input>
}
else
{
<input type="checkbox" @bind-value="server.IsOnline" class="form-check-input" checked></input>
}
</Control>
</FieldComponent>
<br/>
<button type="button" class="btn btn-primary" @onclick="Save">Save</button>
} }
<FieldComponent Label="Server status online">
<Control>
<input type="checkbox" @bind-value="isOnline" class="form-check-input"></input>
</Control>
</FieldComponent>
<br/>
<button type="button" class="btn btn-primary" @onclick="Save">Save</button>
@code { @code {
private string? errorMessage; private Server? server;
private bool isOnline;
[SupplyParameterFromQuery]
private string? CityName { get; set; }
[SupplyParameterFromQuery]
private string? ServerName { get; set; }
protected override void OnInitialized() protected override void OnInitialized()
{ {
base.OnInitialized(); base.OnInitialized();
} }
protected override void OnAfterRender(bool firstRender) protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
if (firstRender) if (firstRender)
{ {
if (string.IsNullOrWhiteSpace(ServerName)) this.server = await sessionStorage.GetServerAsync();
{ StateHasChanged();
this.errorMessage = "Server name was not provided.";
StateHasChanged();
}
else if (string.IsNullOrWhiteSpace(CityName))
{
this.errorMessage = "City name was not provided.";
StateHasChanged();
}
} }
} }
private void Save() private async Task Save()
{ {
if (string.IsNullOrWhiteSpace(ServerName)) if (server != null)
{ {
this.errorMessage = "Server name is required."; await sessionStorage.SetServerAsync(null);
return; 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}");
} }
} }

View File

@ -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<Server?> GetServerAsync()
{
var result = await this.protectedSessionStorage.GetAsync<Server>("server");
if (result.Success)
{
return result.Value;
}
else
{
return null;
}
}
public async Task SetServerAsync(Server? server)
{
await this.protectedSessionStorage.SetAsync("server", server);
}
}
}

View File

@ -10,4 +10,5 @@
@using ServerManagement.Components @using ServerManagement.Components
@using ServerManagement.Components.Controls @using ServerManagement.Components.Controls
@using ServerManagement.Components.Controls.Generic @using ServerManagement.Components.Controls.Generic
@using ServerManagement.Models @using ServerManagement.Models
@using ServerManagement.StateStore

View File

@ -1,4 +1,5 @@
using ServerManagement.Components; using ServerManagement.Components;
using ServerManagement.StateStore;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
@ -6,6 +7,8 @@ var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorComponents() builder.Services.AddRazorComponents()
.AddInteractiveServerComponents(); // Provides server interactivity. .AddInteractiveServerComponents(); // Provides server interactivity.
builder.Services.AddTransient<SessionStorage>();
var app = builder.Build(); var app = builder.Build();
// Configure the HTTP request pipeline. // Configure the HTTP request pipeline.