angular / angular/components

(bug)[Mat-Tree] - Problematic behavior when combining dynamic data with trackby

Open
#15,015 4 comments 10 reactions 0 assignees View on GitHub
area: material/tree P4 perf
Dominant language
TypeScript
Stars
25k
Forks
6.8k
Avg merge
1d 8h
Merged PRs (30d)
91

Description

#### What is the expected behavior?
There should be a way to be able to dynamically update leaf nodes within a tree without forcing a collapse upon the tree.

#### What is the current behavior?
Utilizing a `trackBy` function to track an individual node by something like an ID causes the entire tree to become unresponsive after a change is made to the data. When the `trackBy` is omitted, the tree continues to respond after data changes, but any open nodes will collapse and you will have to re-navigate to the previously opened node.

#### What are the steps to reproduce?
Please reference the following stackblitz. Clicking the 'new' button will cause a new leaf to be created under node ID 1. Once this happens, you will see that all nodes will collapse, and clicking on the chevron will not prompt them to open. If you navigate to the template for the controller, and remove the `trackBy` function from the `mat-tree` element, you will find that upon clicking 'new' the tree will continue to collapse, but you will be able to re-expand individual nodes and see the new leaf.

https://stackblitz.com/edit/angular-afy2h1

Contributor guide

Open the contributing guide

Research direction

Start with the linked StackBlitz reproduction and inspect the mat-tree template and controller around the dynamic leaf update and trackBy function. Reproduce the issue with and without trackBy, then trace the tree update behavior. Done means adding a leaf keeps the tree responsive and preserves the ability to expand nodes.

Written by the indexing model from the issue text.

Assessment

Tech stack
angular, typescript
Domain
frontend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.