UI: Support undefined state of defaultOpen in folder nodes

This commit is contained in:
fuma-nama
2024-07-24 15:25:40 +08:00
parent 3a1ae99a98
commit a332bee5c4
2 changed files with 16 additions and 10 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'fumadocs-ui': patch
---
Support `undefined` state of `defaultOpen` in folder nodes
+11 -10
View File
@@ -222,7 +222,7 @@ function PageNode({
}
function FolderNode({
item: { name, children, index, icon, defaultOpen = false },
item,
level,
}: {
item: PageTree.Folder;
@@ -230,14 +230,15 @@ function FolderNode({
}): React.ReactElement {
const { defaultOpenLevel, prefetch } = useContext(Context);
const pathname = usePathname();
const active = index !== undefined && isActive(index.url, pathname, false);
const active =
item.index !== undefined && isActive(item.index.url, pathname, false);
const childActive = useMemo(
() => hasActive(children, pathname),
[children, pathname],
() => hasActive(item.children, pathname),
[item.children, pathname],
);
const shouldExtend =
active || childActive || defaultOpenLevel >= level || defaultOpen;
active || childActive || (item.defaultOpen ?? defaultOpenLevel >= level);
const [open, setOpen] = useState(shouldExtend);
useOnChange(shouldExtend, (v) => {
@@ -260,8 +261,8 @@ function FolderNode({
const content = (
<>
{icon}
{name}
{item.icon}
{item.name}
<ChevronDown
data-icon
className={cn('ms-auto transition-transform', !open && '-rotate-90')}
@@ -271,10 +272,10 @@ function FolderNode({
return (
<Collapsible open={open} onOpenChange={setOpen}>
{index ? (
{item.index ? (
<Link
className={cn(itemVariants({ active }))}
href={index.url}
href={item.index.url}
onClick={onClick}
prefetch={prefetch}
>
@@ -288,7 +289,7 @@ function FolderNode({
<CollapsibleContent>
<NodeList
className="ms-2 flex flex-col border-s py-2 ps-2"
items={children}
items={item.children}
level={level}
/>
</CollapsibleContent>