From f600ac9f7ee6a40251b47c7adfc134f983f4221d Mon Sep 17 00:00:00 2001 From: SlowRobot Date: Fri, 22 Jul 2022 01:08:38 +1000 Subject: [PATCH] added the ability to find the current pages highest ancestor and allow the tree view to expand inclusively to it --- .../src/apiHooks/usePageApi.ts | 19 +++++++++++-------- .../pagehierarchy/PageHierarchyWebPart.ts | 8 ++++---- .../src/webparts/pagehierarchy/loc/en-us.js | 6 +++--- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/samples/react-pages-hierarchy/src/apiHooks/usePageApi.ts b/samples/react-pages-hierarchy/src/apiHooks/usePageApi.ts index 6fe0edebf..55f48d184 100644 --- a/samples/react-pages-hierarchy/src/apiHooks/usePageApi.ts +++ b/samples/react-pages-hierarchy/src/apiHooks/usePageApi.ts @@ -148,7 +148,7 @@ export function usePageApi(currentPageId: number, pageEditFinished: boolean, con const ancestorPages: IPage[] = buildPageAncestors(pages, currentPageId).reverse(); const childrenPages: IPage[] = buildPageChildren(pages, currentPageId); - const treeLink: INavLink = buildHierarchy(pages); + const treeLink: INavLink = buildHierarchy(pages, currentPageId); // dispatch the GET_ALL action pagesDispatch({ @@ -253,16 +253,19 @@ export function usePageApi(currentPageId: number, pageEditFinished: boolean, con return childPages; } - function buildHierarchy(allPages: IPage[]): INavLink { - function recurse(id: number, l: number): INavLink { + function buildHierarchy(allPages: IPage[], pageId: number): INavLink { + function recurse(id: number, l: number, ancestorPages: IPage[]): INavLink { var item: IPage = allPages.filter(i => i.id === id)[0]; - + var links: INavLink[] = []; - links = links.concat(allPages.filter(i => i.parentPageId === id).map(it => recurse(it.id, (l+1)))); - - return { name: item.title, url: item.url, key: item.id.toString(), links: links, isExpanded: treeExpandTo >= l }; + links = links.concat(allPages.filter(i => i.parentPageId === id).map(it => recurse(it.id, l ? l + 1 : l, ancestorPages))); + + return { name: item.title, url: item.url, key: item.id.toString(), links: links, isExpanded: treeExpandTo ? (treeExpandTo >= l) : (ancestorPages.find(f => f.id === id) ? true : false) }; } - return recurse(treeTop, 1); + + const ancestorPages: IPage[] = buildPageAncestors(allPages, pageId).reverse(); + + return recurse(treeTop ? treeTop : ancestorPages[0].id, treeExpandTo ? 1 : treeExpandTo, ancestorPages); } const addParentPageField = () => { diff --git a/samples/react-pages-hierarchy/src/webparts/pagehierarchy/PageHierarchyWebPart.ts b/samples/react-pages-hierarchy/src/webparts/pagehierarchy/PageHierarchyWebPart.ts index 35625fc17..c9b3f3f2e 100644 --- a/samples/react-pages-hierarchy/src/webparts/pagehierarchy/PageHierarchyWebPart.ts +++ b/samples/react-pages-hierarchy/src/webparts/pagehierarchy/PageHierarchyWebPart.ts @@ -79,10 +79,10 @@ export default class PageHierarchyWebPart extends BaseWebPart