Navigation & Recursive Templates
Build navigation components with rw.pages and recursive includes
The Page Tree
// com.realmacsoftware.navTree/hooks.source.js
// Efficient recursive traversal: include node only if it should be shown
const buildPages = (pages, parentPath = "", relativeLevel = 0) => {
const result = [];
if (!Array.isArray(pages) || pages.length === 0) return result;
// Check if we've reached the maximum depth limit
const hasReachedMaxDepth =
maxLevelsDepth === "manual" && maxLevels > 0 && relativeLevel >= maxLevels;
for (let i = 0; i < pages.length; i += 1) {
const page = pages[i];
if (!(page.displayInMenu && !page.isDraft)) continue;
const slug = slugify(page.title);
const id = parentPath ? parentPath + "-" + slug : slug;
// Only build children if we haven't reached the maximum depth
const children = hasReachedMaxDepth
? []
: buildPages(page.pages || [], id, relativeLevel + 1);
const hasPages = children.length > 0;
const hasActiveChild =
hasPages &&
children.some((c) => c.isActive || c.hasActiveChild);
const processedPage = {
...page,
id,
pages: children,
hasPages,
hasActiveChild,
isTopLevel: relativeLevel === 0,
isSecondLevel: relativeLevel === 1,
isThirdLevel: relativeLevel >= 2,
showPageIcon: pageIconDisplay && relativeLevel === 0,
};
if (processedPage.isActive || hasActiveChild) {
openPages.push(id);
}
result.push(processedPage);
}
return result;
};Recursive Includes
One Tree, Two Menus: The Desktop/Mobile Split
Active States and aria-current
The Nav on the Canvas
The deploy Flag
Related Documentation
Last updated
Was this helpful?

