Hierarchical page management improvements

This commit is contained in:
Shaun Walker
2019-09-15 19:15:44 -04:00
parent 61dc27cf32
commit 7d353c2205
12 changed files with 354 additions and 199 deletions

View File

@ -6,57 +6,53 @@
@using Oqtane.Security
@namespace Oqtane.Themes.Controls
@inherits ThemeObjectBase
@inject IPageService PageService
@inject IUserService UserService
<ul class="nav flex-column">
@if (parent != null)
{
string url = NavigateUrl();
<li class="nav-item px-3">
<NavLink class="nav-link" href="@parent.Path" Match="NavLinkMatch.All">
<span class="oi oi-media-skip-backward" aria-hidden="true"></span> Back
</NavLink>
</li>
}
@foreach (var p in pages)
{
if (p.IsNavigation && UserSecurity.IsAuthorized(PageState.User, "View", p.Permissions))
{
string url = NavigateUrl(p.Path);
<li class="nav-item px-3">
<NavLink @key="@p.PageId" class="nav-link" href="@url" Match="NavLinkMatch.All">
<span class="oi @p.Icon" aria-hidden="true"></span> @p.Name
</NavLink>
</li>
}
}
</ul>
@if (menu != "")
{
@((MarkupString)menu)
}
@code {
List<Page> pages;
Page parent = null;
string menu = "";
protected override Task OnParametersSetAsync()
protected override void OnInitialized()
{
// if current page has no children
if (PageState.Pages.Where(item => item.ParentId == PageState.Page.PageId).FirstOrDefault() == null)
int level = -1;
int securitylevel = int.MaxValue;
menu = "<ul class=\"nav flex-column\">\n";
foreach (Page p in PageState.Pages.Where(item => item.IsNavigation))
{
// display list of pages which have same parent as current page
pages = PageState.Pages.Where(item => item.ParentId == PageState.Page.ParentId).OrderBy(item => item.Order).ToList();
// if current page has parent
if (PageState.Page.ParentId != null)
if (UserSecurity.IsAuthorized(PageState.User, "View", p.Permissions) && p.Level <= securitylevel)
{
parent = PageState.Pages.Where(item => item.PageId == PageState.Page.ParentId).FirstOrDefault();
securitylevel = int.MaxValue;
menu += "<li class=\"nav-item px-3\">";
menu += "<a href=\"" + NavigateUrl(p.Path) + "\" class=\"nav-link\" style=\"padding-left: " + ((p.Level + 1) * 15).ToString() + "px !important;\">";
if (p.HasChildren)
{
menu += "<i class=\"oi oi-chevron-right\"></i>";
}
if (p.Icon != "")
{
menu += "<span class=\"oi " + p.Icon + "\" aria-hidden=\"true\"></span>";
}
menu += p.Name;
menu += "</a>\n";
menu += "</li>\n";
level = p.Level;
}
else
{
if (securitylevel == int.MaxValue)
{
securitylevel = p.Level;
}
}
}
else
{
// display list of pages which are children of current page
pages = PageState.Pages.Where(item => item.ParentId == PageState.Page.PageId).OrderBy(item => item.Order).ToList();
// current page is parent
parent = PageState.Pages.Where(item => item.ParentId == PageState.Page.ParentId).FirstOrDefault();
}
return Task.CompletedTask;
menu += "</ul>";
}
}