mirror of
https://github.com/hanzo-docs/docs.git
synced 2026-10-25 04:20:02 +00:00
UI: Support children prop in custom Folder component
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'fumadocs-ui': patch
|
||||
---
|
||||
|
||||
Support `children` prop in custom `Folder` component
|
||||
@@ -55,6 +55,8 @@ export default defineConfig({
|
||||
|
||||
return {
|
||||
rehypeCodeOptions: {
|
||||
lazy: true,
|
||||
langs: ['ts', 'js', 'html'],
|
||||
inline: 'tailing-curly-colon',
|
||||
themes: {
|
||||
light: 'catppuccin-latte',
|
||||
|
||||
@@ -47,7 +47,7 @@ export interface SidebarOptions extends SidebarProps {
|
||||
|
||||
export interface SidebarComponents {
|
||||
Item: FC<{ item: PageTree.Item }>;
|
||||
Folder: FC<{ item: PageTree.Folder; level: number }>;
|
||||
Folder: FC<{ item: PageTree.Folder; level: number; children: ReactNode }>;
|
||||
Separator: FC<{ item: PageTree.Separator }>;
|
||||
}
|
||||
|
||||
|
||||
@@ -396,35 +396,42 @@ export function SidebarPageTree(props: {
|
||||
): ReactNode[] {
|
||||
return items.map((item, i) => {
|
||||
const id = `${item.type}_${i.toString()}`;
|
||||
|
||||
switch (item.type) {
|
||||
case 'separator':
|
||||
if (Separator) return <Separator key={id} item={item} />;
|
||||
return (
|
||||
<SidebarSeparator key={id} className={cn(i !== 0 && 'mt-8')}>
|
||||
{item.name}
|
||||
</SidebarSeparator>
|
||||
);
|
||||
case 'folder':
|
||||
if (Folder) return <Folder key={id} item={item} level={level} />;
|
||||
return (
|
||||
<PageTreeFolder key={id} item={item} level={level}>
|
||||
{renderSidebarList(item.children, level + 1)}
|
||||
</PageTreeFolder>
|
||||
);
|
||||
default:
|
||||
if (Item) return <Item key={item.url} item={item} />;
|
||||
return (
|
||||
<SidebarItem
|
||||
key={item.url}
|
||||
href={item.url}
|
||||
external={item.external}
|
||||
icon={item.icon}
|
||||
>
|
||||
{item.name}
|
||||
</SidebarItem>
|
||||
);
|
||||
if (item.type === 'separator') {
|
||||
if (Separator) return <Separator key={id} item={item} />;
|
||||
return (
|
||||
<SidebarSeparator key={id} className={cn(i !== 0 && 'mt-8')}>
|
||||
{item.name}
|
||||
</SidebarSeparator>
|
||||
);
|
||||
}
|
||||
|
||||
if (item.type === 'folder') {
|
||||
const children = renderSidebarList(item.children, level + 1);
|
||||
|
||||
if (Folder)
|
||||
return (
|
||||
<Folder key={id} item={item} level={level}>
|
||||
{children}
|
||||
</Folder>
|
||||
);
|
||||
return (
|
||||
<PageTreeFolder key={id} item={item} level={level}>
|
||||
{children}
|
||||
</PageTreeFolder>
|
||||
);
|
||||
}
|
||||
|
||||
if (Item) return <Item key={item.url} item={item} />;
|
||||
return (
|
||||
<SidebarItem
|
||||
key={item.url}
|
||||
href={item.url}
|
||||
external={item.external}
|
||||
icon={item.icon}
|
||||
>
|
||||
{item.name}
|
||||
</SidebarItem>
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user