UNPKG

@mintlify/common

Version:

Commonly shared code within Mintlify

62 lines (61 loc) 2.48 kB
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; }