split RenderMode and Runtime configuration

This commit is contained in:
sbwalker 2024-02-01 09:08:39 -05:00
parent 97762712e6
commit 1e332ed075
22 changed files with 251 additions and 169 deletions

View File

@ -261,7 +261,8 @@
SiteName = Constants.DefaultSite, SiteName = Constants.DefaultSite,
Register = _register, Register = _register,
SiteTemplate = _template, SiteTemplate = _template,
RenderMode = RenderModes.InteractiveServer RenderMode = RenderModes.Interactive,
Runtime = Runtimes.Server
}; };
var installation = await InstallationService.Install(config); var installation = await InstallationService.Install(config);

View File

@ -314,15 +314,24 @@
<Label Class="col-sm-3" For="rendermode" HelpText="The default render mode for the site" ResourceKey="Rendermode">Render Mode: </Label> <Label Class="col-sm-3" For="rendermode" HelpText="The default render mode for the site" ResourceKey="Rendermode">Render Mode: </Label>
<div class="col-sm-9"> <div class="col-sm-9">
<select id="rendermode" class="form-select" @bind="@_rendermode" required> <select id="rendermode" class="form-select" @bind="@_rendermode" required>
<option value="@RenderModes.StaticServer">@SharedLocalizer[@RenderModes.StaticServer]</option> <option value="@RenderModes.Interactive">@(SharedLocalizer["RenderMode" + @RenderModes.Interactive])</option>
<option value="@RenderModes.InteractiveServer">@SharedLocalizer[@RenderModes.InteractiveServer]</option> <option value="@RenderModes.Static">@(SharedLocalizer["RenderMode" + @RenderModes.Static])</option>
<option value="@RenderModes.InteractiveWebAssembly">@SharedLocalizer[@RenderModes.InteractiveWebAssembly]</option> <option value="@RenderModes.Headless">@(SharedLocalizer["RenderMode" + @RenderModes.Headless])</option>
<option value="@RenderModes.InteractiveAuto">@SharedLocalizer[@RenderModes.InteractiveAuto]</option>
</select> </select>
</div> </div>
</div> </div>
@if (_rendermode != RenderModes.StaticServer) @if (_rendermode == RenderModes.Interactive)
{ {
<div class="row mb-1 align-items-center">
<Label Class="col-sm-3" For="runtime" HelpText="The interactive render mode for the site" ResourceKey="Runtime">Interactivity: </Label>
<div class="col-sm-9">
<select id="runtime" class="form-select" @bind="@_runtime" required>
<option value="@Runtimes.Server">@(SharedLocalizer["Runtime" + @Runtimes.Server])</option>
<option value="@Runtimes.WebAssembly">@(SharedLocalizer["Runtime" + @Runtimes.WebAssembly])</option>
<option value="@Runtimes.Auto">@(SharedLocalizer["Runtime" + @Runtimes.Auto])</option>
</select>
</div>
</div>
<div class="row mb-1 align-items-center"> <div class="row mb-1 align-items-center">
<Label Class="col-sm-3" For="prerender" HelpText="Specifies if the site supports prerendering" ResourceKey="Prerender">Prerender? </Label> <Label Class="col-sm-3" For="prerender" HelpText="Specifies if the site supports prerendering" ResourceKey="Prerender">Prerender? </Label>
<div class="col-sm-9"> <div class="col-sm-9">
@ -419,7 +428,8 @@
private int _aliasid = -1; private int _aliasid = -1;
private string _aliasname; private string _aliasname;
private string _defaultalias; private string _defaultalias;
private string _rendermode = RenderModes.InteractiveServer; private string _rendermode = RenderModes.Interactive;
private string _runtime = Runtimes.Server;
private string _prerender = "True"; private string _prerender = "True";
private string _hybrid = "False"; private string _hybrid = "False";
private string _tenant = string.Empty; private string _tenant = string.Empty;
@ -506,6 +516,7 @@
// hosting model // hosting model
_rendermode = site.RenderMode; _rendermode = site.RenderMode;
_runtime = site.Runtime;
_prerender = site.Prerender.ToString(); _prerender = site.Prerender.ToString();
_hybrid = site.Hybrid.ToString(); _hybrid = site.Hybrid.ToString();
@ -645,9 +656,10 @@
// hosting model // hosting model
if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
{ {
if (site.RenderMode != _rendermode || site.Prerender != bool.Parse(_prerender) || site.Hybrid != bool.Parse(_hybrid)) if (site.RenderMode != _rendermode || site.Runtime != _runtime || site.Prerender != bool.Parse(_prerender) || site.Hybrid != bool.Parse(_hybrid))
{ {
site.RenderMode = _rendermode; site.RenderMode = _rendermode;
site.Runtime = _runtime;
site.Prerender = bool.Parse(_prerender); site.Prerender = bool.Parse(_prerender);
site.Hybrid = bool.Parse(_hybrid); site.Hybrid = bool.Parse(_hybrid);
reload = true; // needs to be reloaded on serve reload = true; // needs to be reloaded on serve

View File

@ -74,13 +74,25 @@ else
<Label Class="col-sm-3" For="rendermode" HelpText="The default render mode for the site" ResourceKey="Rendermode">Render Mode: </Label> <Label Class="col-sm-3" For="rendermode" HelpText="The default render mode for the site" ResourceKey="Rendermode">Render Mode: </Label>
<div class="col-sm-9"> <div class="col-sm-9">
<select id="rendermode" class="form-select" @bind="@_rendermode" required> <select id="rendermode" class="form-select" @bind="@_rendermode" required>
<option value="@RenderModes.StaticServer">@SharedLocalizer[@RenderModes.StaticServer]</option> <option value="@RenderModes.Interactive">@(SharedLocalizer["RenderMode" + @RenderModes.Interactive])</option>
<option value="@RenderModes.InteractiveServer">@SharedLocalizer[@RenderModes.InteractiveServer]</option> <option value="@RenderModes.Static">@(SharedLocalizer["RenderMode" + @RenderModes.Static])</option>
<option value="@RenderModes.InteractiveWebAssembly">@SharedLocalizer[@RenderModes.InteractiveWebAssembly]</option> <option value="@RenderModes.Headless">@(SharedLocalizer["RenderMode" + @RenderModes.Headless])</option>
<option value="@RenderModes.InteractiveAuto">@SharedLocalizer[@RenderModes.InteractiveAuto]</option>
</select> </select>
</div> </div>
</div> </div>
@if (_rendermode == RenderModes.Interactive)
{
<div class="row mb-1 align-items-center">
<Label Class="col-sm-3" For="runtime" HelpText="The interactive render mode for the site" ResourceKey="Runtime">Interactivity: </Label>
<div class="col-sm-9">
<select id="runtime" class="form-select" @bind="@_runtime" required>
<option value="@Runtimes.Server">@(SharedLocalizer["Runtime" + @Runtimes.Server])</option>
<option value="@Runtimes.WebAssembly">@(SharedLocalizer["Runtime" + @Runtimes.WebAssembly])</option>
<option value="@Runtimes.Auto">@(SharedLocalizer["Runtime" + @Runtimes.Auto])</option>
</select>
</div>
</div>
}
<div class="row mb-1 align-items-center"> <div class="row mb-1 align-items-center">
<Label Class="col-sm-3" For="tenant" HelpText="Select the database for the site" ResourceKey="Tenant">Database: </Label> <Label Class="col-sm-3" For="tenant" HelpText="Select the database for the site" ResourceKey="Tenant">Database: </Label>
<div class="col-sm-9"> <div class="col-sm-9">
@ -194,7 +206,8 @@ else
private string _themetype = "-"; private string _themetype = "-";
private string _containertype = "-"; private string _containertype = "-";
private string _sitetemplatetype = "-"; private string _sitetemplatetype = "-";
private string _rendermode = RenderModes.InteractiveServer; private string _rendermode = RenderModes.Interactive;
private string _runtime = Runtimes.Server;
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host;
@ -392,6 +405,7 @@ else
config.DefaultAdminContainer = ""; config.DefaultAdminContainer = "";
config.SiteTemplate = _sitetemplatetype; config.SiteTemplate = _sitetemplatetype;
config.RenderMode = _rendermode; config.RenderMode = _rendermode;
config.Runtime = _runtime;
ShowProgressIndicator(); ShowProgressIndicator();

View File

@ -423,4 +423,10 @@
<data name="HybridEnabled.Text" xml:space="preserve"> <data name="HybridEnabled.Text" xml:space="preserve">
<value>Hybrid Enabled?</value> <value>Hybrid Enabled?</value>
</data> </data>
<data name="Runtime.HelpText" xml:space="preserve">
<value>The interactive render mode for the site</value>
</data>
<data name="Runtime.Text" xml:space="preserve">
<value>Interactivity:</value>
</data>
</root> </root>

View File

@ -246,4 +246,10 @@
<data name="EnterConnectionString" xml:space="preserve"> <data name="EnterConnectionString" xml:space="preserve">
<value>Enter Connection String</value> <value>Enter Connection String</value>
</data> </data>
<data name="Runtime.HelpText" xml:space="preserve">
<value>The interactive render mode for the site</value>
</data>
<data name="Runtime.Text" xml:space="preserve">
<value>Interactivity:</value>
</data>
</root> </root>

View File

@ -312,11 +312,11 @@
<data name="Not Specified" xml:space="preserve"> <data name="Not Specified" xml:space="preserve">
<value>Not Specified</value> <value>Not Specified</value>
</data> </data>
<data name="InteractiveServer" xml:space="preserve"> <data name="RuntimeServer" xml:space="preserve">
<value>Interactive Server Rendering</value> <value>Server Rendering</value>
</data> </data>
<data name="InteractiveWebAssembly" xml:space="preserve"> <data name="RuntimeWebAssembly" xml:space="preserve">
<value>Interactive WebAssembly Rendering</value> <value>WebAssembly Rendering</value>
</data> </data>
<data name="StaticServer" xml:space="preserve"> <data name="StaticServer" xml:space="preserve">
<value>Static Server Rendering</value> <value>Static Server Rendering</value>
@ -441,7 +441,16 @@
<data name="Message.EffectiveExpiryDateError" xml:space="preserve"> <data name="Message.EffectiveExpiryDateError" xml:space="preserve">
<value>Effective Date cannot be after Expiry Date.</value> <value>Effective Date cannot be after Expiry Date.</value>
</data> </data>
<data name="InteractiveAuto" xml:space="preserve"> <data name="RuntimeAuto" xml:space="preserve">
<value>Interactive Auto Rendering</value> <value>Auto Rendering</value>
</data>
<data name="RenderModeHeadless" xml:space="preserve">
<value>Headless API (No Rendering)</value>
</data>
<data name="RenderModeInteractive" xml:space="preserve">
<value>Global Interactivity</value>
</data>
<data name="RenderModeStatic" xml:space="preserve">
<value>Static Server Rendering</value>
</data> </data>
</root> </root>

View File

@ -16,7 +16,7 @@
<div style="@_display"> <div style="@_display">
<CascadingAuthenticationState> <CascadingAuthenticationState>
<CascadingValue Value="@PageState"> <CascadingValue Value="@PageState">
<SiteRouter Runtime="@Runtime" RenderMode="@RenderMode" VisitorId="@VisitorId" OnStateChange="@ChangeState" /> <SiteRouter RenderMode="@RenderMode" Runtime="@Runtime" VisitorId="@VisitorId" OnStateChange="@ChangeState" />
</CascadingValue> </CascadingValue>
</CascadingAuthenticationState> </CascadingAuthenticationState>
</div> </div>
@ -35,10 +35,10 @@
public string AntiForgeryToken { get; set; } public string AntiForgeryToken { get; set; }
[Parameter] [Parameter]
public string Runtime { get; set; } public string RenderMode { get; set; }
[Parameter] [Parameter]
public string RenderMode { get; set; } public string Runtime { get; set; }
[Parameter] [Parameter]
public int VisitorId { get; set; } public int VisitorId { get; set; }

View File

@ -18,8 +18,8 @@ namespace Oqtane.UI
public string Action { get; set; } public string Action { get; set; }
public bool EditMode { get; set; } public bool EditMode { get; set; }
public DateTime LastSyncDate { get; set; } public DateTime LastSyncDate { get; set; }
public Shared.Runtime Runtime { get; set; }
public string RenderMode { get; set; } public string RenderMode { get; set; }
public Shared.Runtime Runtime { get; set; }
public int VisitorId { get; set; } public int VisitorId { get; set; }
public string RemoteIPAddress { get; set; } public string RemoteIPAddress { get; set; }
public string ReturnUrl { get; set; } public string ReturnUrl { get; set; }

View File

@ -6,15 +6,15 @@ namespace Oqtane.UI
{ {
public static class RenderMode public static class RenderMode
{ {
public static IComponentRenderMode GetInteractiveRenderMode(string interactiveRenderMode, bool prerender) public static IComponentRenderMode GetInteractiveRenderMode(string runtime, bool prerender)
{ {
switch (interactiveRenderMode) switch (runtime)
{ {
case RenderModes.InteractiveServer: case Runtimes.Server:
return new InteractiveServerRenderMode(prerender); return new InteractiveServerRenderMode(prerender);
case RenderModes.InteractiveWebAssembly: case Runtimes.WebAssembly:
return new InteractiveWebAssemblyRenderMode(prerender); return new InteractiveWebAssemblyRenderMode(prerender);
case RenderModes.InteractiveAuto: case Runtimes.Auto:
return new InteractiveAutoRenderMode(prerender); return new InteractiveAutoRenderMode(prerender);
} }
return null; return null;

View File

@ -30,10 +30,10 @@
private string _error = ""; private string _error = "";
[Parameter] [Parameter]
public string Runtime { get; set; } public string RenderMode { get; set; }
[Parameter] [Parameter]
public string RenderMode { get; set; } public string Runtime { get; set; }
[Parameter] [Parameter]
public int VisitorId { get; set; } public int VisitorId { get; set; }
@ -291,8 +291,8 @@
Action = action, Action = action,
EditMode = editmode, EditMode = editmode,
LastSyncDate = lastsyncdate, LastSyncDate = lastsyncdate,
Runtime = (Shared.Runtime)Enum.Parse(typeof(Shared.Runtime), Runtime),
RenderMode = RenderMode, RenderMode = RenderMode,
Runtime = (Shared.Runtime)Enum.Parse(typeof(Shared.Runtime), Runtime),
VisitorId = VisitorId, VisitorId = VisitorId,
RemoteIPAddress = SiteState.RemoteIPAddress, RemoteIPAddress = SiteState.RemoteIPAddress,
ReturnUrl = returnurl, ReturnUrl = returnurl,

View File

@ -47,26 +47,26 @@
@((MarkupString)_styleSheets) @((MarkupString)_styleSheets)
<link id="app-stylesheet-page" /> <link id="app-stylesheet-page" />
<link id="app-stylesheet-module" /> <link id="app-stylesheet-module" />
@if (_renderMode == RenderModes.StaticServer) @if (_renderMode == RenderModes.Static)
{ {
<Head /> <Head />
} }
else else
{ {
<Head @rendermode="@RenderMode.GetInteractiveRenderMode((_renderMode), _prerender)" /> <Head @rendermode="@RenderMode.GetInteractiveRenderMode((_runtime), _prerender)" />
} }
@((MarkupString)_headResources) @((MarkupString)_headResources)
</head> </head>
<body> <body>
@if (string.IsNullOrEmpty(_message)) @if (string.IsNullOrEmpty(_message))
{ {
@if (_renderMode == RenderModes.StaticServer) @if (_renderMode == RenderModes.Static)
{ {
<Routes AntiForgeryToken="@_antiForgeryToken" Runtime="Web" RenderMode="@_renderMode" VisitorId="@_visitorId" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="@_authorizationToken" /> <Routes AntiForgeryToken="@_antiForgeryToken" RenderMode="@_renderMode" Runtime="@_runtime" VisitorId="@_visitorId" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="@_authorizationToken" />
} }
else else
{ {
<Routes AntiForgeryToken="@_antiForgeryToken" Runtime="Web" RenderMode="@_renderMode" VisitorId="@_visitorId" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="@_authorizationToken" @rendermode="@RenderMode.GetInteractiveRenderMode((_renderMode), _prerender)" /> <Routes AntiForgeryToken="@_antiForgeryToken" RenderMode="@_renderMode" Runtime="@_runtime" VisitorId="@_visitorId" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="@_authorizationToken" @rendermode="@RenderMode.GetInteractiveRenderMode((_runtime), _prerender)" />
} }
<script src="js/interop.js"></script> <script src="js/interop.js"></script>
@ -90,7 +90,8 @@
</html> </html>
@code { @code {
private string _renderMode = RenderModes.InteractiveServer; private string _renderMode = RenderModes.Interactive;
private string _runtime = Runtimes.Server;
private bool _prerender = true; private bool _prerender = true;
private int _visitorId = -1; private int _visitorId = -1;
private string _remoteIPAddress = ""; private string _remoteIPAddress = "";
@ -127,9 +128,10 @@
} }
var site = SiteRepository.GetSite(alias.SiteId); var site = SiteRepository.GetSite(alias.SiteId);
if (site != null && (!site.IsDeleted || url.Contains("admin/site"))) if (site != null && (!site.IsDeleted || url.Contains("admin/site")) && site.RenderMode != RenderModes.Headless)
{ {
_renderMode = site.RenderMode; _renderMode = site.RenderMode;
_runtime = site.Runtime;
_prerender = site.Prerender; _prerender = site.Prerender;
Route route = new Route(url, alias.Path); Route route = new Route(url, alias.Path);
@ -179,7 +181,7 @@
ManageStyleSheets(resources, alias, theme.ThemeName); ManageStyleSheets(resources, alias, theme.ThemeName);
// scripts // scripts
if (_renderMode == RenderModes.InteractiveServer) if (_renderMode == RenderModes.Interactive && _runtime == Runtimes.Server)
{ {
_reconnectScript = CreateReconnectScript(); _reconnectScript = CreateReconnectScript();
} }

View File

@ -119,7 +119,7 @@ namespace Oqtane.Controllers
var assemblyList = new List<ClientAssembly>(); var assemblyList = new List<ClientAssembly>();
var site = _sites.GetSite(alias.SiteId); var site = _sites.GetSite(alias.SiteId);
if (site != null && (site.RenderMode == "InteractiveWebAssembly" || site.Hybrid)) if (site != null && (site.Runtime == Runtimes.WebAssembly || site.Hybrid))
{ {
var binFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); var binFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
@ -201,7 +201,7 @@ namespace Oqtane.Controllers
private byte[] GetZIP(string list, Alias alias) private byte[] GetZIP(string list, Alias alias)
{ {
var site = _sites.GetSite(alias.SiteId); var site = _sites.GetSite(alias.SiteId);
if (site != null && (site.RenderMode == "InteractiveWebAssembly" || site.Hybrid)) if (site != null && (site.Runtime == Runtimes.WebAssembly || site.Hybrid))
{ {
var binFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); var binFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

View File

@ -13,8 +13,6 @@ using System.Globalization;
using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Caching.Memory;
using Oqtane.Extensions; using Oqtane.Extensions;
using System; using System;
using Oqtane.UI;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
namespace Oqtane.Controllers namespace Oqtane.Controllers
{ {
@ -212,7 +210,7 @@ namespace Oqtane.Controllers
site = _sites.UpdateSite(site); site = _sites.UpdateSite(site);
_syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, site.SiteId, SyncEventActions.Update); _syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, site.SiteId, SyncEventActions.Update);
string action = SyncEventActions.Refresh; string action = SyncEventActions.Refresh;
if (current.RenderMode != site.RenderMode) if (current.RenderMode != site.RenderMode || current.Runtime != site.Runtime)
{ {
action = SyncEventActions.Reload; action = SyncEventActions.Reload;
} }

View File

@ -46,7 +46,8 @@ namespace Oqtane.Controllers
break; break;
case "configuration": case "configuration":
systeminfo.Add("InstallationId", _configManager.GetInstallationId()); systeminfo.Add("InstallationId", _configManager.GetInstallationId());
systeminfo.Add("RenderMode", _configManager.GetSetting("RenderMode", RenderModes.InteractiveServer)); systeminfo.Add("RenderMode", _configManager.GetSetting("RenderMode", RenderModes.Interactive));
systeminfo.Add("Runtime", _configManager.GetSetting("Runtime", Runtimes.Server));
systeminfo.Add("DetailedErrors", _configManager.GetSetting("DetailedErrors", "false")); systeminfo.Add("DetailedErrors", _configManager.GetSetting("DetailedErrors", "false"));
systeminfo.Add("Logging:LogLevel:Default", _configManager.GetSetting("Logging:LogLevel:Default", "Information")); systeminfo.Add("Logging:LogLevel:Default", _configManager.GetSetting("Logging:LogLevel:Default", "Information"));
systeminfo.Add("Logging:LogLevel:Notify", _configManager.GetSetting("Logging:LogLevel:Notify", "Error")); systeminfo.Add("Logging:LogLevel:Notify", _configManager.GetSetting("Logging:LogLevel:Notify", "Error"));

View File

@ -557,6 +557,7 @@ namespace Oqtane.Infrastructure
AdminContainerType = (!string.IsNullOrEmpty(install.DefaultAdminContainer)) ? install.DefaultAdminContainer : Constants.DefaultAdminContainer, AdminContainerType = (!string.IsNullOrEmpty(install.DefaultAdminContainer)) ? install.DefaultAdminContainer : Constants.DefaultAdminContainer,
SiteTemplateType = install.SiteTemplate, SiteTemplateType = install.SiteTemplate,
RenderMode = (!string.IsNullOrEmpty(install.RenderMode)) ? install.RenderMode : _configManager.GetSection("RenderMode").Value, RenderMode = (!string.IsNullOrEmpty(install.RenderMode)) ? install.RenderMode : _configManager.GetSection("RenderMode").Value,
Runtime = (!string.IsNullOrEmpty(install.Runtime)) ? install.Runtime : _configManager.GetSection("Runtime").Value,
Prerender = true, Prerender = true,
Hybrid = false Hybrid = false
}; };

View File

@ -63,6 +63,9 @@ namespace Oqtane.Infrastructure
case "3.3.0": case "3.3.0":
Upgrade_3_3_0(tenant, scope); Upgrade_3_3_0(tenant, scope);
break; break;
case "5.1.0":
Upgrade_5_1_0(tenant, scope);
break;
} }
} }
} }
@ -111,7 +114,11 @@ namespace Oqtane.Infrastructure
_configManager.RemoveSetting("Localization:SupportedCultures", true); _configManager.RemoveSetting("Localization:SupportedCultures", true);
if (_configManager.GetSetting("RenderMode", "") == "") if (_configManager.GetSetting("RenderMode", "") == "")
{ {
_configManager.AddOrUpdateSetting("RenderMode", "ServerPrerendered", true); _configManager.AddOrUpdateSetting("RenderMode", RenderModes.Interactive, true);
}
if (_configManager.GetSetting("Runtime", "") == "")
{
_configManager.AddOrUpdateSetting("Runtime", Runtimes.Server, true);
} }
} }
} }
@ -349,5 +356,17 @@ namespace Oqtane.Infrastructure
Debug.WriteLine($"Oqtane Error: Error In 3.3.0 Upgrade Logic - {ex}"); Debug.WriteLine($"Oqtane Error: Error In 3.3.0 Upgrade Logic - {ex}");
} }
} }
private void Upgrade_5_1_0(Tenant tenant, IServiceScope scope)
{
if (tenant.Name == TenantNames.Master)
{
var rendermode = _configManager.GetSetting("RenderMode", "");
if (rendermode.Contains("Prerendered"))
{
_configManager.AddOrUpdateSetting("RenderMode", rendermode.Replace("Prerendered", ""), true);
}
}
}
} }
} }

