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;
}
/* 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 */
@media (max-width: 768px) {
.sage-sidebar {

View File

@ -105,6 +105,13 @@
var isCollapsed = sidebar.classList.contains('collapsed');
try { localStorage.setItem(SIDEBAR_KEY, isCollapsed); } catch(e) {}
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
@ -128,6 +135,8 @@
console.log('[Shell] sage_sidebar not found');
return;
}
// Check if sidebar is currently collapsed before clearing
var isCollapsed = sidebar.el && sidebar.el.classList.contains('collapsed');
// Clear existing children
sidebar.subwidgets.forEach(function(w) { w.destroy && w.destroy(); });
sidebar.subwidgets = [];
@ -142,6 +151,13 @@
var w = await bricks.widgetBuild(desc, sidebar);
if (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');
}
} catch(e) {
@ -185,6 +201,16 @@
if (btn && sidebar) {
var isCollapsed = sidebar.classList.contains('collapsed');
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 {
setTimeout(retrySidebarIcon, 200);
}