Skip to content

Commit 0670ad1

Browse files
committed
fix: make sidebar dropdowns mutually exclusive at the same level
Signed-off-by: Pranav-IIITM <jogdandpranav2007@gmail.com>
1 parent 370a95a commit 0670ad1

1 file changed

Lines changed: 32 additions & 16 deletions

File tree

src/components/Layout/Sidebar/SidebarRouteTree.tsx

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -100,19 +100,12 @@ function ExpandableSidebarItem({
100100
breadcrumbs,
101101
selected,
102102
pendingRoute,
103-
}: ExpandableSidebarItemProps) {
104-
const isBreadcrumb =
105-
breadcrumbs.length > 1 &&
106-
breadcrumbs[breadcrumbs.length - 1].path === path;
107-
const defaultExpanded = isForceExpanded || isBreadcrumb || selected;
108-
const [isExpanded, setIsExpanded] = useState(defaultExpanded);
109-
110-
useEffect(() => {
111-
if (defaultExpanded) {
112-
setIsExpanded(true);
113-
}
114-
}, [defaultExpanded]);
115-
103+
isExpanded,
104+
onToggle,
105+
}: ExpandableSidebarItemProps & {
106+
isExpanded: boolean;
107+
onToggle: () => void;
108+
}) {
116109
return (
117110
<li key={`${title}-${path}-${level}-heading`}>
118111
<SidebarLink
@@ -123,11 +116,11 @@ function ExpandableSidebarItem({
123116
level={level}
124117
title={title}
125118
version={version}
126-
isExpanded={isExpanded}
119+
isExpanded={isForceExpanded || isExpanded}
127120
hideArrow={isForceExpanded}
128-
onToggle={() => setIsExpanded(!isExpanded)}
121+
onToggle={onToggle}
129122
/>
130-
<CollapseWrapper duration={250} isExpanded={isExpanded}>
123+
<CollapseWrapper duration={250} isExpanded={isForceExpanded || isExpanded}>
131124
<SidebarRouteTree
132125
isForceExpanded={isForceExpanded}
133126
routeTree={{title, routes}}
@@ -148,6 +141,25 @@ export function SidebarRouteTree({
148141
const slug = useRouter().asPath.split(/[\?\#]/)[0];
149142
const pendingRoute = usePendingRoute();
150143
const currentRoutes = routeTree.routes as RouteItem[];
144+
145+
const defaultExpandedPath = currentRoutes.find(({path}) => {
146+
const isBreadcrumb =
147+
breadcrumbs.length > 1 &&
148+
breadcrumbs[breadcrumbs.length - 1].path === path;
149+
const selected = slug === path;
150+
return isBreadcrumb || selected;
151+
})?.path || null;
152+
153+
const [expandedPath, setExpandedPath] = useState<string | null>(
154+
defaultExpandedPath
155+
);
156+
157+
useEffect(() => {
158+
if (defaultExpandedPath) {
159+
setExpandedPath(defaultExpandedPath);
160+
}
161+
}, [defaultExpandedPath]);
162+
151163
return (
152164
<ul>
153165
{currentRoutes.map(
@@ -189,6 +201,10 @@ export function SidebarRouteTree({
189201
breadcrumbs={breadcrumbs}
190202
selected={selected}
191203
pendingRoute={pendingRoute}
204+
isExpanded={expandedPath === path}
205+
onToggle={() =>
206+
setExpandedPath(expandedPath === path ? null : (path || null))
207+
}
192208
/>
193209
);
194210
} else {

0 commit comments

Comments
 (0)