View File

@ -19,15 +19,13 @@ namespace Oqtane.Migrations.Tenant
{ {
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase); var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase);
siteEntityBuilder.UpdateColumn("RenderMode", $"'{RenderModes.InteractiveServer}'"); siteEntityBuilder.UpdateColumn("RenderMode", $"'{RenderModes.Interactive}'");
siteEntityBuilder.AddBooleanColumn("Prerender", true); siteEntityBuilder.AddBooleanColumn("Prerender", true);
siteEntityBuilder.UpdateColumn("Prerender", "1", "bool", ""); siteEntityBuilder.UpdateColumn("Prerender", "1", "bool", "");
siteEntityBuilder.AddBooleanColumn("Hybrid", true); siteEntityBuilder.AddBooleanColumn("Hybrid", true);
siteEntityBuilder.UpdateColumn("Hybrid", "0", "bool", ""); siteEntityBuilder.UpdateColumn("Hybrid", "0", "bool", "");
siteEntityBuilder.DropColumn("Runtime");
siteEntityBuilder.DropColumn("HybridEnabled"); siteEntityBuilder.DropColumn("HybridEnabled");
} }

View File

@ -2,7 +2,9 @@ namespace Oqtane.Shared
{ {
public enum Runtime public enum Runtime
{ {
Web, Server,
WebAssembly,
Auto,
Hybrid Hybrid
} }
} }

