From 38aee3b1c732b93f48fb14c43d05a5723c681fc0 Mon Sep 17 00:00:00 2001 From: SlowRobot Date: Fri, 22 Jul 2022 01:08:38 +1000 Subject: [PATCH 1/2] 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 Date: Fri, 29 Jul 2022 09:20:37 +1000 Subject: [PATCH 2/2] updated package-lock.json --- .../react-pages-hierarchy/package-lock.json | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/samples/react-pages-hierarchy/package-lock.json b/samples/react-pages-hierarchy/package-lock.json index 578bdfba3..c1e4c4679 100644 --- a/samples/react-pages-hierarchy/package-lock.json +++ b/samples/react-pages-hierarchy/package-lock.json @@ -3882,6 +3882,16 @@ "msal": "1.4.13", "msalLegacy": "npm:msal@1.4.12", "tslib": "~1.10.0" + }, + "dependencies": { + "msalLegacy": { + "version": "npm:msal@1.4.12", + "resolved": "https://registry.npmjs.org/msal/-/msal-1.4.12.tgz", + "integrity": "sha512-gjupwQ6nvNL6mZkl5NIXyUmZhTiEMRu5giNdgHMh8l5EPOnV2Xj6nukY1NIxFacSTkEYUSDB47Pej9GxDYf+1w==", + "requires": { + "tslib": "^1.9.3" + } + } } }, "@microsoft/sp-listview-extensibility": { @@ -18736,14 +18746,6 @@ "tslib": "^1.9.3" } }, - "msalLegacy": { - "version": "npm:msal@1.4.12", - "resolved": "https://registry.npmjs.org/msal/-/msal-1.4.12.tgz", - "integrity": "sha512-gjupwQ6nvNL6mZkl5NIXyUmZhTiEMRu5giNdgHMh8l5EPOnV2Xj6nukY1NIxFacSTkEYUSDB47Pej9GxDYf+1w==", - "requires": { - "tslib": "^1.9.3" - } - }, "multicast-dns": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",