render mode integration
This commit is contained in:
		@ -260,7 +260,8 @@
 | 
			
		||||
					IsNewTenant = true,
 | 
			
		||||
					SiteName = Constants.DefaultSite,
 | 
			
		||||
					Register = _register,
 | 
			
		||||
                    SiteTemplate = _template
 | 
			
		||||
                    SiteTemplate = _template,
 | 
			
		||||
                    RenderMode = RenderModes.InteractiveServer
 | 
			
		||||
				};
 | 
			
		||||
 | 
			
		||||
				var installation = await InstallationService.Install(config);
 | 
			
		||||
 | 
			
		||||
@ -311,27 +311,32 @@
 | 
			
		||||
            <Section Name="Hosting" Heading="Hosting Model" ResourceKey="Hosting">
 | 
			
		||||
                <div class="container">
 | 
			
		||||
                    <div class="row mb-1 align-items-center">
 | 
			
		||||
                        <Label Class="col-sm-3" For="runtime" HelpText="The Blazor runtime hosting model for the site" ResourceKey="Runtime">Runtime: </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">
 | 
			
		||||
                            <select id="runtime" class="form-select" @bind="@_runtime" required>
 | 
			
		||||
                                <option value="Server">@SharedLocalizer["BlazorServer"]</option>
 | 
			
		||||
                                <option value="WebAssembly">@SharedLocalizer["BlazorWebAssembly"]</option>
 | 
			
		||||
                            <select id="rendermode" class="form-select" @bind="@_rendermode" required>
 | 
			
		||||
                                <option value="@RenderModes.StaticServer">@SharedLocalizer[@RenderModes.StaticServer]</option>
 | 
			
		||||
                                <option value="@RenderModes.InteractiveServer">@SharedLocalizer[@RenderModes.InteractiveServer]</option>
 | 
			
		||||
                                <option value="@RenderModes.InteractiveWebAssembly">@SharedLocalizer[@RenderModes.InteractiveWebAssembly]</option>
 | 
			
		||||
                                <option value="@RenderModes.InteractiveAuto">@SharedLocalizer[@RenderModes.InteractiveAuto]</option>
 | 
			
		||||
                            </select>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="row mb-1 align-items-center">
 | 
			
		||||
                        <Label Class="col-sm-3" For="prerender" HelpText="Specifies if the site should be prerendered (for search crawlers, etc...)" ResourceKey="Prerender">Prerender? </Label>
 | 
			
		||||
                        <div class="col-sm-9">
 | 
			
		||||
                            <select id="prerender" class="form-select" @bind="@_prerender" required>
 | 
			
		||||
                                <option value="Prerendered">@SharedLocalizer["Yes"]</option>
 | 
			
		||||
                                <option value="">@SharedLocalizer["No"]</option>
 | 
			
		||||
                            </select>
 | 
			
		||||
                    @if (_rendermode != "Static")
 | 
			
		||||
                    {
 | 
			
		||||
                        <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>
 | 
			
		||||
                            <div class="col-sm-9">
 | 
			
		||||
                                <select id="prerender" class="form-select" @bind="@_prerender" required>
 | 
			
		||||
                                    <option value="True">@SharedLocalizer["Yes"]</option>
 | 
			
		||||
                                    <option value="False">@SharedLocalizer["No"]</option>
 | 
			
		||||
                                </select>
 | 
			
		||||
                            </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    }
 | 
			
		||||
                    <div class="row mb-1 align-items-center">
 | 
			
		||||
                        <Label Class="col-sm-3" For="hybridenabled" HelpText="Specifies if the site can be integrated with an external .NET MAUI hybrid application" ResourceKey="HybridEnabled">Hybrid Enabled? </Label>
 | 
			
		||||
                        <Label Class="col-sm-3" For="hybrid" HelpText="Specifies if the site can be integrated with an external .NET MAUI hybrid application" ResourceKey="Hybrid">Hybrid? </Label>
 | 
			
		||||
                        <div class="col-sm-9">
 | 
			
		||||
                            <select id="hybridenabled" class="form-select" @bind="@_hybridenabled" required>
 | 
			
		||||
                            <select id="hybrid" class="form-select" @bind="@_hybrid" required>
 | 
			
		||||
                                <option value="True">@SharedLocalizer["Yes"]</option>
 | 
			
		||||
                                <option value="False">@SharedLocalizer["No"]</option>
 | 
			
		||||
                            </select>
 | 
			
		||||
