completed client state invalidation in multi-user environment

This commit is contained in:
Shaun Walker
2020-03-10 10:37:42 -04:00
parent 834b1476d4
commit 155c4e12d9
47 changed files with 104 additions and 143 deletions

View File

@ -152,7 +152,7 @@
}
await FolderService.UpdateFolderOrderAsync(folder.SiteId, folder.FolderId, folder.ParentId);
await logger.LogInformation("Folder Saved {Folder}", folder);
NavigationManager.NavigateTo(NavigateUrl(Reload.Site));
NavigationManager.NavigateTo(NavigateUrl());
}
else
{

View File

@ -117,7 +117,7 @@
{
await logger.LogInformation("Login Successful For Username {Username}", Username);
authstateprovider.NotifyAuthenticationChanged();
NavigationManager.NavigateTo(NavigateUrl(ReturnUrl, Reload.Site));
NavigationManager.NavigateTo(NavigateUrl(ReturnUrl));
}
else
{

View File

@ -72,7 +72,7 @@
try
{
await ModuleDefinitionService.InstallModuleDefinitionsAsync();
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{

View File

@ -71,7 +71,7 @@
moduledefinition.Permissions = permissiongrid.GetPermissions();
await ModuleDefinitionService.UpdateModuleDefinitionAsync(moduledefinition);
await logger.LogInformation("ModuleDefinition Saved {ModuleDefinition}", moduledefinition);
NavigationManager.NavigateTo(NavigateUrl(Reload.Site));
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{

View File

@ -78,7 +78,7 @@ else
await PackageService.DownloadPackageAsync(moduledefinitionname, version, "Modules");
await ModuleDefinitionService.InstallModuleDefinitionsAsync();
await logger.LogInformation("Module Downloaded {ModuleDefinitionName} {Version}", moduledefinitionname, version);
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{
@ -93,7 +93,7 @@ else
{
await ModuleDefinitionService.DeleteModuleDefinitionAsync(ModuleDefinition.ModuleDefinitionId, ModuleDefinition.SiteId);
await logger.LogInformation("Module Deleted {ModuleDefinition}", ModuleDefinition);
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{

View File

@ -33,7 +33,8 @@
try
{
await ModuleService.ImportModuleAsync(ModuleState.ModuleId, content);
NavigationManager.NavigateTo(NavigateUrl(Reload.Page));
StateHasChanged();
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{

View File

@ -115,7 +115,7 @@
moduleType.GetMethod("UpdateSettings").Invoke(settings, null); // method must be public in settings component
}
NavigationManager.NavigateTo(NavigateUrl(Reload.Page));
NavigationManager.NavigateTo(NavigateUrl());
}
}

View File

@ -315,7 +315,7 @@
await PageService.UpdatePageOrderAsync(page.SiteId, page.PageId, page.ParentId);
await logger.LogInformation("Page Added {Page}", page);
NavigationManager.NavigateTo(NavigateUrl(page.Path, Reload.Site));
NavigationManager.NavigateTo(NavigateUrl(page.Path));
}
else
{

View File

@ -400,7 +400,7 @@
}
await logger.LogInformation("Page Saved {Page}", page);
NavigationManager.NavigateTo(NavigateUrl(page.Path, Reload.Site));
NavigationManager.NavigateTo(NavigateUrl(page.Path));
}
else
{

View File

@ -31,7 +31,7 @@
Page.IsDeleted = true;
await PageService.UpdatePageAsync(Page);
await logger.LogInformation("Page Deleted {Page}", Page);
NavigationManager.NavigateTo(NavigateUrl("admin/pages", Reload.Site));
NavigationManager.NavigateTo(NavigateUrl("admin/pages"));
}
catch (Exception ex)
{

View File

@ -117,7 +117,7 @@
await logger.LogInformation("Page Restored {Page}", Page);
await Load();
StateHasChanged();
NavigationManager.NavigateTo(NavigateUrl(Reload.Site));
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{
@ -134,7 +134,7 @@
await logger.LogInformation("Page Permanently Deleted {Page}", Page);
await Load();
StateHasChanged();
NavigationManager.NavigateTo(NavigateUrl(Reload.Site));
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{

View File

@ -329,7 +329,7 @@
await logger.LogInformation("Site Saved {Site}", site);
NavigationManager.NavigateTo(NavigateUrl(Reload.Site));
NavigationManager.NavigateTo(NavigateUrl());
}
}
else

View File

@ -243,7 +243,7 @@
await Log(Alias, LogLevel.Information, "Edit", null, "Site Saved {Site}", site);
NavigationManager.NavigateTo(NavigateUrl(Reload.Site));
NavigationManager.NavigateTo(NavigateUrl());
}
}
else

View File

@ -61,7 +61,7 @@ else
{
await AliasService.DeleteAliasAsync(alias.AliasId);
}
NavigationManager.NavigateTo(NavigateUrl(Reload.Site));
NavigationManager.NavigateTo(NavigateUrl());
}
else
{

View File

@ -61,7 +61,7 @@
private async Task InstallThemes()
{
await ThemeService.InstallThemesAsync();
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
private async Task DownloadTheme(string packageid, string version)

View File

@ -66,13 +66,13 @@ else
await PackageService.DownloadPackageAsync(themename, version, "Themes");
await logger.LogInformation("Theme Downloaded {ThemeName} {Version}", themename, version);
await ThemeService.InstallThemesAsync();
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
private async Task DeleteTheme(Theme Theme)
{
await ThemeService.DeleteThemeAsync(Theme.ThemeName);
await logger.LogInformation("Theme Deleted {Theme}", Theme);
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
}

View File

@ -47,13 +47,13 @@
private async Task Upgrade()
{
await InstallationService.Upgrade();
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
private async Task Download(string packageid, string version)
{
await PackageService.DownloadPackageAsync(packageid, version, "Framework");
await InstallationService.Upgrade();
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
}

View File

@ -189,7 +189,7 @@
await htmltextservice.AddHtmlTextAsync(htmltext);
}
await logger.LogInformation("Html/Text Content Saved {HtmlText}", htmltext);
NavigationManager.NavigateTo(NavigateUrl(Reload.Page));
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{

View File

@ -0,0 +1,10 @@
namespace Oqtane.Modules
{
public enum MessageType
{
Success,
Info,
Warning,
Error
}
}

View File

@ -2,9 +2,9 @@
using Oqtane.Shared;
using Oqtane.Models;
using System.Threading.Tasks;
using System.Linq;
using Oqtane.Services;
using System;
using Oqtane.UI;
namespace Oqtane.Modules
{
@ -49,29 +49,14 @@ namespace Oqtane.Modules
return NavigateUrl(PageState.Page.Path);
}
public string NavigateUrl(Reload reload)
{
return NavigateUrl(PageState.Page.Path, reload);
}
public string NavigateUrl(string path)
{
return NavigateUrl(path, "", Reload.None);
}
public string NavigateUrl(string path, Reload reload)
{
return NavigateUrl(path, "", reload);
return NavigateUrl(path, "");
}
public string NavigateUrl(string path, string parameters)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, Reload.None);
}
public string NavigateUrl(string path, string parameters, Reload reload)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, reload);
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters);
}
public string EditUrl(string action)

View File

@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using Oqtane.Models;
using Oqtane.Shared;
using Oqtane.UI;
namespace Oqtane.Services
{

View File

@ -1,11 +0,0 @@
using Oqtane.Models;
namespace Oqtane.Shared
{
// this class is used for passing state between Blazor components and Services
public class SiteState
{
public Alias Alias { get; set; }
}
}

View File

@ -2,8 +2,7 @@
using Microsoft.JSInterop;
using Oqtane.Shared;
using Oqtane.Models;
using System.Threading.Tasks;
using System.Linq;
using Oqtane.UI;
namespace Oqtane.Themes
{
@ -30,29 +29,14 @@ namespace Oqtane.Themes
return NavigateUrl(PageState.Page.Path);
}
public string NavigateUrl(Reload reload)
{
return NavigateUrl(PageState.Page.Path, reload);
}
public string NavigateUrl(string path)
{
return NavigateUrl(path, "", Reload.None);
}
public string NavigateUrl(string path, Reload reload)
{
return NavigateUrl(path, "", reload);
return NavigateUrl(path, "");
}
public string NavigateUrl(string path, string parameters)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, Reload.None);
}
public string NavigateUrl(string path, string parameters, Reload reload)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, reload);
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters);
}
public string EditUrl(string action, string parameters)

