UI & Core: Support defaultOpen for folder nodes

This commit is contained in:
Fuma Nama
2024-02-21 19:55:38 +08:00
parent 66e99d7891
commit 1c388ca5de
6 changed files with 19 additions and 3 deletions
+8
View File
@@ -0,0 +1,8 @@
---
'fumadocs-contentlayer': minor
'fumadocs-core': minor
'fumadocs-mdx': minor
'fumadocs-ui': minor
---
Support `defaultOpen` for folder nodes
@@ -155,6 +155,10 @@ export function create(options: Options = {}): Config {
type: 'string',
required: false,
},
defaultOpen: {
type: 'boolean',
required: false,
},
...metaFields,
},
computedFields: {
+1
View File
@@ -24,6 +24,7 @@ export interface Folder {
type: 'folder';
name: string;
root?: boolean;
defaultOpen?: boolean;
index?: Item;
icon?: ReactElement;
children: Node[];
@@ -86,7 +86,7 @@ function getFolderMeta(
function buildFolderNode(
folder: Folder,
ctx: PageTreeBuilderContext,
root = false,
defaultIsRoot = false,
): PageTree.Folder {
const indexNode = folder.children.find(
(node) => node.type === 'page' && node.file.name === 'index',
@@ -97,9 +97,9 @@ function buildFolderNode(
let children: PageTree.Folder['children'];
if (!meta) {
children = buildAll(folder.children, ctx, !root);
children = buildAll(folder.children, ctx, !defaultIsRoot);
} else {
const isRoot = meta.root ?? root;
const isRoot = meta.root ?? defaultIsRoot;
const addedNodePaths = new Set<string>();
const resolved = meta.pages?.flatMap<PageTree.Node | '...'>((item) => {
@@ -160,6 +160,7 @@ function buildFolderNode(
name: meta?.title ?? index?.name ?? pathToName(folder.file.name),
icon: ctx.resolveIcon(meta?.icon),
root: meta?.root,
defaultOpen: meta?.defaultOpen,
index,
children,
};
+1
View File
@@ -28,6 +28,7 @@ export interface MetaData {
title?: string;
root?: boolean;
pages?: string[];
defaultOpen?: boolean;
}
export interface PageData {
+1
View File
@@ -4,6 +4,7 @@ const metaSchema = z.object({
title: z.string().optional(),
pages: z.array(z.string()).optional(),
root: z.boolean().optional(),
defaultOpen: z.boolean().optional(),
icon: z.string().optional(),
});