fix(NavMenu): ignore stale selected nodes after item replacement

This commit is contained in:
chinboy
2026-08-07 09:16:23 +08:00
parent 6c2ad58df9
commit 54c6b52069
2 changed files with 77 additions and 1 deletions
@@ -118,7 +118,29 @@ internal sealed class NavMenuSelectionCoordinator
}
var selectedNode = _appliedSelectedNode ?? menu.SelectedItem;
return selectedNode is null ? null : menu.FindRealizedMenuItem(selectedNode);
if (selectedNode is null)
{
return null;
}
if (!BelongsToMenu(menu, selectedNode))
{
Reset();
return null;
}
return menu.FindRealizedMenuItem(selectedNode);
}
private static bool BelongsToMenu(NavMenu menu, INavMenuNode node)
{
var rootNode = node;
while (rootNode.ParentNode is INavMenuNode parentNode)
{
rootNode = parentNode;
}
return NavMenuEntryGraph.ContainsDirectNode(menu.Items, rootNode);
}
private void Reset()