load PageState in App component and pass to SiteRouter to optimize data loading
This commit is contained in:
parent
ebadccbe25
commit
dcc8043cf6
|
@ -25,6 +25,7 @@ namespace Oqtane.UI
|
||||||
public string ReturnUrl { get; set; }
|
public string ReturnUrl { get; set; }
|
||||||
public bool IsInternalNavigation { get; set; }
|
public bool IsInternalNavigation { get; set; }
|
||||||
public Guid RenderId { get; set; }
|
public Guid RenderId { get; set; }
|
||||||
|
public bool Refresh { get; set; }
|
||||||
|
|
||||||
public List<Page> Pages
|
public List<Page> Pages
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
@if (string.IsNullOrEmpty(_installation.Message))
|
@if (string.IsNullOrEmpty(_installation.Message))
|
||||||
{
|
{
|
||||||
<div style="@_display">
|
<div style="@_display">
|
||||||
<CascadingValue Value="@PageState">
|
<CascadingValue Value="@_pageState">
|
||||||
<SiteRouter RenderMode="@RenderMode" Runtime="@Runtime" VisitorId="@VisitorId" OnStateChange="@ChangeState" />
|
<SiteRouter RenderMode="@RenderMode" Runtime="@Runtime" OnStateChange="@ChangeState" />
|
||||||
</CascadingValue>
|
</CascadingValue>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public string AntiForgeryToken { get; set; }
|
public PageState PageState { get; set; } = null;
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public string RenderMode { get; set; }
|
public string RenderMode { get; set; }
|
||||||
|
@ -41,13 +41,10 @@
|
||||||
public string Runtime { get; set; }
|
public string Runtime { get; set; }
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public int VisitorId { get; set; }
|
public string AntiForgeryToken { get; set; } = "";
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public string RemoteIPAddress { get; set; }
|
public string AuthorizationToken { get; set; } = "";
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public string AuthorizationToken { get; set; }
|
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter]
|
||||||
HttpContext HttpContext { get; set; }
|
HttpContext HttpContext { get; set; }
|
||||||
|
@ -56,18 +53,23 @@
|
||||||
private string _display = "";
|
private string _display = "";
|
||||||
private Installation _installation = new Installation { Success = false, Message = "" };
|
private Installation _installation = new Installation { Success = false, Message = "" };
|
||||||
|
|
||||||
private PageState PageState { get; set; }
|
private PageState _pageState { get; set; }
|
||||||
|
|
||||||
protected override async Task OnParametersSetAsync()
|
protected override async Task OnParametersSetAsync()
|
||||||
{
|
{
|
||||||
|
if (PageState != null)
|
||||||
|
{
|
||||||
|
_pageState = PageState;
|
||||||
|
}
|
||||||
|
|
||||||
if (RenderMode == RenderModes.Interactive)
|
if (RenderMode == RenderModes.Interactive)
|
||||||
{
|
{
|
||||||
_display = "display: none;";
|
_display = "display: none;";
|
||||||
}
|
}
|
||||||
|
|
||||||
SiteState.RemoteIPAddress = RemoteIPAddress;
|
|
||||||
SiteState.AntiForgeryToken = AntiForgeryToken;
|
SiteState.AntiForgeryToken = AntiForgeryToken;
|
||||||
SiteState.AuthorizationToken = AuthorizationToken;
|
SiteState.AuthorizationToken = AuthorizationToken;
|
||||||
|
SiteState.RemoteIPAddress = (_pageState != null) ? _pageState.RemoteIPAddress : "";
|
||||||
SiteState.IsPrerendering = (HttpContext != null) ? true : false;
|
SiteState.IsPrerendering = (HttpContext != null) ? true : false;
|
||||||
|
|
||||||
_installation = await InstallationService.IsInstalled();
|
_installation = await InstallationService.IsInstalled();
|
||||||
|
@ -90,7 +92,7 @@
|
||||||
|
|
||||||
private void ChangeState(PageState pageState)
|
private void ChangeState(PageState pageState)
|
||||||
{
|
{
|
||||||
PageState = pageState;
|
_pageState = pageState;
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,9 +35,6 @@
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public string Runtime { get; set; }
|
public string Runtime { get; set; }
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public int VisitorId { get; set; }
|
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter]
|
||||||
PageState PageState { get; set; }
|
PageState PageState { get; set; }
|
||||||
|
|
||||||
|
@ -68,7 +65,7 @@
|
||||||
|
|
||||||
protected override async Task OnParametersSetAsync()
|
protected override async Task OnParametersSetAsync()
|
||||||
{
|
{
|
||||||
if (PageState == null)
|
if (PageState == null || PageState.Refresh)
|
||||||
{
|
{
|
||||||
await Refresh();
|
await Refresh();
|
||||||
}
|
}
|
||||||
|
@ -100,6 +97,7 @@
|
||||||
var editmode = false;
|
var editmode = false;
|
||||||
var refresh = false;
|
var refresh = false;
|
||||||
var lastsyncdate = DateTime.MinValue;
|
var lastsyncdate = DateTime.MinValue;
|
||||||
|
var visitorId = -1;
|
||||||
_error = "";
|
_error = "";
|
||||||
|
|
||||||
Route route = new Route(_absoluteUri, SiteState.Alias.Path);
|
Route route = new Route(_absoluteUri, SiteState.Alias.Path);
|
||||||
|
@ -148,6 +146,7 @@
|
||||||
{
|
{
|
||||||
editmode = PageState.EditMode;
|
editmode = PageState.EditMode;
|
||||||
lastsyncdate = PageState.LastSyncDate;
|
lastsyncdate = PageState.LastSyncDate;
|
||||||
|
visitorId = PageState.VisitorId;
|
||||||
}
|
}
|
||||||
if (PageState?.Page.Path != route.PagePath)
|
if (PageState?.Page.Path != route.PagePath)
|
||||||
{
|
{
|
||||||
|
@ -159,7 +158,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// get user
|
// get user
|
||||||
if (PageState == null || refresh || PageState.Alias.SiteId != SiteState.Alias.SiteId)
|
if (PageState == null || PageState.Refresh || refresh || PageState.Alias.SiteId != SiteState.Alias.SiteId)
|
||||||
{
|
{
|
||||||
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
||||||
// verify user is authenticated for current site
|
// verify user is authenticated for current site
|
||||||
|
@ -293,11 +292,12 @@
|
||||||
LastSyncDate = lastsyncdate,
|
LastSyncDate = lastsyncdate,
|
||||||
RenderMode = RenderMode,
|
RenderMode = RenderMode,
|
||||||
Runtime = (Shared.Runtime)Enum.Parse(typeof(Shared.Runtime), Runtime),
|
Runtime = (Shared.Runtime)Enum.Parse(typeof(Shared.Runtime), Runtime),
|
||||||
VisitorId = VisitorId,
|
VisitorId = visitorId,
|
||||||
RemoteIPAddress = SiteState.RemoteIPAddress,
|
RemoteIPAddress = SiteState.RemoteIPAddress,
|
||||||
ReturnUrl = returnurl,
|
ReturnUrl = returnurl,
|
||||||
IsInternalNavigation = _isInternalNavigation,
|
IsInternalNavigation = _isInternalNavigation,
|
||||||
RenderId = Guid.NewGuid()
|
RenderId = Guid.NewGuid(),
|
||||||
|
Refresh = false
|
||||||
};
|
};
|
||||||
|
|
||||||
OnStateChange?.Invoke(_pagestate);
|
OnStateChange?.Invoke(_pagestate);
|
||||||
|
|
|
@ -19,12 +19,8 @@ else
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
Parameters = new Dictionary<string, object>();
|
Parameters = new Dictionary<string, object>();
|
||||||
Parameters.Add(new KeyValuePair<string, object>("AntiForgeryToken", ""));
|
|
||||||
Parameters.Add(new KeyValuePair<string, object>("RenderMode", RenderModes.Interactive));
|
Parameters.Add(new KeyValuePair<string, object>("RenderMode", RenderModes.Interactive));
|
||||||
Parameters.Add(new KeyValuePair<string, object>("Runtime", Runtimes.Hybrid));
|
Parameters.Add(new KeyValuePair<string, object>("Runtime", Runtimes.Hybrid));
|
||||||
Parameters.Add(new KeyValuePair<string, object>("VisitorId", -1));
|
|
||||||
Parameters.Add(new KeyValuePair<string, object>("RemoteIPAddress", ""));
|
|
||||||
Parameters.Add(new KeyValuePair<string, object>("AuthorizationToken", ""));
|
|
||||||
|
|
||||||
if (MauiConstants.UseAppSettings)
|
if (MauiConstants.UseAppSettings)
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,7 +47,7 @@ public static class MauiProgram
|
||||||
builder.Services.AddOqtaneAuthentication();
|
builder.Services.AddOqtaneAuthentication();
|
||||||
|
|
||||||
// register scoped core services
|
// register scoped core services
|
||||||
builder.Services.AddOqtaneScopedServices();
|
builder.Services.AddOqtaneClientScopedServices();
|
||||||
|
|
||||||
var assemblies = AppDomain.CurrentDomain.GetOqtaneAssemblies();
|
var assemblies = AppDomain.CurrentDomain.GetOqtaneAssemblies();
|
||||||
foreach (var assembly in assemblies)
|
foreach (var assembly in assemblies)
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
@inject IAntiforgery Antiforgery
|
@inject IAntiforgery Antiforgery
|
||||||
@inject IConfigManager ConfigManager
|
@inject IConfigManager ConfigManager
|
||||||
@inject ITenantManager TenantManager
|
@inject ITenantManager TenantManager
|
||||||
@inject ISiteRepository SiteRepository
|
@inject ISiteService SiteService
|
||||||
@inject IPageRepository PageRepository
|
@inject IPageRepository PageRepository
|
||||||
@inject IThemeRepository ThemeRepository
|
@inject IThemeRepository ThemeRepository
|
||||||
@inject ILanguageRepository LanguageRepository
|
@inject ILanguageRepository LanguageRepository
|
||||||
|
@ -31,9 +31,11 @@
|
||||||
@inject IVisitorRepository VisitorRepository
|
@inject IVisitorRepository VisitorRepository
|
||||||
@inject IJwtManager JwtManager
|
@inject IJwtManager JwtManager
|
||||||
|
|
||||||
<!DOCTYPE html>
|
@if (_pageState != null)
|
||||||
<html lang="@_language">
|
{
|
||||||
<head>
|
<!DOCTYPE html>
|
||||||
|
<html lang="@_language">
|
||||||
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<base href="/" />
|
<base href="/" />
|
||||||
|
@ -56,17 +58,17 @@
|
||||||
<Head @rendermode="InteractiveRenderMode.GetInteractiveRenderMode(_runtime, _prerender)" />
|
<Head @rendermode="InteractiveRenderMode.GetInteractiveRenderMode(_runtime, _prerender)" />
|
||||||
}
|
}
|
||||||
@((MarkupString)_headResources)
|
@((MarkupString)_headResources)
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@if (string.IsNullOrEmpty(_message))
|
@if (string.IsNullOrEmpty(_message))
|
||||||
{
|
{
|
||||||
@if (_renderMode == RenderModes.Static)
|
@if (_renderMode == RenderModes.Static)
|
||||||
{
|
{
|
||||||
<Routes AntiForgeryToken="@_antiForgeryToken" RenderMode="@_renderMode" Runtime="@_runtime" VisitorId="@_visitorId" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="@_authorizationToken" />
|
<Routes PageState="@_pageState" RenderMode="@_renderMode" Runtime="@_runtime" AntiForgeryToken="@_antiForgeryToken" AuthorizationToken="@_authorizationToken" />
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<Routes AntiForgeryToken="@_antiForgeryToken" RenderMode="@_renderMode" Runtime="@_runtime" VisitorId="@_visitorId" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="@_authorizationToken" @rendermode="InteractiveRenderMode.GetInteractiveRenderMode(_runtime, _prerender)" />
|
<Routes PageState="@_pageState" RenderMode="@_renderMode" Runtime="@_runtime" AntiForgeryToken="@_antiForgeryToken" AuthorizationToken="@_authorizationToken" @rendermode="InteractiveRenderMode.GetInteractiveRenderMode(_runtime, _prerender)" />
|
||||||
}
|
}
|
||||||
|
|
||||||
<script src="js/interop.js"></script>
|
<script src="js/interop.js"></script>
|
||||||
|
@ -86,8 +88,9 @@
|
||||||
{
|
{
|
||||||
<div class="app-alert">@_message</div>
|
<div class="app-alert">@_message</div>
|
||||||
}
|
}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
}
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private string _renderMode = RenderModes.Interactive;
|
private string _renderMode = RenderModes.Interactive;
|
||||||
|
@ -104,12 +107,13 @@
|
||||||
private string _PWAScript = "";
|
private string _PWAScript = "";
|
||||||
private string _reconnectScript = "";
|
private string _reconnectScript = "";
|
||||||
private string _message = "";
|
private string _message = "";
|
||||||
|
private PageState _pageState;
|
||||||
|
|
||||||
// CascadingParameter is required to access HttpContext
|
// CascadingParameter is required to access HttpContext
|
||||||
[CascadingParameter]
|
[CascadingParameter]
|
||||||
HttpContext Context { get; set; }
|
HttpContext Context { get; set; }
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
_antiForgeryToken = Antiforgery.GetAndStoreTokens(Context).RequestToken;
|
_antiForgeryToken = Antiforgery.GetAndStoreTokens(Context).RequestToken;
|
||||||
_remoteIPAddress = Context.Connection.RemoteIpAddress?.ToString() ?? "";
|
_remoteIPAddress = Context.Connection.RemoteIpAddress?.ToString() ?? "";
|
||||||
|
@ -127,7 +131,7 @@
|
||||||
HandleDefaultAliasRedirect(alias, url);
|
HandleDefaultAliasRedirect(alias, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
var site = SiteRepository.GetSite(alias.SiteId);
|
var site = await SiteService.GetSiteAsync(alias.SiteId);
|
||||||
if (site != null && (!site.IsDeleted || url.Contains("admin/site")) && site.RenderMode != RenderModes.Headless)
|
if (site != null && (!site.IsDeleted || url.Contains("admin/site")) && site.RenderMode != RenderModes.Headless)
|
||||||
{
|
{
|
||||||
_renderMode = site.RenderMode;
|
_renderMode = site.RenderMode;
|
||||||
|
@ -226,6 +230,31 @@
|
||||||
_language = culture.Split('|')[0];
|
_language = culture.Split('|')[0];
|
||||||
_language = _language.Replace("c=", "");
|
_language = _language.Replace("c=", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// create initial PageState
|
||||||
|
_pageState = new PageState
|
||||||
|
{
|
||||||
|
Alias = alias,
|
||||||
|
Site = site,
|
||||||
|
Page = page,
|
||||||
|
User = null,
|
||||||
|
Uri = new Uri(url, UriKind.Absolute),
|
||||||
|
Route = route,
|
||||||
|
QueryString = Utilities.ParseQueryString(route.Query),
|
||||||
|
UrlParameters = route.UrlParameters,
|
||||||
|
ModuleId = -1,
|
||||||
|
Action = "",
|
||||||
|
EditMode = false,
|
||||||
|
LastSyncDate = DateTime.MinValue,
|
||||||
|
RenderMode = _renderMode,
|
||||||
|
Runtime = (Shared.Runtime)Enum.Parse(typeof(Shared.Runtime), _runtime),
|
||||||
|
VisitorId = _visitorId,
|
||||||
|
RemoteIPAddress = _remoteIPAddress,
|
||||||
|
ReturnUrl = "",
|
||||||
|
IsInternalNavigation = false,
|
||||||
|
RenderId = Guid.NewGuid(),
|
||||||
|
Refresh = true
|
||||||
|
};
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user