@mintlify/common
Version:
Commonly shared code within Mintlify
62 lines (61 loc) • 2.48 kB
JavaScript
import { divisions, } from '@mintlify/validation';
import { readObjectArrayProperty } from '../divisions/iterateObjectArrayProperty.js';
import { replaceSlashIndex } from '../slug/replaceSlashIndex.js';
import { checkNavAccess, isPage } from './index.js';
import { prioritizeDefaultDivisionItem } from './prioritize-default-division-item.js';
export function getFirstPageFromNavigation(node, userGroups, shouldCheckNavAccess = false, isPreview = false) {
if (!node || typeof node !== 'object')
return undefined;
if (isPage(node)) {
if (shouldCheckNavAccess && userGroups && !checkNavAccess(node, userGroups, isPreview)) {
return undefined;
}
node.href = replaceSlashIndex(node.href);
return node;
}
if ('pages' in node) {
if ('root' in node && typeof node.root === 'object') {
const page = getFirstPageFromNavigation(node.root, userGroups, shouldCheckNavAccess, isPreview);
if (page) {
page.href = replaceSlashIndex(page.href);
return page;
}
}
for (const page of node.pages) {
if (typeof page === 'object') {
const pagePath = getFirstPageFromNavigation(page, userGroups, shouldCheckNavAccess, isPreview);
if (pagePath) {
pagePath.href = replaceSlashIndex(pagePath.href);
return pagePath;
}
}
}
}
if ('groups' in node) {
for (const group of node.groups) {
if (group.hidden)
continue;
const page = getFirstPageFromNavigation(group, userGroups, shouldCheckNavAccess, isPreview);
if (page) {
page.href = replaceSlashIndex(page.href);
return page;
}
}
}
for (const key of divisions) {
const items = readObjectArrayProperty(node, key);
if (!items)
continue;
const orderedItems = prioritizeDefaultDivisionItem(items, key);
for (const item of orderedItems) {
if (typeof item === 'object' && 'hidden' in item && item.hidden)
continue;
const page = getFirstPageFromNavigation(item, userGroups, shouldCheckNavAccess, isPreview);
if (page) {
page.href = replaceSlashIndex(page.href);
return page;
}
}
}
return undefined;
}