feat: wire Menu collapse/expand to sidebar toggle button + menu-collapsed CSS

This commit is contained in:
yumoqing 2026-05-29 11:12:56 +08:00
parent e2687054df
commit 37b648da0e
2 changed files with 38 additions and 0 deletions

View File

@ -143,6 +143,18 @@ body {
overflow: hidden; overflow: hidden;
} }
/* Menu collapsed state - hide text labels, center icons */
.menu-collapsed .filler {
display: none !important;
}
.menu-collapsed .menuitem {
justify-content: center;
padding: 8px 0;
}
.menu-collapsed .menuitem:hover {
background-color: var(--sage-bg-hover);
}
/* Mobile: sidebar as overlay */ /* Mobile: sidebar as overlay */
@media (max-width: 768px) { @media (max-width: 768px) {
.sage-sidebar { .sage-sidebar {

View File

@ -105,6 +105,13 @@
var isCollapsed = sidebar.classList.contains('collapsed'); var isCollapsed = sidebar.classList.contains('collapsed');
try { localStorage.setItem(SIDEBAR_KEY, isCollapsed); } catch(e) {} try { localStorage.setItem(SIDEBAR_KEY, isCollapsed); } catch(e) {}
updateSidebarIcon(isCollapsed); updateSidebarIcon(isCollapsed);
// Toggle Menu widget collapse state
if (typeof bricks !== 'undefined') {
var menu = bricks.getWidgetById('global_nav_menu', bricks.app);
if (menu && menu.toggle_collapse) {
menu.toggle_collapse();
}
}
} }
// Initialize SPA Router // Initialize SPA Router
@ -128,6 +135,8 @@
console.log('[Shell] sage_sidebar not found'); console.log('[Shell] sage_sidebar not found');
return; return;
} }
// Check if sidebar is currently collapsed before clearing
var isCollapsed = sidebar.el && sidebar.el.classList.contains('collapsed');
// Clear existing children // Clear existing children
sidebar.subwidgets.forEach(function(w) { w.destroy && w.destroy(); }); sidebar.subwidgets.forEach(function(w) { w.destroy && w.destroy(); });
sidebar.subwidgets = []; sidebar.subwidgets = [];
@ -142,6 +151,13 @@
var w = await bricks.widgetBuild(desc, sidebar); var w = await bricks.widgetBuild(desc, sidebar);
if (w) { if (w) {
sidebar.addSubWidget(w); sidebar.addSubWidget(w);
// Re-apply collapsed state to newly built menu
if (isCollapsed) {
var menu = bricks.getWidgetById('global_nav_menu', bricks.app);
if (menu && menu.collapse) {
menu.collapse();
}
}
console.log('[Shell] Menu reloaded'); console.log('[Shell] Menu reloaded');
} }
} catch(e) { } catch(e) {
@ -185,6 +201,16 @@
if (btn && sidebar) { if (btn && sidebar) {
var isCollapsed = sidebar.classList.contains('collapsed'); var isCollapsed = sidebar.classList.contains('collapsed');
updateSidebarIcon(isCollapsed); updateSidebarIcon(isCollapsed);
// Apply collapsed state to Menu if sidebar was already collapsed
if (isCollapsed && typeof bricks !== 'undefined') {
var menu = bricks.getWidgetById('global_nav_menu', bricks.app);
if (menu && menu.collapse) {
menu.collapse();
} else {
setTimeout(retrySidebarIcon, 200);
return;
}
}
} else { } else {
setTimeout(retrySidebarIcon, 200); setTimeout(retrySidebarIcon, 200);
} }