View File

@ -29,9 +29,12 @@
<button type="button" class="btn btn-primary btn-block mx-auto" @onclick=@(async () => Navigate("Admin"))>Admin Dashboard</button>
</div>
</div>
<hr class="app-rule" />
<div class="row">
<div class="col">
<label class="control-label">Page: </label>
<div class="col text-center">
<label class="control-label">Page Management: </label>
</div>
</div>
<div class="row">
@ -69,10 +72,10 @@
</div>
</div>
}
<hr class="app-rule"/>
<hr class="app-rule" />
<div class="row">
<div class="col">
<div class="col text-center">
<label for="Module" class="control-label">Module: </label>
<select class="form-control" @bind="@_moduleType">
<option value="new">Add New Module</option>
@ -121,17 +124,17 @@
</div>
</div>
<div class="row">
<div class="col">
<div class="col text-center">
<label for="Title" class="control-label">Title: </label>
<input type="text" name="Title" class="form-control" @bind="@_title"/>
<input type="text" name="Title" class="form-control" @bind="@_title" />
</div>
</div>
<div class="row">
<div class="col">
<div class="col text-center">
<label for="Pane" class="control-label">Pane: </label>
<select class="form-control" @bind="@_pane">
<option value="">&lt;Select Pane&gt;</option>
@foreach (string pane in PageState.Page.Panes.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries))
@foreach (string pane in PageState.Page.Panes.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
{
<option value="@pane">@pane Pane</option>
}
@ -139,7 +142,7 @@
</div>
</div>
<div class="row">
<div class="col">
<div class="col text-center">
<label for="Container" class="control-label">Container: </label>
<select class="form-control" @bind="@_containerType">
@foreach (KeyValuePair<string, string> container in _containers)
@ -150,6 +153,8 @@
</div>
</div>
<br />
<button type="button" class="btn btn-primary btn-block mx-auto" @onclick="@AddModule">Add Module To Page</button>
@((MarkupString) _message)
</div>
@ -325,7 +330,7 @@
var pageModule = new PageModule
{
PageId = (_pageId == "-") ? PageState.Page.PageId : int.Parse(_pageId),
PageId = PageState.Page.PageId,
ModuleId = int.Parse(_moduleId),
Title = _title
};
@ -361,7 +366,7 @@
_pageId = "-";
_moduleId = "-";
NavigationManager.NavigateTo(NavigateUrl(Reload.Page));
NavigationManager.NavigateTo(NavigateUrl());
}
else
{
@ -386,7 +391,7 @@
{
PageState.EditMode = true;
}
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0"), Reload.Page));
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0")));
}
else
{
@ -394,7 +399,7 @@
{
await PageService.AddPageAsync(PageState.Page.PageId, PageState.User.UserId);
PageState.EditMode = true;
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0"), Reload.Page));
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0")));
}
}
}
@ -469,13 +474,13 @@
page.IsDeleted = true;
await PageService.UpdatePageAsync(page);
await logger.Log(page.PageId, null, PageState.User.UserId, GetType().AssemblyQualifiedName, "ControlPanel", LogFunction.Delete, LogLevel.Information, null, "Page Deleted {Page}", page);
NavigationManager.NavigateTo(NavigateUrl("", Reload.Site));
NavigationManager.NavigateTo(NavigateUrl(""));
}
else // personalized page
{
await PageService.DeletePageAsync(page.PageId);
await logger.Log(page.PageId, null, PageState.User.UserId, GetType().AssemblyQualifiedName, "ControlPanel", LogFunction.Delete, LogLevel.Information, null, "Page Deleted {Page}", page);
NavigationManager.NavigateTo(NavigateUrl(Reload.Page));
NavigationManager.NavigateTo(NavigateUrl());
}
}
catch (Exception ex)

