mirror of
https://github.com/hanzo-docs/docs.git
synced 2026-10-26 23:49:51 +00:00
Core: Remove undefined values from page tree
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'fumadocs-core': patch
|
||||
---
|
||||
|
||||
Remove undefined values from page tree
|
||||
@@ -177,7 +177,7 @@ function buildFolderNode(
|
||||
children = nodes ?? restNodes;
|
||||
}
|
||||
|
||||
return {
|
||||
return removeUndefined({
|
||||
type: 'folder',
|
||||
name: meta?.title ?? index?.name ?? pathToName(folder.file.name),
|
||||
icon: ctx.resolveIcon(meta?.icon),
|
||||
@@ -185,7 +185,7 @@ function buildFolderNode(
|
||||
defaultOpen: meta?.defaultOpen,
|
||||
index,
|
||||
children,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function buildFileNode(page: Page, ctx: PageTreeBuilderContext): PageTree.Item {
|
||||
@@ -198,12 +198,12 @@ function buildFileNode(page: Page, ctx: PageTreeBuilderContext): PageTree.Item {
|
||||
if (result) localePage = result;
|
||||
}
|
||||
|
||||
return {
|
||||
return removeUndefined({
|
||||
type: 'page',
|
||||
name: localePage.data.title,
|
||||
icon: ctx.resolveIcon(localePage.data.icon),
|
||||
url: localePage.url,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function build(ctx: PageTreeBuilderContext): PageTree.Root {
|
||||
@@ -254,3 +254,13 @@ export function createPageTreeBuilder({
|
||||
function pathToName(path: string): string {
|
||||
return path.slice(0, 1).toUpperCase() + path.slice(1);
|
||||
}
|
||||
|
||||
function removeUndefined<T extends object>(value: T): T {
|
||||
const obj = value as Record<string, unknown>;
|
||||
Object.keys(obj).forEach((key) => {
|
||||
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete -- Remove undefined values
|
||||
if (obj[key] === undefined) delete obj[key];
|
||||
});
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -24,18 +24,17 @@ test('Simple', () => {
|
||||
});
|
||||
|
||||
expect(result.pageTree, 'Page Tree').toMatchInlineSnapshot(`
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"icon": undefined,
|
||||
"name": "Hello",
|
||||
"type": "page",
|
||||
"url": "/test",
|
||||
},
|
||||
],
|
||||
"name": "",
|
||||
}
|
||||
`);
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"name": "Hello",
|
||||
"type": "page",
|
||||
"url": "/test",
|
||||
},
|
||||
],
|
||||
"name": "",
|
||||
}
|
||||
`);
|
||||
|
||||
expect(result.getPages().length).toBe(1);
|
||||
expect(result.getPage(['test'])).toBeDefined();
|
||||
@@ -74,7 +73,6 @@ test('Nested Directories', async () => {
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"icon": undefined,
|
||||
"name": "Hello",
|
||||
"type": "page",
|
||||
"url": "/test",
|
||||
@@ -82,17 +80,12 @@ test('Nested Directories', async () => {
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"icon": undefined,
|
||||
"name": "Nested Page",
|
||||
"type": "page",
|
||||
"url": "/nested/test",
|
||||
},
|
||||
],
|
||||
"defaultOpen": undefined,
|
||||
"icon": undefined,
|
||||
"index": undefined,
|
||||
"name": "Nested",
|
||||
"root": undefined,
|
||||
"type": "folder",
|
||||
},
|
||||
{
|
||||
@@ -172,7 +165,6 @@ test('Internationalized Routing', () => {
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"icon": undefined,
|
||||
"name": "Hello",
|
||||
"type": "page",
|
||||
"url": "/test",
|
||||
@@ -180,17 +172,12 @@ test('Internationalized Routing', () => {
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"icon": undefined,
|
||||
"name": "Nested Page",
|
||||
"type": "page",
|
||||
"url": "/nested/test",
|
||||
},
|
||||
],
|
||||
"defaultOpen": undefined,
|
||||
"icon": undefined,
|
||||
"index": undefined,
|
||||
"name": "Nested",
|
||||
"root": undefined,
|
||||
"type": "folder",
|
||||
},
|
||||
],
|
||||
@@ -199,34 +186,28 @@ test('Internationalized Routing', () => {
|
||||
`);
|
||||
|
||||
expect(result.pageTree['cn'], 'Page Tree').toMatchInlineSnapshot(`
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"icon": undefined,
|
||||
"name": "Hello Chinese",
|
||||
"type": "page",
|
||||
"url": "/cn/test",
|
||||
},
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"icon": undefined,
|
||||
"name": "Nested Page Chinese",
|
||||
"type": "page",
|
||||
"url": "/cn/nested/test",
|
||||
},
|
||||
],
|
||||
"defaultOpen": undefined,
|
||||
"icon": undefined,
|
||||
"index": undefined,
|
||||
"name": "Nested Chinese",
|
||||
"root": undefined,
|
||||
"type": "folder",
|
||||
},
|
||||
],
|
||||
"name": "Docs Chinese",
|
||||
}
|
||||
`);
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"name": "Hello Chinese",
|
||||
"type": "page",
|
||||
"url": "/cn/test",
|
||||
},
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"name": "Nested Page Chinese",
|
||||
"type": "page",
|
||||
"url": "/cn/nested/test",
|
||||
},
|
||||
],
|
||||
"name": "Nested Chinese",
|
||||
"type": "folder",
|
||||
},
|
||||
],
|
||||
"name": "Docs Chinese",
|
||||
}
|
||||
`);
|
||||
|
||||
expect(result.getPages().length).toBe(2);
|
||||
expect(result.getPage(['test'])).toBeDefined();
|
||||
|
||||
Reference in New Issue
Block a user