Skip to content

Commit 77c19cf

Browse files
committed
Refactor NavigationTree to handle grouping of items and improve rendering logic
1 parent ef27632 commit 77c19cf

File tree

1 file changed

+43
-13
lines changed

1 file changed

+43
-13
lines changed

apps/console/src/components/AppSidebar.tsx

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -210,23 +210,53 @@ export function AppSidebar({ activeAppName, onAppChange }: { activeAppName: stri
210210
function NavigationTree({ items }: { items: any[] }) {
211211
const hasGroups = items.some(i => i.type === 'group');
212212

213-
if (hasGroups) {
213+
// If no explicit groups, wrap everything in one default group
214+
if (!hasGroups) {
214215
return (
215-
<>
216-
{items.map(item => <NavigationItemRenderer key={item.id} item={item} />)}
217-
</>
216+
<SidebarGroup>
217+
<SidebarGroupContent>
218+
<SidebarMenu>
219+
{items.map(item => <NavigationItemRenderer key={item.id} item={item} />)}
220+
</SidebarMenu>
221+
</SidebarGroupContent>
222+
</SidebarGroup>
218223
);
219224
}
220225

221-
return (
222-
<SidebarGroup>
223-
<SidebarGroupContent>
224-
<SidebarMenu>
225-
{items.map(item => <NavigationItemRenderer key={item.id} item={item} />)}
226-
</SidebarMenu>
227-
</SidebarGroupContent>
228-
</SidebarGroup>
229-
);
226+
// If there are groups, we need to handle mixed content
227+
// We group consecutive non-group items into an implicit SidebarGroup
228+
const renderedItems: React.ReactNode[] = [];
229+
let currentBuffer: any[] = [];
230+
231+
// Helper to flush buffer
232+
const flushBuffer = (keyPrefix: string) => {
233+
if (currentBuffer.length === 0) return;
234+
renderedItems.push(
235+
<SidebarGroup key={`${keyPrefix}-group`}>
236+
<SidebarGroupContent>
237+
<SidebarMenu>
238+
{currentBuffer.map(item => (
239+
<NavigationItemRenderer key={item.id} item={item} />
240+
))}
241+
</SidebarMenu>
242+
</SidebarGroupContent>
243+
</SidebarGroup>
244+
);
245+
currentBuffer = [];
246+
};
247+
248+
items.forEach((item, index) => {
249+
if (item.type === 'group') {
250+
flushBuffer(`auto-${index}`);
251+
renderedItems.push(<NavigationItemRenderer key={item.id} item={item} />);
252+
} else {
253+
currentBuffer.push(item);
254+
}
255+
});
256+
257+
flushBuffer('auto-end');
258+
259+
return <>{renderedItems}</>;
230260
}
231261

232262
function NavigationItemRenderer({ item }: { item: any }) {

0 commit comments

Comments
 (0)