diff --git a/Oqtane.Client/UI/ThemeBuilder.razor b/Oqtane.Client/UI/ThemeBuilder.razor index 21f4c997..f6461256 100644 --- a/Oqtane.Client/UI/ThemeBuilder.razor +++ b/Oqtane.Client/UI/ThemeBuilder.razor @@ -11,6 +11,8 @@ RenderFragment DynamicComponent { get; set; } + private string lastPagePath = ""; + protected override void OnParametersSet() { // handle page redirection @@ -26,7 +28,7 @@ NavigationManager.NavigateTo(Utilities.NavigateUrl(PageState.Alias.Path, "profile", "returnurl=" + WebUtility.UrlEncode(PageState.Route.PathAndQuery))); return; } - + // set page title if (!string.IsNullOrEmpty(PageState.Page.Title)) { @@ -90,7 +92,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender) { - if (!firstRender) + if (!firstRender && PageState.Page.Path != lastPagePath) { if (!string.IsNullOrEmpty(PageState.Site.HeadContent) && PageState.Site.HeadContent.Contains(" item.EntityId == page.PageId).ToList(); } - return pages; + return GetPagesHierarchy(pages); + } + + private static List GetPagesHierarchy(List pages) + { + List hierarchy = new List(); + Action, Page> getPath = null; + getPath = (pageList, page) => + { + IEnumerable children; + int level; + if (page == null) + { + level = -1; + children = pages.Where(item => item.ParentId == null); + } + else + { + level = page.Level; + children = pages.Where(item => item.ParentId == page.PageId); + } + foreach (Page child in children) + { + child.Level = level + 1; + child.HasChildren = pages.Any(item => item.ParentId == child.PageId && !item.IsDeleted && item.IsNavigation); + hierarchy.Add(child); + getPath(pageList, child); + } + }; + pages = pages.OrderBy(item => item.Order).ToList(); + getPath(pages, null); + + // add any non-hierarchical items to the end of the list + foreach (Page page in pages) + { + if (hierarchy.Find(item => item.PageId == page.PageId) == null) + { + hierarchy.Add(page); + } + } + return hierarchy; } public Page AddPage(Page page) diff --git a/Oqtane.Server/Services/SiteService.cs b/Oqtane.Server/Services/SiteService.cs index 84d752c2..2a12b38b 100644 --- a/Oqtane.Server/Services/SiteService.cs +++ b/Oqtane.Server/Services/SiteService.cs @@ -127,7 +127,6 @@ namespace Oqtane.Services .ToDictionary(setting => setting.SettingName, setting => (setting.IsPrivate ? _private : "") + setting.SettingValue); site.Pages.Add(page); } - site.Pages = GetPagesHierarchy(site.Pages); // framework modules var modules = GetPageModules(site.SiteId);