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"
@using ServerManagement.StateStore
@inject NavigationManager NavigationManager
@inject SessionStorage sessionStorage
<h3>City Name</h3>
<br/>
@ -12,17 +15,20 @@
</div>
}
<FieldComponent Label="City name">
<Control>
<input type="text" @bind-value="cityName" class="form-control"></input>
</Control>
</FieldComponent>
<br/>
<button type="button" class="btn btn-primary" @onclick="GoNext">Next</button>
@if (server != null)
{
<FieldComponent Label="City name">
<Control>
<input type="text" @bind-value="server.City" class="form-control"></input>
</Control>
</FieldComponent>
<br/>
<button type="button" class="btn btn-primary" @onclick="GoNext">Next</button>
}
@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.server = await sessionStorage.GetServerAsync();
StateHasChanged();
}
}
private async Task GoNext()
{
if (server != null)
{
if (string.IsNullOrWhiteSpace(server.City))
{
this.errorMessage = "Server name was not provided.";
StateHasChanged();
this.errorMessage = "City name is required.";
}
else
{
await this.sessionStorage.SetServerAsync(server);
NavigationManager.NavigateTo($"/serverstatus");
}
}
}
private void GoNext()
{
if (string.IsNullOrWhiteSpace(ServerName))
{
this.errorMessage = "Server name is required.";
return;
}
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"
@using ServerManagement.StateStore
@inject NavigationManager NavigationManager
@inject SessionStorage sessionStorage
<h3>Server Name</h3>
<br/>
@ -12,31 +15,45 @@
</div>
}
<FieldComponent Label="Server name">
<Control>
<input type="text" @bind-value="serverName" class="form-control"></input>
</Control>
</FieldComponent>
<br/>
<button type="button" class="btn btn-primary" @onclick="GoNext">Next</button>
@if (server != null)
{
<FieldComponent Label="Server name">
<Control>
<input type="text" @bind-value="server.Name" class="form-control"></input>
</Control>
</FieldComponent>
<br/>
<button type="button" class="btn btn-primary" @onclick="GoNext">Next</button>
}
@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");
}
}
}

View File

@ -1,76 +1,55 @@
@page "/serverstatus"
@using ServerManagement.StateStore
@inject NavigationManager NavigationManager
@inject SessionStorage sessionStorage
<h3>Server Status</h3>
<br/>
@if (!string.IsNullOrWhiteSpace(errorMessage))
@if (server != null)
{
<div class="alert alert-danger">
@errorMessage
</div>
<FieldComponent Label="Server status online">
<Control>
@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 {
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}");
}
}

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

@ -11,3 +11,4 @@
@using ServerManagement.Components.Controls
@using ServerManagement.Components.Controls.Generic
@using ServerManagement.Models
@using ServerManagement.StateStore

View File

@ -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<SessionStorage>();
var app = builder.Build();
// Configure the HTTP request pipeline.