@ -414,9 +419,9 @@
 | 
			
		||||
    private int _aliasid = -1;
 | 
			
		||||
    private string _aliasname;
 | 
			
		||||
    private string _defaultalias;
 | 
			
		||||
    private string _runtime = "";
 | 
			
		||||
    private string _prerender = "";
 | 
			
		||||
    private string _hybridenabled = "";
 | 
			
		||||
    private string _rendermode = RenderModes.InteractiveServer;
 | 
			
		||||
    private string _prerender = "True";
 | 
			
		||||
    private string _hybrid = "False";
 | 
			
		||||
    private string _tenant = string.Empty;
 | 
			
		||||
    private string _database = string.Empty;
 | 
			
		||||
    private string _connectionstring = string.Empty;
 | 
			
		||||
@ -500,9 +505,9 @@
 | 
			
		||||
                await GetAliases();
 | 
			
		||||
 | 
			
		||||
                // hosting model
 | 
			
		||||
                _runtime = site.Runtime;
 | 
			
		||||
                _prerender = site.RenderMode.Replace(_runtime, "");
 | 
			
		||||
                _hybridenabled = site.HybridEnabled.ToString();
 | 
			
		||||
                _rendermode = site.RenderMode;
 | 
			
		||||
                _prerender = site.Prerender.ToString();
 | 
			
		||||
                _hybrid = site.Hybrid.ToString();
 | 
			
		||||
 | 
			
		||||
                // database
 | 
			
		||||
                if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
 | 
			
		||||
