diff --git a/Oqtane.Client/Modules/ModuleBase.cs b/Oqtane.Client/Modules/ModuleBase.cs index 1bb76dca..896c151a 100644 --- a/Oqtane.Client/Modules/ModuleBase.cs +++ b/Oqtane.Client/Modules/ModuleBase.cs @@ -10,7 +10,6 @@ using System.Collections.Generic; using Microsoft.JSInterop; using System.Linq; using System.Dynamic; -using System.Net.Http.Headers; namespace Oqtane.Modules { @@ -19,6 +18,7 @@ namespace Oqtane.Modules private Logger _logger; private string _urlparametersstate; private Dictionary _urlparameters; + private string _scripts = ""; protected Logger logger => _logger ?? (_logger = new Logger(this)); @@ -67,9 +67,80 @@ namespace Oqtane.Modules return _urlparameters; } } + public string Scripts + { + get + { + return _scripts; + } + } // base lifecycle method for handling JSInterop script registration + protected override void OnParametersSet() + { + //if (ModuleState.RenderMode == RenderModes.Static) + //{ + // _scripts = ""; + // var script = ""; + // List resources = null; + // var type = GetType(); + // if (type.BaseType == typeof(ModuleBase)) + // { + // if (PageState.Page.Resources != null) + // { + // resources = PageState.Page.Resources.Where(item => item.ResourceType == ResourceType.Script && item.Level != ResourceLevel.Site && item.Namespace == type.Namespace).ToList(); + // } + // } + // else // modulecontrolbase + // { + // if (Resources != null) + // { + // resources = Resources.Where(item => item.ResourceType == ResourceType.Script).ToList(); + // } + // } + // if (resources != null && resources.Any()) + // { + // var scripts = ""; + // var inline = 0; + // foreach (Resource resource in resources) + // { + // if (!string.IsNullOrEmpty(resource.Url)) + // { + // var url = (resource.Url.Contains("://")) ? resource.Url : PageState.Alias.BaseUrl + resource.Url; + // script += "{" + $"href:'{url}', bundle:'{resource.Bundle ?? ""}', integrity:'{resource.Integrity ?? ""}', crossorigin:'{resource.CrossOrigin ?? ""}', es6module:{resource.ES6Module.ToString().ToLower()}, location:'{resource.Location.ToString().ToLower()}'" + "};"; + // if (scripts.Contains(url)) + // { + // scripts += ((scripts != "") ? ",\n" : "") + script; + // } + // } + // else + // { + // inline += 1; + // script = $"includeScript('{GetType().Namespace.ToLower() + inline.ToString()}', '', '', '', '{resource.Content}', '{resource.Location.ToString().ToLower()}');\n"; + // if (_scripts.Contains(script)) + // { + // _scripts += script; + // } + // } + // } + // if (string.IsNullOrEmpty(scripts)) + // { + // script = "const args = [" + scripts + "];\n"; + // script += "includeScripts.apply(this, args);\n"; + // if (_scripts.Contains(script)) + // { + // _scripts += script; + // } + // } + // } + // if (!string.IsNullOrEmpty(_scripts)) + // { + // _scripts = "\n"; + // } + //} + } + protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) @@ -90,7 +161,7 @@ namespace Oqtane.Modules resources = Resources.Where(item => item.ResourceType == ResourceType.Script).ToList(); } } - if (resources != null &&resources.Any()) + if (resources != null && resources.Any()) { var interop = new Interop(JSRuntime); var scripts = new List(); diff --git a/Oqtane.Client/UI/InteractiveRenderMode.cs b/Oqtane.Client/UI/InteractiveRenderMode.cs index 0483b748..7f21f673 100644 --- a/Oqtane.Client/UI/InteractiveRenderMode.cs +++ b/Oqtane.Client/UI/InteractiveRenderMode.cs @@ -6,7 +6,7 @@ namespace Oqtane.UI { public static class InteractiveRenderMode { - public static IComponentRenderMode? GetInteractiveRenderMode(string runtime, bool prerender) + public static IComponentRenderMode GetInteractiveRenderMode(string runtime, bool prerender) { switch (runtime) { @@ -17,7 +17,7 @@ namespace Oqtane.UI case Runtimes.Auto: return new InteractiveAutoRenderMode(prerender: prerender); } - return null; // default to inherit existing render mode + return new InteractiveServerRenderMode(prerender: prerender); } } } diff --git a/Oqtane.Client/UI/ModuleInstance.razor b/Oqtane.Client/UI/ModuleInstance.razor index 1aea64b6..4fd08426 100644 --- a/Oqtane.Client/UI/ModuleInstance.razor +++ b/Oqtane.Client/UI/ModuleInstance.razor @@ -12,7 +12,8 @@ else @code { // this component is on the static side of the render mode boundary - // it passes state as serializable parameters across the boundary so that the state can be used by downstream interactive components + // it passes state as serializable parameters across the boundary + // this enables the state to be used by downstream interactive components [CascadingParameter] protected PageState PageState { get; set; } @@ -20,6 +21,7 @@ else [CascadingParameter] private Module ModuleState { get; set; } + [Obsolete("AddModuleMessage is deprecated. Use ModuleBase.AddModuleMessage instead.", false)] public void AddModuleMessage(string message, MessageType type) { diff --git a/Oqtane.Database.PostgreSQL/Oqtane.Database.PostgreSQL.csproj b/Oqtane.Database.PostgreSQL/Oqtane.Database.PostgreSQL.csproj index 3444d372..ae43a364 100644 --- a/Oqtane.Database.PostgreSQL/Oqtane.Database.PostgreSQL.csproj +++ b/Oqtane.Database.PostgreSQL/Oqtane.Database.PostgreSQL.csproj @@ -35,7 +35,7 @@ - +