View File

@ -46,7 +46,7 @@
{
// client-side Blazor
authstateprovider.NotifyAuthenticationChanged();
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "logout", Reload.Site));
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "logout"));
}
}
}

View File

@ -70,7 +70,7 @@
{
PageModule pagemodule = await PageModuleService.GetPageModuleAsync(ModuleState.PageModuleId);
string url = NavigateUrl(Reload.Page);
string url = NavigateUrl();
switch (action)
{
case "<<":

View File

@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Components;
using Oqtane.Shared;
using Oqtane.UI;
namespace Oqtane.Themes
{

View File

@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using Oqtane.Shared;
using Oqtane.UI;
using System.Threading.Tasks;
namespace Oqtane.Themes
@ -34,29 +35,14 @@ namespace Oqtane.Themes
return NavigateUrl(PageState.Page.Path);
}
public string NavigateUrl(Reload reload)
{
return NavigateUrl(PageState.Page.Path, reload);
}
public string NavigateUrl(string path)
{
return NavigateUrl(path, "", Reload.None);
}
public string NavigateUrl(string path, Reload reload)
{
return NavigateUrl(path, "", reload);
return NavigateUrl(path, "");
}
public string NavigateUrl(string path, string parameters)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, Reload.None);
}
public string NavigateUrl(string path, string parameters, Reload reload)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, reload);
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters);
}
public string EditUrl(int moduleid, string action)

