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)
|
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);
|
await _tree.RevealNode($"t:{TemplateIdParam}", select: true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user