fix active page indicator on the sidebar being broken for some links
Took 9 minutes
This commit is contained in:
parent
54230367e1
commit
c4f7d4bf7e
@ -44,7 +44,7 @@ const CategoryItem = ({
|
|||||||
depth?: number;
|
depth?: number;
|
||||||
isLast?: boolean;
|
isLast?: boolean;
|
||||||
}) => {
|
}) => {
|
||||||
const path = usePathname();
|
const path = decodeURIComponent(usePathname());
|
||||||
const active =
|
const active =
|
||||||
(path === "/" && node.slug === "intro") || path === `/${node.slug}`;
|
(path === "/" && node.slug === "intro") || path === `/${node.slug}`;
|
||||||
const [isOpen, setIsOpen] = useState(true);
|
const [isOpen, setIsOpen] = useState(true);
|
||||||
@ -136,35 +136,32 @@ const CategoryItem = ({
|
|||||||
const buildTree = (pages: DocsContentMetadata[]): Record<string, TreeNode> => {
|
const buildTree = (pages: DocsContentMetadata[]): Record<string, TreeNode> => {
|
||||||
const tree: Record<string, TreeNode> = {};
|
const tree: Record<string, TreeNode> = {};
|
||||||
|
|
||||||
// Sort pages by the order property
|
pages
|
||||||
const sortedPages = pages.sort(
|
.sort((a: DocsContentMetadata, b: DocsContentMetadata) => {
|
||||||
(a: DocsContentMetadata, b: DocsContentMetadata) => {
|
|
||||||
const orderA = a.order ?? Number.MAX_SAFE_INTEGER;
|
const orderA = a.order ?? Number.MAX_SAFE_INTEGER;
|
||||||
const orderB = b.order ?? Number.MAX_SAFE_INTEGER;
|
const orderB = b.order ?? Number.MAX_SAFE_INTEGER;
|
||||||
return orderA - orderB;
|
return orderA - orderB;
|
||||||
}
|
})
|
||||||
);
|
.forEach((page: DocsContentMetadata) => {
|
||||||
|
const parts: string[] | undefined = page.slug?.split("/");
|
||||||
|
let currentLevel = tree;
|
||||||
|
|
||||||
sortedPages.forEach((page: DocsContentMetadata) => {
|
parts?.forEach((part: string, index: number) => {
|
||||||
const parts: string[] | undefined = page.slug?.split("/");
|
if (!currentLevel[part]) {
|
||||||
let currentLevel = tree;
|
currentLevel[part] = {
|
||||||
|
title: part,
|
||||||
parts?.forEach((part: string, index: number) => {
|
slug: parts.slice(0, index + 1).join("/"),
|
||||||
if (!currentLevel[part]) {
|
isFolder: index < parts.length - 1,
|
||||||
currentLevel[part] = {
|
children: {},
|
||||||
title: part,
|
};
|
||||||
slug: parts.slice(0, index + 1).join("/"),
|
}
|
||||||
isFolder: index < parts.length - 1,
|
if (index === parts.length - 1) {
|
||||||
children: {},
|
currentLevel[part].title = page.title;
|
||||||
};
|
currentLevel[part].isFolder = false;
|
||||||
}
|
}
|
||||||
if (index === parts.length - 1) {
|
currentLevel = currentLevel[part].children;
|
||||||
currentLevel[part].title = page.title;
|
});
|
||||||
currentLevel[part].isFolder = false;
|
|
||||||
}
|
|
||||||
currentLevel = currentLevel[part].children;
|
|
||||||
});
|
});
|
||||||
});
|
|
||||||
return tree;
|
return tree;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user