45 lines
1.4 KiB
JavaScript
45 lines
1.4 KiB
JavaScript
export const findMarkdownByPath = (tree, pathString) => {
|
|
if (!tree || !pathString) return null;
|
|
|
|
const pathSegments = pathString.split('/').filter(segment => segment.length > 0);
|
|
|
|
if (pathSegments.length === 0) {
|
|
const rootIndex = tree.children?.find(
|
|
child => child.type === 'markdown' && child.title === 'index'
|
|
);
|
|
return rootIndex || null;
|
|
}
|
|
let currentNode = tree;
|
|
|
|
for (let i = 0; i < pathSegments.length; i++) {
|
|
const segment = pathSegments[i];
|
|
|
|
const childPath = currentNode.children?.find(
|
|
child => child.type === 'path' && child.name === segment
|
|
);
|
|
|
|
if (!childPath) {
|
|
if (i === pathSegments.length - 1) {
|
|
const markdownNode = currentNode.children?.find(
|
|
child => child.type === 'markdown' && child.title === segment
|
|
);
|
|
return markdownNode || null;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
currentNode = childPath;
|
|
}
|
|
|
|
|
|
const indexMarkdown = currentNode.children?.find(
|
|
child => child.type === 'markdown' && child.title === 'index'
|
|
);
|
|
|
|
return indexMarkdown || null;
|
|
};
|
|
|
|
export const getMarkdownIdByPath = (tree, pathString) => {
|
|
const markdownNode = findMarkdownByPath(tree, pathString);
|
|
return markdownNode?.id || null;
|
|
}; |