View File

@ -69,12 +69,17 @@ namespace Oqtane.Models
public string SiteGuid { get; set; } public string SiteGuid { get; set; }
/// <summary> /// <summary>
/// The default render mode for the site (ie. Static,InteractiveServer,InteractiveWebAssembly,InteractiveAuto) /// The default render mode for the site ie. Static,Interactive,Headless
/// </summary> /// </summary>
public string RenderMode { get; set; } public string RenderMode { get; set; }
/// <summary> /// <summary>
/// If the site supports prerendering (only applies to Interactive rendering) /// The interactive render mode for the site ie. Server,WebAssembly,Auto (only applies to Interactive rendermode)
/// </summary>
public string Runtime { get; set; }
/// <summary>
/// If the site supports prerendering (only applies to Interactive rendermode)
/// </summary> /// </summary>
public bool Prerender { get; set; } public bool Prerender { get; set; }

View File

@ -18,6 +18,7 @@ namespace Oqtane.Shared
public string DefaultContainer { get; set; } public string DefaultContainer { get; set; }
public string DefaultAdminContainer { get; set; } public string DefaultAdminContainer { get; set; }
public string RenderMode { get; set; } public string RenderMode { get; set; }
public string Runtime { get; set; }
public bool Register { get; set; } public bool Register { get; set; }
} }
} }

View File

@ -1,8 +1,7 @@
namespace Oqtane.Shared { namespace Oqtane.Shared {
public class RenderModes { public class RenderModes {
public const string StaticServer = "StaticServer"; public const string Static = "Static";
public const string InteractiveServer = "InteractiveServer"; public const string Interactive = "Interactive";
public const string InteractiveWebAssembly = "InteractiveWebAssembly"; public const string Headless = "Headless";
public const string InteractiveAuto = "InteractiveAuto";
} }
} }

View File

@ -0,0 +1,8 @@
namespace Oqtane.Shared {
public class Runtimes {
public const string Server = "Server";
public const string WebAssembly = "WebAssembly";
public const string Auto = "Auto";
public const string Hybrid = "Hybrid";
}
}