@ -640,11 +645,11 @@
 | 
			
		||||
                        // hosting model
 | 
			
		||||
                        if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
 | 
			
		||||
                        {
 | 
			
		||||
                            if (site.Runtime != _runtime || site.RenderMode != _runtime + _prerender || site.HybridEnabled != bool.Parse(_hybridenabled))
 | 
			
		||||
                            if (site.RenderMode != _rendermode || site.Prerender != bool.Parse(_prerender) || site.Hybrid != bool.Parse(_hybrid))
 | 
			
		||||
                            {
 | 
			
		||||
                                site.Runtime = _runtime;
 | 
			
		||||
                                site.RenderMode = _runtime + _prerender;
 | 
			
		||||
                                site.HybridEnabled = bool.Parse(_hybridenabled);
 | 
			
		||||
                                site.RenderMode = _rendermode;
 | 
			
		||||
                                site.Prerender = bool.Parse(_prerender);
 | 
			
		||||
                                site.Hybrid = bool.Parse(_hybrid);
 | 
			
		||||
                                reload = true; // needs to be reloaded on serve
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
@ -71,20 +71,13 @@ else
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="row mb-1 align-items-center">
 | 
			
		||||
                <Label Class="col-sm-3" For="runtime" HelpText="The runtime hosting model" ResourceKey="Runtime">Runtime: </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">
 | 
			
		||||
                    <select id="runtime" class="form-select" @bind="@_runtime" required>
 | 
			
		||||
                        <option value="Server">@SharedLocalizer["BlazorServer"]</option>
 | 
			
		||||
                        <option value="WebAssembly">@SharedLocalizer["BlazorWebAssembly"]</option>
 | 
			
		||||
					</select>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="row mb-1 align-items-center">
 | 
			
		||||
                <Label Class="col-sm-3" For="prerender" HelpText="Specifies if the site should be prerendered (for search crawlers, etc...)" ResourceKey="Prerender">Prerender? </Label>
 | 
			
		||||
                <div class="col-sm-9">
 | 
			
		||||
                    <select id="prerender" class="form-select" @bind="@_prerender" required>
 | 
			
		||||
                        <option value="Prerendered">@SharedLocalizer["Yes"]</option>
 | 
			
		||||
                        <option value="">@SharedLocalizer["No"]</option>
 | 
			
		||||
                    <select id="rendermode" class="form-select" @bind="@_rendermode" required>
 | 
			
		||||
                        <option value="@RenderModes.StaticServer">@SharedLocalizer[@RenderModes.StaticServer]</option>
 | 
			
		||||
                        <option value="@RenderModes.InteractiveServer">@SharedLocalizer[@RenderModes.InteractiveServer]</option>
 | 
			
		||||
                        <option value="@RenderModes.InteractiveWebAssembly">@SharedLocalizer[@RenderModes.InteractiveWebAssembly]</option>
 | 
			
		||||
                        <option value="@RenderModes.InteractiveAuto">@SharedLocalizer[@RenderModes.InteractiveAuto]</option>
 | 
			
		||||
                    </select>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
@ -201,8 +194,7 @@ else
 | 
			
		||||
    private string _themetype = "-";
 | 
			
		||||
    private string _containertype = "-";
 | 
			
		||||
    private string _sitetemplatetype = "-";
 | 
			
		||||
    private string _runtime = "Server";
 | 
			
		||||
    private string _prerender = "Prerendered";
 | 
			
		||||
    private string _rendermode = RenderModes.InteractiveServer;
 | 
			
		||||
 | 
			
		||||
    public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host;
 | 
			
		||||
 | 
			
		||||
@ -399,8 +391,7 @@ else
 | 
			
		||||
                        config.DefaultContainer = _containertype;
 | 
			
		||||
                        config.DefaultAdminContainer = "";
 | 
			
		||||
                        config.SiteTemplate = _sitetemplatetype;
 | 
			
		||||
                        config.Runtime = _runtime;
 | 
			
		||||
                        config.RenderMode = _runtime + _prerender;
 | 
			
		||||
                        config.RenderMode = _rendermode;
 | 
			
		||||
 | 
			
		||||
                        ShowProgressIndicator();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -277,16 +277,16 @@
 | 
			
		||||
    <value>Hosting Model</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Prerender.HelpText" xml:space="preserve">
 | 
			
		||||
    <value>Specifies if the site should be prerendered (for search crawlers, etc...)</value>
 | 
			
		||||
    <value>Specifies if the site supports prerendering</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Prerender.Text" xml:space="preserve">
 | 
			
		||||
    <value>Prerender? </value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Runtime.HelpText" xml:space="preserve">
 | 
			
		||||
    <value>The Blazor runtime hosting model for the site</value>
 | 
			
		||||
  <data name="RenderMode.HelpText" xml:space="preserve">
 | 
			
		||||
    <value>The default render mode for the site</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Runtime.Text" xml:space="preserve">
 | 
			
		||||
    <value>Runtime: </value>
 | 
			
		||||
  <data name="RenderMode.Text" xml:space="preserve">
 | 
			
		||||
    <value>Render Mode:</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Browse" xml:space="preserve">
 | 
			
		||||
    <value>Browse</value>
 | 
			
		||||
 | 
			
		||||
@ -223,16 +223,16 @@
 | 
			
		||||
    <value>Error loading Database Configuration Control</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Prerender.HelpText" xml:space="preserve">
 | 
			
		||||
    <value>Specifies if the site should be prerendered (for search crawlers, etc...)</value>
 | 
			
		||||
    <value>Specifies if the site supports prerendering</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Prerender.Text" xml:space="preserve">
 | 
			
		||||
    <value>Prerender? </value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Runtime.HelpText" xml:space="preserve">
 | 
			
		||||
    <value>The Blazor runtime hosting model</value>
 | 
			
		||||
  <data name="RenderMode.HelpText" xml:space="preserve">
 | 
			
		||||
    <value>The default render mode for the site</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Runtime.Text" xml:space="preserve">
 | 
			
		||||
    <value>Runtime: </value>
 | 
			
		||||
  <data name="RenderMode.Text" xml:space="preserve">
 | 
			
		||||
    <value>Render Mode: </value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="ConnectionString.HelpText" xml:space="preserve">
 | 
			
		||||
    <value>Enter a complete connection string including all parameters and delimiters</value>
 | 
			
		||||
 | 
			
		||||
@ -312,14 +312,14 @@
 | 
			
		||||
  <data name="Not Specified" xml:space="preserve">
 | 
			
		||||
    <value>Not Specified</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="BlazorServer" xml:space="preserve">
 | 
			
		||||
    <value>Blazor Server</value>
 | 
			
		||||
  <data name="InteractiveServer" xml:space="preserve">
 | 
			
		||||
    <value>Interactive Server Rendering</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="BlazorWebAssembly" xml:space="preserve">
 | 
			
		||||
    <value>Blazor WebAssembly</value>
 | 
			
		||||
  <data name="InteractiveWebAssembly" xml:space="preserve">
 | 
			
		||||
    <value>Interactive WebAssembly Rendering</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="BlazorHybrid" xml:space="preserve">
 | 
			
		||||
    <value>Blazor Hybrid</value>
 | 
			
		||||
  <data name="StaticServer" xml:space="preserve">
 | 
			
		||||
    <value>Static Server Rendering</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Settings" xml:space="preserve">
 | 
			
		||||
    <value>Settings</value>
 | 
			
		||||
@ -441,4 +441,7 @@
 | 
			
		||||
  <data name="Message.EffectiveExpiryDateError" xml:space="preserve">
 | 
			
		||||
    <value>Effective Date cannot be after Expiry Date.</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="InteractiveAuto" xml:space="preserve">
 | 
			
		||||
    <value>Interactive Auto Rendering</value>
 | 
			
		||||
  </data>
 | 
			
		||||
</root>
 | 
			
		||||
@ -16,7 +16,7 @@
 | 
			
		||||
            <div style="@_display">
 | 
			
		||||
                <CascadingAuthenticationState>
 | 
			
		||||
                    <CascadingValue Value="@PageState">
 | 
			
		||||
                        <SiteRouter Runtime="@Runtime" RenderMode="@RenderMode" VisitorId="@VisitorId" OnStateChange="@ChangeState" />
 | 
			
		||||
                        <SiteRouter Runtime="Web" RenderMode="@RenderMode" VisitorId="@VisitorId" OnStateChange="@ChangeState" />
 | 
			
		||||
                    </CascadingValue>
 | 
			
		||||
                </CascadingAuthenticationState>
 | 
			
		||||
            </div>
 | 
			
		||||
@ -34,9 +34,6 @@
 | 
			
		||||
    [Parameter]
 | 
			
		||||
    public string AntiForgeryToken { get; set; }
 | 
			
		||||
 | 
			
		||||
    [Parameter]
 | 
			
		||||
    public string Runtime { get; set; }
 | 
			
		||||
 | 
			
		||||
    [Parameter]
 | 
			
		||||
    public string RenderMode { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -19,6 +19,7 @@ namespace Oqtane.UI
 | 
			
		||||
        public bool EditMode { get; set; }
 | 
			
		||||
        public DateTime LastSyncDate { get; set; }
 | 
			
		||||
        public Shared.Runtime Runtime { get; set; }
 | 
			
		||||
        public string RenderMode { get; set; }
 | 
			
		||||
        public int VisitorId { get; set; }
 | 
			
		||||
        public string RemoteIPAddress { get; set; }
 | 
			
		||||
        public string ReturnUrl { get; set; }
 | 
			
		||||
 | 
			
		||||
@ -1,19 +1,20 @@
 | 
			
		||||
using Microsoft.AspNetCore.Components.Web;
 | 
			
		||||
using Microsoft.AspNetCore.Components;
 | 
			
		||||
using Oqtane.Shared;
 | 
			
		||||
 | 
			
		||||
namespace Oqtane.Client.Utilities
 | 
			
		||||
namespace Oqtane.UI
 | 
			
		||||
{
 | 
			
		||||
    public static class RenderModes
 | 
			
		||||
    public static class RenderMode
 | 
			
		||||
    {
 | 
			
		||||
        public static IComponentRenderMode GetInteractiveRenderMode(string interactiveRenderMode, bool prerender)
 | 
			
		||||
        {
 | 
			
		||||
            switch (interactiveRenderMode)
 | 
			
		||||
            {
 | 
			
		||||
                case "InteractiveServer":
 | 
			
		||||
                case RenderModes.InteractiveServer:
 | 
			
		||||
                    return new InteractiveServerRenderMode(prerender);
 | 
			
		||||
                case "InteractiveWebAssembly":
 | 
			
		||||
                case RenderModes.InteractiveWebAssembly:
 | 
			
		||||
                    return new InteractiveWebAssemblyRenderMode(prerender);
 | 
			
		||||
                case "InteractiveAuto":
 | 
			
		||||
                case RenderModes.InteractiveAuto:
 | 
			
		||||
                    return new InteractiveAutoRenderMode(prerender);
 | 
			
		||||
            }
 | 
			
		||||
            return null;
 | 
			
		||||
@ -1,11 +0,0 @@
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
namespace Oqtane.UI
 | 
			
		||||
{
 | 
			
		||||
    [Obsolete("This enum is deprecated and will be removed in the upcoming major release, please use Oqtane.Shared.Runtime instead.")]
 | 
			
		||||
    public enum Runtime
 | 
			
		||||
    {
 | 
			
		||||
        Server,
 | 
			
		||||
        WebAssembly
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -100,7 +100,6 @@
 | 
			
		||||
        var editmode = false;
 | 
			
		||||
        var refresh = false;
 | 
			
		||||
        var lastsyncdate = DateTime.MinValue;
 | 
			
		||||
        var runtime = (Shared.Runtime)Enum.Parse(typeof(Shared.Runtime), Runtime);
 | 
			
		||||
        _error = "";
 | 
			
		||||
 | 
			
		||||
        Route route = new Route(_absoluteUri, SiteState.Alias.Path);
 | 
			
		||||
@ -286,7 +285,8 @@
 | 
			
		||||
                        Action = action,
 | 
			
		||||
                        EditMode = editmode,
 | 
			
		||||
                        LastSyncDate = lastsyncdate,
 | 
			
		||||
                        Runtime = runtime,
 | 
			
		||||
                        Runtime = Shared.Runtime.Hybrid,
 | 
			
		||||
                        RenderMode = RenderMode,
 | 
			
		||||
						VisitorId = VisitorId,
 | 
			
		||||
						RemoteIPAddress = SiteState.RemoteIPAddress,
 | 
			
		||||
						ReturnUrl = returnurl,
 | 
			
		||||
@ -425,7 +425,7 @@
 | 
			
		||||
            {
 | 
			
		||||
                var typename = Constants.ErrorModule;
 | 
			
		||||
 | 
			
		||||
                if (module.ModuleDefinition != null && (module.ModuleDefinition.Runtimes == "" || module.ModuleDefinition.Runtimes.Contains(Runtime)))
 | 
			
		||||
                if (module.ModuleDefinition != null && (module.ModuleDefinition.Runtimes == "" || module.ModuleDefinition.Runtimes.Contains(RenderMode)))
 | 
			
		||||
                {
 | 
			
		||||
                    typename = module.ModuleDefinition.ControlTypeTemplate;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@
 | 
			
		||||
@using Microsoft.Net.Http.Headers
 | 
			
		||||
@using Microsoft.Extensions.Primitives
 | 
			
		||||
@using Oqtane.Client
 | 
			
		||||
@using Oqtane.Client.Utilities
 | 
			
		||||
@using Oqtane.UI
 | 
			
		||||
@using Oqtane.Repository
 | 
			
		||||
@using Oqtane.Infrastructure
 | 
			
		||||
@using Oqtane.Security
 | 
			
		||||
@ -47,26 +47,26 @@
 | 
			
		||||
    @((MarkupString)_styleSheets)
 | 
			
		||||
    <link id="app-stylesheet-page" />
 | 
			
		||||
    <link id="app-stylesheet-module" />
 | 
			
		||||
    @if (_renderMode == "Interactive")
 | 
			
		||||
    @if (_renderMode == RenderModes.StaticServer)
 | 
			
		||||
    {
 | 
			
		||||
        <Head @rendermode="@RenderModes.GetInteractiveRenderMode((_renderMode + _interactiveRenderMode), _prerender.Contains("Prerendered"))" />
 | 
			
		||||
        <Head />
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        <Head />        
 | 
			
		||||
        <Head @rendermode="@RenderMode.GetInteractiveRenderMode((_renderMode), _prerender)" />
 | 
			
		||||
    }
 | 
			
		||||
    @((MarkupString)_headResources)
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
    @if (string.IsNullOrEmpty(_message))
 | 
			
		||||
    {
 | 
			
		||||
        @if (_renderMode == "Interactive")
 | 
			
		||||
        @if (_renderMode == RenderModes.StaticServer)
 | 
			
		||||
        {
 | 
			
		||||
            <Routes AntiForgeryToken="@_antiForgeryToken" Runtime="@_interactiveRenderMode" RenderMode="@_prerender" VisitorId="@_visitorId" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="@_authorizationToken" @rendermode="@RenderModes.GetInteractiveRenderMode((_renderMode + _interactiveRenderMode), _prerender.Contains("Prerendered"))" />
 | 
			
		||||
            <Routes AntiForgeryToken="@_antiForgeryToken" RenderMode="@_renderMode" VisitorId="@_visitorId" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="@_authorizationToken" />
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            <Routes AntiForgeryToken="@_antiForgeryToken" Runtime="@_interactiveRenderMode" RenderMode="@_prerender" VisitorId="@_visitorId" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="@_authorizationToken" />
 | 
			
		||||
            <Routes AntiForgeryToken="@_antiForgeryToken" RenderMode="@_renderMode" VisitorId="@_visitorId" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="@_authorizationToken" @rendermode="@RenderMode.GetInteractiveRenderMode((_renderMode), _prerender)" />
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        <script src="js/interop.js"></script>
 | 
			
		||||
@ -90,9 +90,8 @@
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
@code {
 | 
			
		||||
    private string _renderMode = "Interactive";
 | 
			
		||||
    private string _interactiveRenderMode = "Server";
 | 
			
		||||
    private string _prerender = "Prerendered";
 | 
			
		||||
    private string _renderMode = RenderModes.InteractiveServer;
 | 
			
		||||
    private bool _prerender = true;
 | 
			
		||||
    private int _visitorId = -1;
 | 
			
		||||
    private string _remoteIPAddress = "";
 | 
			
		||||
    private string _authorizationToken = "";
 | 
			
		||||
@ -128,16 +127,10 @@
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                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.Hybrid)
 | 
			
		||||
                {
 | 
			
		||||
                    if (!string.IsNullOrEmpty(site.Runtime))
 | 
			
		||||
                    {
 | 
			
		||||
                        _interactiveRenderMode = site.Runtime;
 | 
			
		||||
                    }
 | 
			
		||||
                    if (!string.IsNullOrEmpty(site.RenderMode))
 | 
			
		||||
                    {
 | 
			
		||||
                        _prerender = site.RenderMode;
 | 
			
		||||
                    }
 | 
			
		||||
                    _renderMode = site.RenderMode;
 | 
			
		||||
                    _prerender = site.Prerender;
 | 
			
		||||
 | 
			
		||||
                    Route route = new Route(url, alias.Path);
 | 
			
		||||
                    var page = PageRepository.GetPage(route.PagePath, site.SiteId);
 | 
			
		||||
@ -186,7 +179,7 @@
 | 
			
		||||
                    ManageStyleSheets(resources, alias, theme.ThemeName);
 | 
			
		||||
 | 
			
		||||
                    // scripts
 | 
			
		||||
                    if (_interactiveRenderMode == "InteractiveServer")
 | 
			
		||||
                    if (_renderMode == RenderModes.InteractiveServer)
 | 
			
		||||
                    {
 | 
			
		||||
                        _reconnectScript = CreateReconnectScript();
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
@ -119,7 +119,7 @@ namespace Oqtane.Controllers
 | 
			
		||||
                var assemblyList = new List<ClientAssembly>();
 | 
			
		||||
 | 
			
		||||
                var site = _sites.GetSite(alias.SiteId);
 | 
			
		||||
                if (site != null && (site.Runtime == "WebAssembly" || site.HybridEnabled))
 | 
			
		||||
                if (site != null && (site.RenderMode == "InteractiveWebAssembly" || site.Hybrid))
 | 
			
		||||
                {
 | 
			
		||||
                    var binFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
 | 
			
		||||
 | 
			
		||||
@ -201,7 +201,7 @@ namespace Oqtane.Controllers
 | 
			
		||||
        private byte[] GetZIP(string list, Alias alias)
 | 
			
		||||
        {
 | 
			
		||||
            var site = _sites.GetSite(alias.SiteId);
 | 
			
		||||
            if (site != null && (site.Runtime == "WebAssembly" || site.HybridEnabled))
 | 
			
		||||
            if (site != null && (site.RenderMode == "InteractiveWebAssembly" || site.Hybrid))
 | 
			
		||||
            {
 | 
			
		||||
                var binFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -212,7 +212,7 @@ namespace Oqtane.Controllers
 | 
			
		||||
                site = _sites.UpdateSite(site);
 | 
			
		||||
                _syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, site.SiteId, SyncEventActions.Update);
 | 
			
		||||
                string action = SyncEventActions.Refresh;
 | 
			
		||||
                if (current.Runtime != site.Runtime || current.RenderMode != site.RenderMode)
 | 
			
		||||
                if (current.RenderMode != site.RenderMode)
 | 
			
		||||
                {
 | 
			
		||||
                    action = SyncEventActions.Reload;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@ -556,9 +556,9 @@ namespace Oqtane.Infrastructure
 | 
			
		||||
                                DefaultContainerType = (!string.IsNullOrEmpty(install.DefaultContainer)) ? install.DefaultContainer : Constants.DefaultContainer,
 | 
			
		||||
                                AdminContainerType = (!string.IsNullOrEmpty(install.DefaultAdminContainer)) ? install.DefaultAdminContainer : Constants.DefaultAdminContainer,
 | 
			
		||||
                                SiteTemplateType = install.SiteTemplate,
 | 
			
		||||
                                Runtime = (!string.IsNullOrEmpty(install.Runtime)) ? install.Runtime : _configManager.GetSection("Runtime").Value,
 | 
			
		||||
                                RenderMode = (!string.IsNullOrEmpty(install.RenderMode)) ? install.RenderMode : _configManager.GetSection("RenderMode").Value,
 | 
			
		||||
                                HybridEnabled = false
 | 
			
		||||
                                Prerender = true,
 | 
			
		||||
                                Hybrid = false
 | 
			
		||||
                            };
 | 
			
		||||
                            site = sites.AddSite(site);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -8,6 +8,7 @@ using Oqtane.Repository;
 | 
			
		||||
namespace Oqtane.Migrations.Tenant
 | 
			
		||||
{
 | 
			
		||||
    [DbContext(typeof(TenantDBContext))]
 | 
			
		||||
    // note that the following migration was actually for version 5.0.2 (ie. "Tenant.05.00.02.01")
 | 
			
		||||
    [Migration("Tenant.05.01.00.01")]
 | 
			
		||||
    public class AddPageEffectiveExpiryDate : MultiDatabaseMigration
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
@ -8,6 +8,7 @@ using Oqtane.Repository;
 | 
			
		||||
namespace Oqtane.Migrations.Tenant
 | 
			
		||||
{
 | 
			
		||||
    [DbContext(typeof(TenantDBContext))]
 | 
			
		||||
    // note that the following migration was actually for version 5.0.2 (ie. "Tenant.05.00.02.02")
 | 
			
		||||
    [Migration("Tenant.05.01.00.02")]
 | 
			
		||||
    public class AddPageModuleEffectiveExpiryDate : MultiDatabaseMigration
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
@ -7,6 +7,7 @@ using Oqtane.Repository;
 | 
			
		||||
namespace Oqtane.Migrations.Tenant
 | 
			
		||||
{
 | 
			
		||||
    [DbContext(typeof(TenantDBContext))]
 | 
			
		||||
    // note that the following migration was actually for version 5.0.2 (ie. "Tenant.05.00.02.03")
 | 
			
		||||
    [Migration("Tenant.05.01.00.03")]
 | 
			
		||||
    public class AddProfileAutocomplete : MultiDatabaseMigration
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										39
									
								
								Oqtane.Server/Migrations/Tenant/05010004_AddSitePrerender.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								Oqtane.Server/Migrations/Tenant/05010004_AddSitePrerender.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
using Microsoft.EntityFrameworkCore.Infrastructure;
 | 
			
		||||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
			
		||||
using Oqtane.Databases.Interfaces;
 | 
			
		||||
using Oqtane.Migrations.EntityBuilders;
 | 
			
		||||
using Oqtane.Repository;
 | 
			
		||||
using Oqtane.Shared;
 | 
			
		||||
 | 
			
		||||
namespace Oqtane.Migrations.Tenant
 | 
			
		||||
{
 | 
			
		||||
    [DbContext(typeof(TenantDBContext))]
 | 
			
		||||
    [Migration("Tenant.05.01.00.04")]
 | 
			
		||||
    public class AddSitePrerender : MultiDatabaseMigration
 | 
			
		||||
    {
 | 
			
		||||
        public AddSitePrerender(IDatabase database) : base(database)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void Up(MigrationBuilder migrationBuilder)
 | 
			
		||||
        {
 | 
			
		||||
            var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase);
 | 
			
		||||
 | 
			
		||||
            siteEntityBuilder.UpdateColumn("RenderMode", $"'{RenderModes.InteractiveServer}'");
 | 
			
		||||
 | 
			
		||||
            siteEntityBuilder.AddBooleanColumn("Prerender", true);
 | 
			
		||||
            siteEntityBuilder.UpdateColumn("Prerender", "1", "bool", "");
 | 
			
		||||
 | 
			
		||||
            siteEntityBuilder.AddBooleanColumn("Hybrid", true);
 | 
			
		||||
            siteEntityBuilder.UpdateColumn("Hybrid", "0", "bool", "");
 | 
			
		||||
 | 
			
		||||
            siteEntityBuilder.DropColumn("Runtime");
 | 
			
		||||
            siteEntityBuilder.DropColumn("HybridEnabled");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void Down(MigrationBuilder migrationBuilder)
 | 
			
		||||
        {
 | 
			
		||||
            // not implemented
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -2,8 +2,7 @@ namespace Oqtane.Shared
 | 
			
		||||
{
 | 
			
		||||
    public enum Runtime
 | 
			
		||||
    {
 | 
			
		||||
        Server,
 | 
			
		||||
        WebAssembly,
 | 
			
		||||
        Web,
 | 
			
		||||
        Hybrid
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -69,19 +69,19 @@ namespace Oqtane.Models
 | 
			
		||||
        public string SiteGuid { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The hosting model for the site (ie. Server or WebAssembly ).
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Runtime { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The render mode for the site (ie. Server, ServerPrerendered, WebAssembly, WebAssemblyPrerendered ).
 | 
			
		||||
        /// The default render mode for the site (ie. Static,InteractiveServer,InteractiveWebAssembly,InteractiveAuto)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string RenderMode { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// If the site supports prerendering (only applies to Interactive rendering)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool Prerender { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Indicates if a site can be integrated with an external .NET MAUI hybrid application
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool HybridEnabled { get; set; }
 | 
			
		||||
        public bool Hybrid { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Keeps track of site configuration changes and is used by the ISiteMigration interface
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,6 @@ namespace Oqtane.Shared
 | 
			
		||||
        public string DefaultTheme { get; set; }
 | 
			
		||||
        public string DefaultContainer { get; set; }
 | 
			
		||||
        public string DefaultAdminContainer { get; set; }
 | 
			
		||||
        public string Runtime { get; set; }
 | 
			
		||||
        public string RenderMode { get; set; }
 | 
			
		||||
        public bool Register { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								Oqtane.Shared/Shared/RenderModes.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Oqtane.Shared/Shared/RenderModes.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
			
		||||
namespace Oqtane.Shared {
 | 
			
		||||
    public class RenderModes {
 | 
			
		||||
        public const string StaticServer = "StaticServer";
 | 
			
		||||
        public const string InteractiveServer = "InteractiveServer";
 | 
			
		||||
        public const string InteractiveWebAssembly = "InteractiveWebAssembly";
 | 
			
		||||
        public const string InteractiveAuto = "InteractiveAuto";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user