split RenderMode and Runtime configuration
This commit is contained in:
parent
97762712e6
commit
1e332ed075
|
@ -261,8 +261,9 @@
|
||||||
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);
|
||||||
if (installation.Success)
|
if (installation.Success)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
@ -220,137 +233,137 @@ else
|
||||||
_sitetemplatetype = Constants.DefaultSiteTemplate;
|
_sitetemplatetype = Constants.DefaultSiteTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
_databases = await DatabaseService.GetDatabasesAsync();
|
_databases = await DatabaseService.GetDatabasesAsync();
|
||||||
if (_databases.Exists(item => item.IsDefault))
|
if (_databases.Exists(item => item.IsDefault))
|
||||||
{
|
{
|
||||||
_databaseName = _databases.Find(item => item.IsDefault).Name;
|
_databaseName = _databases.Find(item => item.IsDefault).Name;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_databaseName = "LocalDB";
|
_databaseName = "LocalDB";
|
||||||
}
|
}
|
||||||
LoadDatabaseConfigComponent();
|
LoadDatabaseConfigComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DatabaseChanged(ChangeEventArgs eventArgs)
|
private void DatabaseChanged(ChangeEventArgs eventArgs)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_databaseName = (string)eventArgs.Value;
|
_databaseName = (string)eventArgs.Value;
|
||||||
_showConnectionString = false;
|
_showConnectionString = false;
|
||||||
LoadDatabaseConfigComponent();
|
LoadDatabaseConfigComponent();
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
AddModuleMessage(Localizer["Error.Database.LoadConfig"], MessageType.Error);
|
AddModuleMessage(Localizer["Error.Database.LoadConfig"], MessageType.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadDatabaseConfigComponent()
|
private void LoadDatabaseConfigComponent()
|
||||||
{
|
{
|
||||||
var database = _databases.SingleOrDefault(d => d.Name == _databaseName);
|
var database = _databases.SingleOrDefault(d => d.Name == _databaseName);
|
||||||
if (database != null)
|
if (database != null)
|
||||||
{
|
{
|
||||||
_databaseConfigType = Type.GetType(database.ControlType);
|
_databaseConfigType = Type.GetType(database.ControlType);
|
||||||
DatabaseConfigComponent = builder =>
|
DatabaseConfigComponent = builder =>
|
||||||
{
|
{
|
||||||
builder.OpenComponent(0, _databaseConfigType);
|
builder.OpenComponent(0, _databaseConfigType);
|
||||||
builder.AddComponentReferenceCapture(1, inst => { _databaseConfig = Convert.ChangeType(inst, _databaseConfigType); });
|
builder.AddComponentReferenceCapture(1, inst => { _databaseConfig = Convert.ChangeType(inst, _databaseConfigType); });
|
||||||
builder.CloseComponent();
|
builder.CloseComponent();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TenantChanged(ChangeEventArgs e)
|
private void TenantChanged(ChangeEventArgs e)
|
||||||
{
|
{
|
||||||
_tenantid = (string)e.Value;
|
_tenantid = (string)e.Value;
|
||||||
if (string.IsNullOrEmpty(_tenantName))
|
if (string.IsNullOrEmpty(_tenantName))
|
||||||
{
|
{
|
||||||
_tenantName = _name;
|
_tenantName = _name;
|
||||||
}
|
}
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void ThemeChanged(ChangeEventArgs e)
|
private async void ThemeChanged(ChangeEventArgs e)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_themetype = (string)e.Value;
|
_themetype = (string)e.Value;
|
||||||
if (_themetype != "-")
|
if (_themetype != "-")
|
||||||
{
|
{
|
||||||
_containers = ThemeService.GetContainerControls(_themeList, _themetype);
|
_containers = ThemeService.GetContainerControls(_themeList, _themetype);
|
||||||
_containertype = _containers.First().TypeName;
|
_containertype = _containers.First().TypeName;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_containers = new List<ThemeControl>();
|
_containers = new List<ThemeControl>();
|
||||||
_containertype = "-";
|
_containertype = "-";
|
||||||
}
|
}
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
await logger.LogError(ex, "Error Loading Containers For Theme {ThemeType} {Error}", _themetype, ex.Message);
|
await logger.LogError(ex, "Error Loading Containers For Theme {ThemeType} {Error}", _themetype, ex.Message);
|
||||||
AddModuleMessage(Localizer["Error.Theme.LoadContainers"], MessageType.Error);
|
AddModuleMessage(Localizer["Error.Theme.LoadContainers"], MessageType.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task SaveSite()
|
private async Task SaveSite()
|
||||||
{
|
{
|
||||||
validated = true;
|
validated = true;
|
||||||
var interop = new Interop(JSRuntime);
|
var interop = new Interop(JSRuntime);
|
||||||
if (await interop.FormValid(form))
|
if (await interop.FormValid(form))
|
||||||
{
|
{
|
||||||
if (_tenantid != "-" && _name != string.Empty && _urls != string.Empty && _themetype != "-" && _containertype != "-" && _sitetemplatetype != "-")
|
if (_tenantid != "-" && _name != string.Empty && _urls != string.Empty && _themetype != "-" && _containertype != "-" && _sitetemplatetype != "-")
|
||||||
{
|
{
|
||||||
_urls = Regex.Replace(_urls, @"\r\n?|\n", ",");
|
_urls = Regex.Replace(_urls, @"\r\n?|\n", ",");
|
||||||
var duplicates = new List<string>();
|
var duplicates = new List<string>();
|
||||||
var aliases = await AliasService.GetAliasesAsync();
|
var aliases = await AliasService.GetAliasesAsync();
|
||||||
foreach (string name in _urls.Split(',', StringSplitOptions.RemoveEmptyEntries))
|
foreach (string name in _urls.Split(',', StringSplitOptions.RemoveEmptyEntries))
|
||||||
{
|
{
|
||||||
if (aliases.Exists(item => item.Name == name))
|
if (aliases.Exists(item => item.Name == name))
|
||||||
{
|
{
|
||||||
duplicates.Add(name);
|
duplicates.Add(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (duplicates.Count == 0)
|
if (duplicates.Count == 0)
|
||||||
{
|
{
|
||||||
InstallConfig config = new InstallConfig();
|
InstallConfig config = new InstallConfig();
|
||||||
|
|
||||||
if (_tenantid == "+")
|
if (_tenantid == "+")
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(_tenantName) && !_tenants.Exists(item => item.Name == _tenantName))
|
if (!string.IsNullOrEmpty(_tenantName) && !_tenants.Exists(item => item.Name == _tenantName))
|
||||||
{
|
{
|
||||||
// validate host credentials
|
// validate host credentials
|
||||||
var user = new User();
|
var user = new User();
|
||||||
user.SiteId = PageState.Site.SiteId;
|
user.SiteId = PageState.Site.SiteId;
|
||||||
user.Username = _hostusername;
|
user.Username = _hostusername;
|
||||||
user.Password = _hostpassword;
|
user.Password = _hostpassword;
|
||||||
user.LastIPAddress = PageState.RemoteIPAddress;
|
user.LastIPAddress = PageState.RemoteIPAddress;
|
||||||
user = await UserService.LoginUserAsync(user, false, false);
|
user = await UserService.LoginUserAsync(user, false, false);
|
||||||
if (user.IsAuthenticated)
|
if (user.IsAuthenticated)
|
||||||
{
|
{
|
||||||
var database = _databases.SingleOrDefault(d => d.Name == _databaseName);
|
var database = _databases.SingleOrDefault(d => d.Name == _databaseName);
|
||||||
var connectionString = String.Empty;
|
var connectionString = String.Empty;
|
||||||
if (_showConnectionString)
|
if (_showConnectionString)
|
||||||
{
|
{
|
||||||
connectionString = _connectionString;
|
connectionString = _connectionString;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_databaseConfig is IDatabaseConfigControl databaseConfigControl)
|
if (_databaseConfig is IDatabaseConfigControl databaseConfigControl)
|
||||||
{
|
{
|
||||||
connectionString = databaseConfigControl.GetConnectionString();
|
connectionString = databaseConfigControl.GetConnectionString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (connectionString != "")
|
if (connectionString != "")
|
||||||
{
|
{
|
||||||
config.TenantName = _tenantName;
|
config.TenantName = _tenantName;
|
||||||
config.DatabaseType = database.DBType;
|
config.DatabaseType = database.DBType;
|
||||||
config.ConnectionString = connectionString;
|
config.ConnectionString = connectionString;
|
||||||
config.HostUsername = _hostusername;
|
config.HostUsername = _hostusername;
|
||||||
config.HostPassword = _hostpassword;
|
config.HostPassword = _hostpassword;
|
||||||
config.HostEmail = user.Email;
|
config.HostEmail = user.Email;
|
||||||
config.HostName = user.DisplayName;
|
config.HostName = user.DisplayName;
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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; }
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"));
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,9 @@ namespace Oqtane.Shared
|
||||||
{
|
{
|
||||||
public enum Runtime
|
public enum Runtime
|
||||||
{
|
{
|
||||||
Web,
|
Server,
|
||||||
|
WebAssembly,
|
||||||
|
Auto,
|
||||||
Hybrid
|
Hybrid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
||||||
|
|
|
@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
8
Oqtane.Shared/Shared/Runtimes.cs
Normal file
8
Oqtane.Shared/Shared/Runtimes.cs
Normal 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";
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user