View File

@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Components;
using Oqtane.Shared;
using Oqtane.UI;
namespace Oqtane.Themes
{
@ -13,29 +14,14 @@ namespace Oqtane.Themes
return NavigateUrl(PageState.Page.Path);
}
public string NavigateUrl(Reload reload)
{
return NavigateUrl(PageState.Page.Path, reload);
}
public string NavigateUrl(string path)
{
return NavigateUrl(path, "", Reload.None);
}
public string NavigateUrl(string path, Reload reload)
{
return NavigateUrl(path, "", reload);
return NavigateUrl(path, "");
}
public string NavigateUrl(string path, string parameters)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, Reload.None);
}
public string NavigateUrl(string path, string parameters, Reload reload)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, reload);
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters);
}
public string EditUrl(int moduleid, string action)

View File

@ -1,4 +1,4 @@
@namespace Oqtane.Shared
@namespace Oqtane.UI
<CascadingValue Value="@ModuleState">
@DynamicComponent

View File

@ -1,4 +1,4 @@
@namespace Oqtane.Shared
@namespace Oqtane.UI
@inject NavigationManager NavigationManager
@inject IInstallationService InstallationService
@inject ISiteService SiteService

View File

@ -3,7 +3,7 @@ using Microsoft.JSInterop;
using System;
using System.Threading.Tasks;
namespace Oqtane.Shared
namespace Oqtane.UI
{
public class Interop
{

View File

@ -1,4 +1,4 @@
@namespace Oqtane.Shared
@namespace Oqtane.UI
<ModuleMessage Message="@message" Type="MessageType.Error" />
<CascadingValue Value="this">

View File

@ -2,7 +2,7 @@
using System.Collections.Generic;
using Oqtane.Models;
namespace Oqtane.Shared
namespace Oqtane.UI
{
public class PageState
{

View File

@ -1,4 +1,4 @@
@namespace Oqtane.Shared
@namespace Oqtane.UI
@inject IUserService UserService
@inject IModuleService ModuleService
@inject IModuleDefinitionService ModuleDefinitionService

View File

@ -1,4 +1,4 @@
@namespace Oqtane.Shared
@namespace Oqtane.UI
@DynamicComponent

View File

@ -0,0 +1,10 @@
namespace Oqtane.UI
{
public enum Reload
{
None,
Page,
Site,
Application
}
}

View File

@ -2,7 +2,7 @@
using Microsoft.JSInterop;
using System.Threading.Tasks;
namespace Oqtane.Modules.Controls
namespace Oqtane.UI
{
public static class RichTextEditorInterop
{

View File

@ -1,4 +1,4 @@
@namespace Oqtane.Shared
@namespace Oqtane.UI
@inject AuthenticationStateProvider AuthenticationStateProvider
@inject SiteState SiteState
@inject NavigationManager NavigationManager
@ -92,10 +92,6 @@
querystring = ParseQueryString(path);
path = path.Substring(0, path.IndexOf("?"));
}
if (querystring.ContainsKey("reload"))
{
reload = (Reload)int.Parse(querystring["reload"]);
}
if (PageState != null)
{

View File

@ -1,4 +1,4 @@
@namespace Oqtane.Shared
@namespace Oqtane.UI
@inject IJSRuntime jsRuntime
@DynamicComponent

View File

@ -16,4 +16,5 @@
@using Oqtane.Services
@using Oqtane.Shared
@using Oqtane.Themes
@using Oqtane.Themes.Controls
@using Oqtane.Themes.Controls
@using Oqtane.UI