moved hierarchical ordering logic to server for pages and folders
This commit is contained in:
parent
075748d697
commit
28f73727b5
|
@ -1,10 +1,8 @@
|
||||||
using Oqtane.Models;
|
using Oqtane.Models;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Oqtane.Shared;
|
using Oqtane.Shared;
|
||||||
using System;
|
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using Oqtane.Documentation;
|
using Oqtane.Documentation;
|
||||||
|
@ -20,9 +18,7 @@ namespace Oqtane.Services
|
||||||
|
|
||||||
public async Task<List<Folder>> GetFoldersAsync(int siteId)
|
public async Task<List<Folder>> GetFoldersAsync(int siteId)
|
||||||
{
|
{
|
||||||
List<Folder> folders = await GetJsonAsync<List<Folder>>($"{ApiUrl}?siteid={siteId}");
|
return await GetJsonAsync<List<Folder>>($"{ApiUrl}?siteid={siteId}");
|
||||||
folders = GetFoldersHierarchy(folders);
|
|
||||||
return folders;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Folder> GetFolderAsync(int folderId)
|
public async Task<Folder> GetFolderAsync(int folderId)
|
||||||
|
@ -58,48 +54,5 @@ namespace Oqtane.Services
|
||||||
{
|
{
|
||||||
await DeleteAsync($"{ApiUrl}/{folderId}");
|
await DeleteAsync($"{ApiUrl}/{folderId}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Folder> GetFoldersHierarchy(List<Folder> folders)
|
|
||||||
{
|
|
||||||
List<Folder> hierarchy = new List<Folder>();
|
|
||||||
Action<List<Folder>, Folder> getPath = null;
|
|
||||||
var folders1 = folders;
|
|
||||||
getPath = (folderList, folder) =>
|
|
||||||
{
|
|
||||||
IEnumerable<Folder> children;
|
|
||||||
int level;
|
|
||||||
if (folder == null)
|
|
||||||
{
|
|
||||||
level = -1;
|
|
||||||
children = folders1.Where(item => item.ParentId == null);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
level = folder.Level;
|
|
||||||
children = folders1.Where(item => item.ParentId == folder.FolderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (Folder child in children)
|
|
||||||
{
|
|
||||||
child.Level = level + 1;
|
|
||||||
child.HasChildren = folders1.Any(item => item.ParentId == child.FolderId);
|
|
||||||
hierarchy.Add(child);
|
|
||||||
if (getPath != null) getPath(folderList, child);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
folders = folders.OrderBy(item => item.Order).ToList();
|
|
||||||
getPath(folders, null);
|
|
||||||
|
|
||||||
// add any non-hierarchical items to the end of the list
|
|
||||||
foreach (Folder folder in folders)
|
|
||||||
{
|
|
||||||
if (hierarchy.Find(item => item.FolderId == folder.FolderId) == null)
|
|
||||||
{
|
|
||||||
hierarchy.Add(folder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return hierarchy;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
using Oqtane.Models;
|
using Oqtane.Models;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Oqtane.Shared;
|
using Oqtane.Shared;
|
||||||
using System;
|
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using Oqtane.Documentation;
|
using Oqtane.Documentation;
|
||||||
|
|
||||||
|
@ -19,9 +17,7 @@ namespace Oqtane.Services
|
||||||
|
|
||||||
public async Task<List<Page>> GetPagesAsync(int siteId)
|
public async Task<List<Page>> GetPagesAsync(int siteId)
|
||||||
{
|
{
|
||||||
List<Page> pages = await GetJsonAsync<List<Page>>($"{Apiurl}?siteid={siteId}");
|
return await GetJsonAsync<List<Page>>($"{Apiurl}?siteid={siteId}");
|
||||||
pages = GetPagesHierarchy(pages);
|
|
||||||
return pages;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Page> GetPageAsync(int pageId)
|
public async Task<Page> GetPageAsync(int pageId)
|
||||||
|
@ -73,45 +69,5 @@ namespace Oqtane.Services
|
||||||
{
|
{
|
||||||
await DeleteAsync($"{Apiurl}/{pageId}");
|
await DeleteAsync($"{Apiurl}/{pageId}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Page> GetPagesHierarchy(List<Page> pages)
|
|
||||||
{
|
|
||||||
List<Page> hierarchy = new List<Page>();
|
|
||||||
Action<List<Page>, Page> getPath = null;
|
|
||||||
getPath = (pageList, page) =>
|
|
||||||
{
|
|
||||||
IEnumerable<Page> 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);
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ using Oqtane.Extensions;
|
||||||
using Oqtane.Infrastructure;
|
using Oqtane.Infrastructure;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
using Oqtane.Security;
|
using Oqtane.Security;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using System;
|
||||||
|
|
||||||
namespace Oqtane.Controllers
|
namespace Oqtane.Controllers
|
||||||
{
|
{
|
||||||
|
@ -46,6 +46,7 @@ namespace Oqtane.Controllers
|
||||||
folders.Add(folder);
|
folders.Add(folder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
folders = GetFoldersHierarchy(folders);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -237,5 +238,48 @@ namespace Oqtane.Controllers
|
||||||
HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
|
HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static List<Folder> GetFoldersHierarchy(List<Folder> folders)
|
||||||
|
{
|
||||||
|
List<Folder> hierarchy = new List<Folder>();
|
||||||
|
Action<List<Folder>, Folder> getPath = null;
|
||||||
|
var folders1 = folders;
|
||||||
|
getPath = (folderList, folder) =>
|
||||||
|
{
|
||||||
|
IEnumerable<Folder> children;
|
||||||
|
int level;
|
||||||
|
if (folder == null)
|
||||||
|
{
|
||||||
|
level = -1;
|
||||||
|
children = folders1.Where(item => item.ParentId == null);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
level = folder.Level;
|
||||||
|
children = folders1.Where(item => item.ParentId == folder.FolderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (Folder child in children)
|
||||||
|
{
|
||||||
|
child.Level = level + 1;
|
||||||
|
child.HasChildren = folders1.Any(item => item.ParentId == child.FolderId);
|
||||||
|
hierarchy.Add(child);
|
||||||
|
if (getPath != null) getPath(folderList, child);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
folders = folders.OrderBy(item => item.Order).ToList();
|
||||||
|
getPath(folders, null);
|
||||||
|
|
||||||
|
// add any non-hierarchical items to the end of the list
|
||||||
|
foreach (Folder folder in folders)
|
||||||
|
{
|
||||||
|
if (hierarchy.Find(item => item.FolderId == folder.FolderId) == null)
|
||||||
|
{
|
||||||
|
hierarchy.Add(folder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return hierarchy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,6 +97,7 @@ namespace Oqtane.Controllers
|
||||||
site.Pages.Add(page);
|
site.Pages.Add(page);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
site.Pages = GetPagesHierarchy(site.Pages);
|
||||||
|
|
||||||
// modules
|
// modules
|
||||||
List<ModuleDefinition> moduledefinitions = _moduleDefinitions.GetModuleDefinitions(site.SiteId).ToList();
|
List<ModuleDefinition> moduledefinitions = _moduleDefinitions.GetModuleDefinitions(site.SiteId).ToList();
|
||||||
|
@ -213,5 +214,45 @@ namespace Oqtane.Controllers
|
||||||
HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
|
HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static List<Page> GetPagesHierarchy(List<Page> pages)
|
||||||
|
{
|
||||||
|
List<Page> hierarchy = new List<Page>();
|
||||||
|
Action<List<Page>, Page> getPath = null;
|
||||||
|
getPath = (pageList, page) =>
|
||||||
|
{
|
||||||
|
IEnumerable<Page> 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);
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user