Use ProtectedSessionStorage to for add server wizard.
And replace the URL query string with it.
This commit is contained in:
parent
28c3449e24
commit
a25e767b29
@ -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}");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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}");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
33
ServerManagement/Components/StateStore/SessionStorage.cs
Normal file
33
ServerManagement/Components/StateStore/SessionStorage.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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
|
||||||
@ -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.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user