add support for Render Modes and Prerendering

This commit is contained in:
sbwalker 2024-01-31 09:40:47 -05:00
parent fdfbf54808
commit 50e179f7a8
2 changed files with 32 additions and 16 deletions

View File

@ -5,16 +5,16 @@ namespace Oqtane.Client.Utilities
{ {
public static class RenderModes public static class RenderModes
{ {
public static IComponentRenderMode GetRenderMode(string renderMode) public static IComponentRenderMode GetInteractiveRenderMode(string interactiveRenderMode, bool prerender)
{ {
switch (renderMode) switch (interactiveRenderMode)
{ {
case "InteractiveServer": case "InteractiveServer":
return RenderMode.InteractiveServer; return new InteractiveServerRenderMode(prerender);
case "InteractiveWebAssembly": case "InteractiveWebAssembly":
return RenderMode.InteractiveWebAssembly; return new InteractiveWebAssemblyRenderMode(prerender);
case "InteractiveAuto": case "InteractiveAuto":
return RenderMode.InteractiveAuto; return new InteractiveAutoRenderMode(prerender);
} }
return null; return null;
} }

View File

@ -40,13 +40,27 @@
@((MarkupString)_styleSheets) @((MarkupString)_styleSheets)
<link id="app-stylesheet-page" /> <link id="app-stylesheet-page" />
<link id="app-stylesheet-module" /> <link id="app-stylesheet-module" />
<Head @rendermode="@RenderModes.GetRenderMode(_interactiveRenderMode)" /> @if (_renderMode == "Interactive")
{
<Head @rendermode="@RenderModes.GetInteractiveRenderMode((_renderMode + _interactiveRenderMode), _prerender)" />
}
else
{
<Head />
}
@((MarkupString)_headResources) @((MarkupString)_headResources)
</head> </head>
<body> <body>
@if (string.IsNullOrEmpty(_message)) @if (string.IsNullOrEmpty(_message))
{ {
<Routes AntiForgeryToken="@_antiForgeryToken" Runtime="Server" RenderMode="PreRendered" VisitorId="-1" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="" @rendermode="@RenderModes.GetRenderMode(_interactiveRenderMode)" /> @if (_renderMode == "Interactive")
{
<Routes AntiForgeryToken="@_antiForgeryToken" Runtime="Server" RenderMode="PreRendered" VisitorId="-1" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="" @rendermode="@RenderModes.GetInteractiveRenderMode((_renderMode + _interactiveRenderMode), _prerender)" />
}
else
{
<Routes AntiForgeryToken="@_antiForgeryToken" Runtime="Server" RenderMode="PreRendered" VisitorId="-1" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="" />
}
<script src="js/interop.js"></script> <script src="js/interop.js"></script>
<script src="_framework/blazor.web.js"></script> <script src="_framework/blazor.web.js"></script>
@ -69,7 +83,9 @@
</html> </html>
@code { @code {
private string _interactiveRenderMode = "InteractiveServer"; private string _renderMode = "Interactive";
private string _interactiveRenderMode = "Server";
private bool _prerender = true;
private string _language = "en"; private string _language = "en";
private string _antiForgeryToken = ""; private string _antiForgeryToken = "";
private string _remoteIPAddress = ""; private string _remoteIPAddress = "";
@ -102,14 +118,14 @@
var site = SiteRepository.GetSite(alias.SiteId); var site = SiteRepository.GetSite(alias.SiteId);
if (site != null && (!site.IsDeleted || url.Contains("admin/site")) && site.Runtime != "Hybrid") if (site != null && (!site.IsDeleted || url.Contains("admin/site")) && site.Runtime != "Hybrid")
{ {
// if (!string.IsNullOrEmpty(site.Runtime)) if (!string.IsNullOrEmpty(site.Runtime))
// { {
// Runtime = site.Runtime; _interactiveRenderMode = site.Runtime;
// } }
// if (!string.IsNullOrEmpty(site.RenderMode)) if (!string.IsNullOrEmpty(site.RenderMode))
// { {
// RenderMode = site.RenderMode; _prerender = (site.RenderMode.Replace(site.Runtime, "")) == "Prerendered";
// } }
Route route = new Route(url, alias.Path); Route route = new Route(url, alias.Path);
var page = PageRepository.GetPage(route.PagePath, site.SiteId); var page = PageRepository.GetPage(route.PagePath, site.SiteId);