@namespace Oqtane.UI @inject IJSRuntime JsRuntime @inject NavigationManager NavigationManager @DynamicComponent @code { [CascadingParameter] PageState PageState { get; set; } RenderFragment DynamicComponent { get; set; } protected override void OnParametersSet() { // handle page redirection if (!string.IsNullOrEmpty(PageState.Page.Url)) { NavigationManager.NavigateTo(PageState.Page.Url); return; } DynamicComponent = builder => { var themeType = Type.GetType(PageState.Page.ThemeType); builder.OpenComponent(0, themeType); builder.CloseComponent(); }; } protected override async Task OnAfterRenderAsync(bool firstRender) { if (!firstRender) { var interop = new Interop(JsRuntime); // set page title if (!string.IsNullOrEmpty(PageState.Page.Title)) { await interop.UpdateTitle(PageState.Page.Title); } else { await interop.UpdateTitle(PageState.Site.Name + " - " + PageState.Page.Name); } // manage stylesheets for this page string batch = DateTime.Now.ToString("yyyyMMddHHmmssfff"); var links = new List(); foreach (Resource resource in PageState.Page.Resources.Where(item => item.ResourceType == ResourceType.Stylesheet && item.Declaration != ResourceDeclaration.Global)) { links.Add(new { id = "app-stylesheet-" + batch + "-" + (links.Count + 1).ToString("00"), rel = "stylesheet", href = resource.Url, type = "text/css", integrity = resource.Integrity ?? "", crossorigin = resource.CrossOrigin ?? "", key = "" }); } if (links.Any()) { await interop.IncludeLinks(links.ToArray()); } await interop.RemoveElementsById("app-stylesheet", "", "app-stylesheet-" + batch + "-00"); } } }