fix: Menu widget now triggers Router._onReplace for SPA URL tracking

Menu widget's menu_clicked() was bypassing the standard _buildWidget
path in bricks.js, so Router._onReplace was never called when navigating
via sidebar menu items. This caused:
- Browser URL not updating on menu clicks
- F5 refresh not restoring the current page

Added Router hook after t.add_widget(w) in menu_clicked(), matching
the same pattern used in bricks.js _buildWidget.
This commit is contained in:
yumoqing 2026-05-31 12:32:17 +08:00
parent 216221f67f
commit f49994cea7

View File

@ -70,11 +70,16 @@ bricks.Menu = class extends bricks.VScrollPanel {
"url":opts.url "url":opts.url
} }
} }
var w = await bricks.widgetBuild(desc, this); var w = await bricks.widgetBuild(desc, this);
if (w && ! bricks.Factory.isWidgetType(w, 'Popup')){ if (w && ! bricks.Factory.isWidgetType(w, 'Popup')){
t.clear_widgets(); t.clear_widgets();
t.add_widget(w); t.add_widget(w);
} else { // Router hook: notify SPA router of menu-driven navigation
if (bricks.Router && bricks.Router._enabled
&& opts.url){
bricks.Router._onReplace(t, opts.url);
}
} else {
console.log('menu_clicked():widgetBuild() failed', desc); console.log('menu_clicked():widgetBuild() failed', desc);
} }
} else if (opts.script){ } else if (opts.script){