fix(ui/templates): defer deep-link reveal until TreeView restores sessionStorage
Both page.OnAfterRenderAsync(firstRender=true) and TreeView.OnAfterRenderAsync(firstRender=true) ran concurrently: - Page called RevealNode → added ancestor keys to _expandedKeys - TreeView awaited treeviewStorage.load → replaced _expandedKeys with the persisted set (often empty if user collapsed before navigating) Whichever JS interop completed second won. When TreeView won, the deep-link reveal silently lost. Gate the reveal on firstRender==false so it runs strictly after TreeView's restore is done.
This commit is contained in:
@@ -177,10 +177,15 @@
|
||||
}
|
||||
}
|
||||
|
||||
private bool _revealApplied;
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
if (firstRender && TemplateIdParam > 0 && _tree != null)
|
||||
// Wait until second render so TreeView has finished restoring its sessionStorage
|
||||
// expansion state; otherwise that restore races with RevealNode and overwrites it.
|
||||
if (!_revealApplied && !firstRender && TemplateIdParam > 0 && _tree != null)
|
||||
{
|
||||
_revealApplied = true;
|
||||
await _tree.RevealNode($"t:{TemplateIdParam}", select: true);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user